PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.3
Elementor Website Builder – more than just a page builder v4.0.3
4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / assets / js / e-react-promotions.js

e-react-promotions.js in Elementor Website Builder – more than just a page builder 4.0.3, at assets/js/e-react-promotions.js

21,102 lines 1.3 MB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /******/ (() => { // webpackBootstrap
2 /******/ var __webpack_modules__ = ({
3
4 /***/ "../assets/dev/js/editor/components/dynamic-tags/control-behavior.js":
5 /*!***************************************************************************!*\
6 !*** ../assets/dev/js/editor/components/dynamic-tags/control-behavior.js ***!
7 \***************************************************************************/
8 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9
10 "use strict";
11 /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
12
13
14 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
15 var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
16 var TagPanelView = __webpack_require__(/*! elementor-dynamic-tags/tag-panel-view */ "../assets/dev/js/editor/components/dynamic-tags/tag-panel-view.js");
17 module.exports = Marionette.Behavior.extend({
18 tagView: null,
19 listenerAttached: false,
20 initialize: function initialize() {
21 if (!this.listenerAttached) {
22 this.listenTo(this.view.options.container.settings, 'change:external:__dynamic__', this.onAfterExternalChange);
23 this.listenerAttached = true;
24 }
25 },
26 shouldRenderTools: function shouldRenderTools() {
27 var hasDefault = this.getOption('dynamicSettings').default;
28 if (hasDefault) {
29 return false;
30 }
31 var isFeatureAvailableToUser = elementor.helpers.hasPro() && !elementor.helpers.hasProAndNotConnected(),
32 hasTags = this.getOption('tags').length > 0;
33 return !isFeatureAvailableToUser || hasTags;
34 },
35 renderTools: function renderTools() {
36 var _this = this;
37 if (!this.shouldRenderTools()) {
38 return;
39 }
40 var $dynamicSwitcher = jQuery(Marionette.Renderer.render('#tmpl-elementor-control-dynamic-switcher'));
41 $dynamicSwitcher.on('click', function (event) {
42 return _this.onDynamicSwitcherClick(event);
43 });
44 this.$el.find('.elementor-control-dynamic-switcher-wrapper').append($dynamicSwitcher);
45 this.ui.dynamicSwitcher = $dynamicSwitcher;
46 if ('color' === this.view.model.get('type')) {
47 if (this.view.colorPicker) {
48 this.moveDynamicSwitcherToColorPicker();
49 } else {
50 setTimeout(function () {
51 return _this.moveDynamicSwitcherToColorPicker();
52 });
53 }
54 }
55
56 // Add a Tipsy Tooltip to the Dynamic Switcher
57 this.ui.dynamicSwitcher.tipsy({
58 title: function title() {
59 return this.getAttribute('data-tooltip');
60 },
61 gravity: 's'
62 });
63 },
64 moveDynamicSwitcherToColorPicker: function moveDynamicSwitcherToColorPicker() {
65 var $colorPickerToolsContainer = this.view.colorPicker.$pickerToolsContainer;
66 this.ui.dynamicSwitcher.removeClass('elementor-control-unit-1').addClass('e-control-tool');
67 var $eyedropper = $colorPickerToolsContainer.find('.elementor-control-element-color-picker');
68 if ($eyedropper.length) {
69 this.ui.dynamicSwitcher.insertBefore($eyedropper);
70 } else {
71 $colorPickerToolsContainer.append(this.ui.dynamicSwitcher);
72 }
73 },
74 toggleDynamicClass: function toggleDynamicClass() {
75 this.$el.toggleClass('elementor-control-dynamic-value', this.isDynamicMode());
76 },
77 isDynamicMode: function isDynamicMode() {
78 var dynamicSettings = this.view.container.settings.get('__dynamic__');
79 return !!(dynamicSettings && dynamicSettings[this.view.model.get('name')]);
80 },
81 createTagsList: function createTagsList() {
82 var tags = _.groupBy(this.getOption('tags'), 'group'),
83 groups = elementor.dynamicTags.getConfig('groups'),
84 $tagsList = this.ui.tagsList = jQuery('<div>', {
85 class: 'elementor-tags-list'
86 }),
87 $tagsListInner = jQuery('<div>', {
88 class: 'elementor-tags-list__inner'
89 });
90 $tagsList.append($tagsListInner);
91 jQuery.each(groups, function (groupName) {
92 var groupTags = tags[groupName];
93 if (!groupTags) {
94 return;
95 }
96 var group = this,
97 $groupTitle = jQuery('<div>', {
98 class: 'elementor-tags-list__group-title'
99 }).text(group.title);
100 $tagsListInner.append($groupTitle);
101 groupTags.forEach(function (tag) {
102 var $tag = jQuery('<div>', {
103 class: 'elementor-tags-list__item'
104 });
105 $tag.text(tag.title).attr('data-tag-name', tag.name);
106 $tagsListInner.append($tag);
107 });
108 });
109
110 // Create and inject pro dynamic teaser template if Pro is not installed
111 if (!elementor.helpers.hasPro() && Object.keys(tags).length) {
112 var proTeaser = Marionette.Renderer.render('#tmpl-elementor-dynamic-tags-promo', {
113 promotionUrl: elementor.config.dynamicPromotionURL.replace('%s', this.view.model.get('name'))
114 });
115 $tagsListInner.append(proTeaser);
116 }
117 $tagsListInner.on('click', '.elementor-tags-list__item', this.onTagsListItemClick.bind(this));
118 elementorCommon.elements.$body.append($tagsList);
119 },
120 getTagsList: function getTagsList() {
121 if (!this.ui.tagsList) {
122 this.createTagsList();
123 }
124 return this.ui.tagsList;
125 },
126 toggleTagsList: function toggleTagsList() {
127 var $tagsList = this.getTagsList();
128 if ($tagsList.is(':visible')) {
129 $tagsList.hide();
130 return;
131 }
132 var direction = elementorCommon.config.isRTL ? 'left' : 'right';
133 $tagsList.show().position({
134 my: "".concat(direction, " top"),
135 at: "".concat(direction, " bottom+5"),
136 of: this.ui.dynamicSwitcher
137 });
138 },
139 setTagView: function setTagView(id, name, settings) {
140 if (this.tagView) {
141 this.tagView.destroy();
142 }
143 var tagView = this.tagView = new TagPanelView({
144 id: id,
145 name: name,
146 settings: settings,
147 controlName: this.view.model.get('name'),
148 dynamicSettings: this.getOption('dynamicSettings')
149 }),
150 elementContainer = this.view.options.container,
151 tagViewLabel = elementContainer.controls[tagView.options.controlName].label;
152 tagView.options.container = new elementorModules.editor.Container({
153 type: 'dynamic',
154 id: id,
155 model: tagView.model,
156 settings: tagView.model,
157 view: tagView,
158 parent: elementContainer,
159 label: elementContainer.label + ' ' + tagViewLabel,
160 controls: tagView.model.options.controls,
161 renderer: elementContainer
162 });
163 tagView.render();
164 this.$el.find('.elementor-control-tag-area').after(tagView.el);
165 this.listenTo(tagView, 'remove', this.onTagViewRemove.bind(this));
166 },
167 setDefaultTagView: function setDefaultTagView() {
168 var tagData = elementor.dynamicTags.tagTextToTagData(this.getDynamicValue());
169 this.setTagView(tagData.id, tagData.name, tagData.settings);
170 },
171 tagViewToTagText: function tagViewToTagText() {
172 var tagView = this.tagView;
173 return elementor.dynamicTags.tagDataToTagText(tagView.getOption('id'), tagView.getOption('name'), tagView.model);
174 },
175 getDynamicValue: function getDynamicValue() {
176 return this.view.container.dynamic.get(this.view.model.get('name'));
177 },
178 destroyTagView: function destroyTagView() {
179 if (this.tagView) {
180 this.tagView.destroy();
181 this.tagView = null;
182 }
183 },
184 showPromotion: function showPromotion() {
185 var hasProAndNotConnected = elementor.helpers.hasProAndNotConnected(),
186 dialogOptions = {
187 title: __('Dynamic Content', 'elementor'),
188 content: __('Create more personalized and dynamic sites by populating data from various sources with dozens of dynamic tags to choose from.', 'elementor'),
189 targetElement: this.ui.dynamicSwitcher,
190 position: {
191 blockStart: '-10'
192 },
193 actionButton: {
194 url: hasProAndNotConnected ? elementorProEditorConfig.urls.connect : elementor.config.dynamicPromotionURL.replace('%s', this.view.model.get('name')),
195 text: hasProAndNotConnected ? __('Connect & Activate', 'elementor') : __('Upgrade', 'elementor')
196 }
197 };
198 elementor.promotion.showDialog(dialogOptions);
199 },
200 onRender: function onRender() {
201 this.$el.addClass('elementor-control-dynamic');
202 this.renderTools();
203 this.toggleDynamicClass();
204 if (this.isDynamicMode()) {
205 this.setDefaultTagView();
206 }
207 },
208 onDynamicSwitcherClick: function onDynamicSwitcherClick(event) {
209 event.stopPropagation();
210 if (this.getOption('tags').length) {
211 this.toggleTagsList();
212 } else {
213 this.showPromotion();
214 }
215 },
216 onTagsListItemClick: function onTagsListItemClick(event) {
217 var $tag = jQuery(event.currentTarget);
218 this.setTagView(elementorCommon.helpers.getUniqueId(), $tag.data('tagName'), {});
219
220 // If an element has an active global value, disable it before applying the dynamic value.
221 if (this.view.getGlobalKey()) {
222 this.view.triggerMethod('unset:global:value');
223 }
224 if (this.isDynamicMode()) {
225 $e.run('document/dynamic/settings', {
226 container: this.view.options.container,
227 settings: (0, _defineProperty2.default)({}, this.view.model.get('name'), this.tagViewToTagText())
228 });
229 } else {
230 $e.run('document/dynamic/enable', {
231 container: this.view.options.container,
232 settings: (0, _defineProperty2.default)({}, this.view.model.get('name'), this.tagViewToTagText())
233 });
234 }
235 this.toggleDynamicClass();
236 this.toggleTagsList();
237 if (this.tagView.getTagConfig().settings_required) {
238 this.tagView.showSettingsPopup();
239 }
240 },
241 onTagViewRemove: function onTagViewRemove() {
242 $e.run('document/dynamic/disable', {
243 container: this.view.options.container,
244 settings: (0, _defineProperty2.default)({}, this.view.model.get('name'), this.tagViewToTagText())
245 });
246 this.toggleDynamicClass();
247 },
248 onAfterExternalChange: function onAfterExternalChange() {
249 this.destroyTagView();
250 if (this.isDynamicMode()) {
251 this.setDefaultTagView();
252 }
253 this.toggleDynamicClass();
254 },
255 onDestroy: function onDestroy() {
256 this.destroyTagView();
257 if (this.ui.tagsList) {
258 this.ui.tagsList.remove();
259 }
260 }
261 });
262
263 /***/ }),
264
265 /***/ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack-empty.js":
266 /*!***********************************************************************************!*\
267 !*** ../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack-empty.js ***!
268 \***********************************************************************************/
269 /***/ ((module) => {
270
271 "use strict";
272
273
274 module.exports = Marionette.ItemView.extend({
275 className: 'elementor-tag-controls-stack-empty',
276 template: '#tmpl-elementor-tag-controls-stack-empty'
277 });
278
279 /***/ }),
280
281 /***/ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack.js":
282 /*!*****************************************************************************!*\
283 !*** ../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack.js ***!
284 \*****************************************************************************/
285 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
286
287 "use strict";
288
289
290 var EmptyView = __webpack_require__(/*! elementor-dynamic-tags/tag-controls-stack-empty */ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack-empty.js");
291 module.exports = elementorModules.editor.views.ControlsStack.extend({
292 activeTab: 'content',
293 template: _.noop,
294 emptyView: EmptyView,
295 isEmpty: function isEmpty() {
296 // Ignore the section control
297 return this.collection.length < 2;
298 },
299 childViewOptions: function childViewOptions() {
300 return {
301 container: this.options.container
302 };
303 },
304 getNamespaceArray: function getNamespaceArray() {
305 var currentPageView = elementor.getPanelView().getCurrentPageView(),
306 eventNamespace = currentPageView.getNamespaceArray();
307 eventNamespace.push(currentPageView.activeSection);
308 eventNamespace.push(this.getOption('controlName'));
309 eventNamespace.push(this.getOption('name'));
310 return eventNamespace;
311 },
312 onRenderTemplate: function onRenderTemplate() {
313 this.activateFirstSection();
314 }
315 });
316
317 /***/ }),
318
319 /***/ "../assets/dev/js/editor/components/dynamic-tags/tag-panel-view.js":
320 /*!*************************************************************************!*\
321 !*** ../assets/dev/js/editor/components/dynamic-tags/tag-panel-view.js ***!
322 \*************************************************************************/
323 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
324
325 "use strict";
326
327
328 var TagControlsStack = __webpack_require__(/*! elementor-dynamic-tags/tag-controls-stack */ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack.js");
329 module.exports = Marionette.ItemView.extend({
330 className: 'elementor-dynamic-cover e-input-style',
331 tagControlsStack: null,
332 templateHelpers: function templateHelpers() {
333 var helpers = {};
334 if (this.model) {
335 helpers.controls = this.model.options.controls;
336 }
337 return helpers;
338 },
339 ui: {
340 remove: '.elementor-dynamic-cover__remove'
341 },
342 events: function events() {
343 var events = {
344 'click @ui.remove': 'onRemoveClick'
345 };
346 if (this.hasSettings()) {
347 events.click = 'onClick';
348 }
349 return events;
350 },
351 getTemplate: function getTemplate() {
352 var config = this.getTagConfig(),
353 templateFunction = Marionette.TemplateCache.get('#tmpl-elementor-control-dynamic-cover'),
354 renderedTemplate = Marionette.Renderer.render(templateFunction, {
355 hasSettings: this.hasSettings(),
356 isRemovable: !this.getOption('dynamicSettings').default,
357 title: config.title,
358 content: config.panel_template
359 });
360 return Marionette.TemplateCache.prototype.compileTemplate(renderedTemplate.trim());
361 },
362 getTagConfig: function getTagConfig() {
363 return elementor.dynamicTags.getConfig('tags.' + this.getOption('name'));
364 },
365 initSettingsPopup: function initSettingsPopup() {
366 var settingsPopupOptions = {
367 className: 'elementor-tag-settings-popup',
368 position: {
369 my: 'left top+5',
370 at: 'left bottom',
371 of: this.$el,
372 autoRefresh: true
373 },
374 hide: {
375 ignore: '.select2-container'
376 }
377 };
378 var settingsPopup = elementorCommon.dialogsManager.createWidget('buttons', settingsPopupOptions);
379 this.getSettingsPopup = function () {
380 return settingsPopup;
381 };
382 },
383 hasSettings: function hasSettings() {
384 return !!Object.values(this.getTagConfig().controls).length;
385 },
386 showSettingsPopup: function showSettingsPopup() {
387 if (!this.tagControlsStack) {
388 this.initTagControlsStack();
389 }
390 var settingsPopup = this.getSettingsPopup();
391 if (settingsPopup.isVisible()) {
392 return;
393 }
394 settingsPopup.show();
395 },
396 initTagControlsStack: function initTagControlsStack() {
397 this.tagControlsStack = new TagControlsStack({
398 model: this.model,
399 controls: this.model.controls,
400 name: this.options.name,
401 controlName: this.options.controlName,
402 container: this.options.container,
403 el: this.getSettingsPopup().getElements('message')[0]
404 });
405 this.tagControlsStack.render();
406 },
407 initModel: function initModel() {
408 this.model = new elementorModules.editor.elements.models.BaseSettings(this.getOption('settings'), {
409 controls: this.getTagConfig().controls
410 });
411 },
412 initialize: function initialize() {
413 // The `model` should always be available.
414 this.initModel();
415 if (!this.hasSettings()) {
416 return;
417 }
418 this.initSettingsPopup();
419 this.listenTo(this.model, 'change', this.render);
420 },
421 onClick: function onClick() {
422 this.showSettingsPopup();
423 },
424 onRemoveClick: function onRemoveClick(event) {
425 event.stopPropagation();
426 this.destroy();
427 this.trigger('remove');
428 },
429 onDestroy: function onDestroy() {
430 if (this.hasSettings()) {
431 this.getSettingsPopup().destroy();
432 }
433 if (this.tagControlsStack) {
434 this.tagControlsStack.destroy();
435 }
436 }
437 });
438
439 /***/ }),
440
441 /***/ "../assets/dev/js/editor/components/validator/base.js":
442 /*!************************************************************!*\
443 !*** ../assets/dev/js/editor/components/validator/base.js ***!
444 \************************************************************/
445 /***/ ((module) => {
446
447 "use strict";
448
449
450 module.exports = elementorModules.Module.extend({
451 errors: [],
452 __construct: function __construct(settings) {
453 var customValidationMethod = settings.customValidationMethod;
454 if (customValidationMethod) {
455 this.validationMethod = customValidationMethod;
456 }
457 },
458 getDefaultSettings: function getDefaultSettings() {
459 return {
460 validationTerms: {}
461 };
462 },
463 isValid: function isValid() {
464 var validationErrors = this.validationMethod.apply(this, arguments);
465 if (validationErrors.length) {
466 this.errors = validationErrors;
467 return false;
468 }
469 return true;
470 },
471 validationMethod: function validationMethod(newValue) {
472 var validationTerms = this.getSettings('validationTerms'),
473 errors = [];
474 if (validationTerms.required) {
475 if (!('' + newValue).length) {
476 errors.push('Required value is empty');
477 }
478 }
479 return errors;
480 }
481 });
482
483 /***/ }),
484
485 /***/ "../assets/dev/js/editor/components/validator/breakpoint.js":
486 /*!******************************************************************!*\
487 !*** ../assets/dev/js/editor/components/validator/breakpoint.js ***!
488 \******************************************************************/
489 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
490
491 "use strict";
492
493
494 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
495 Object.defineProperty(exports, "__esModule", ({
496 value: true
497 }));
498 exports["default"] = void 0;
499 var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
500 var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
501 var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
502 var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
503 var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
504 function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
505 function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
506 var NumberValidator = __webpack_require__(/*! elementor-validator/number */ "../assets/dev/js/editor/components/validator/number.js");
507 var BreakpointValidator = exports["default"] = /*#__PURE__*/function (_NumberValidator) {
508 function BreakpointValidator() {
509 (0, _classCallCheck2.default)(this, BreakpointValidator);
510 return _callSuper(this, BreakpointValidator, arguments);
511 }
512 (0, _inherits2.default)(BreakpointValidator, _NumberValidator);
513 return (0, _createClass2.default)(BreakpointValidator, [{
514 key: "getDefaultSettings",
515 value: function getDefaultSettings() {
516 return {
517 validationTerms: {
518 // Max width we allow in general
519 max: 5120
520 }
521 };
522 }
523
524 /**
525 * Get Panel Active Breakpoints
526 *
527 * Since the active kit used in the Site Settings panel could be a draft, we need to use the panel's active
528 * breakpoints settings and not the elementorFrontend.config values (which come from the DB).
529 *
530 * @return {*} Object
531 */
532 }, {
533 key: "getPanelActiveBreakpoints",
534 value: function getPanelActiveBreakpoints() {
535 var panelBreakpoints = elementor.documents.currentDocument.config.settings.settings.active_breakpoints.map(function (breakpointName) {
536 return breakpointName.replace('viewport_', '');
537 }),
538 panelActiveBreakpoints = {};
539 panelBreakpoints.forEach(function (breakpointName) {
540 panelActiveBreakpoints[breakpointName] = elementorFrontend.config.responsive.breakpoints[breakpointName];
541 });
542 return panelActiveBreakpoints;
543 }
544 }, {
545 key: "initBreakpointProperties",
546 value: function initBreakpointProperties() {
547 var _activeBreakpoints$br, _activeBreakpoints$br2;
548 var validationTerms = this.getSettings('validationTerms'),
549 activeBreakpoints = this.getPanelActiveBreakpoints(),
550 breakpointKeys = Object.keys(activeBreakpoints);
551 this.breakpointIndex = breakpointKeys.indexOf(validationTerms.breakpointName);
552 this.topBreakpoint = (_activeBreakpoints$br = activeBreakpoints[breakpointKeys[this.breakpointIndex + 1]]) === null || _activeBreakpoints$br === void 0 ? void 0 : _activeBreakpoints$br.value;
553 this.bottomBreakpoint = (_activeBreakpoints$br2 = activeBreakpoints[breakpointKeys[this.breakpointIndex - 1]]) === null || _activeBreakpoints$br2 === void 0 ? void 0 : _activeBreakpoints$br2.value;
554 }
555 }, {
556 key: "validationMethod",
557 value: function validationMethod(newValue) {
558 var validationTerms = this.getSettings('validationTerms'),
559 errors = NumberValidator.prototype.validationMethod.call(this, newValue);
560
561 // Validate both numeric and empty values, since breakpoints utilize default values when empty.
562 if (_.isFinite(newValue) || '' === newValue) {
563 if (!this.validateMinMaxForBreakpoint(newValue, validationTerms)) {
564 errors.push('Value is not between the breakpoints above or under the edited breakpoint');
565 }
566 }
567 return errors;
568 }
569 }, {
570 key: "validateMinMaxForBreakpoint",
571 value: function validateMinMaxForBreakpoint(newValue, validationTerms) {
572 var breakpointDefaultValue = elementorFrontend.config.responsive.breakpoints[validationTerms.breakpointName].default_value;
573 var isValid = true;
574 this.initBreakpointProperties();
575
576 // Since the following comparison is <=, allow usage of the 320px value for the mobile breakpoint.
577 if ('mobile' === validationTerms.breakpointName && 320 === this.bottomBreakpoint) {
578 this.bottomBreakpoint -= 1;
579 }
580
581 // If there is a breakpoint below the currently edited breakpoint
582 if (this.bottomBreakpoint) {
583 // Check that the new value is not under the bottom breakpoint's value.
584 if ('' !== newValue && newValue <= this.bottomBreakpoint) {
585 isValid = false;
586 }
587
588 // If the new value is empty, check that the default breakpoint value is not below the bottom breakpoint.
589 if ('' === newValue && breakpointDefaultValue <= this.bottomBreakpoint) {
590 isValid = false;
591 }
592 }
593
594 // If there is a breakpoint above the currently edited breakpoint.
595 if (this.topBreakpoint) {
596 // Check that the value is not above the top breakpoint's value.
597 if ('' !== newValue && newValue >= this.topBreakpoint) {
598 isValid = false;
599 }
600
601 // If the new value is empty, check that the default breakpoint value is not above the top breakpoint.
602 if ('' === newValue && breakpointDefaultValue >= this.topBreakpoint) {
603 isValid = false;
604 }
605 }
606 return isValid;
607 }
608 }]);
609 }(NumberValidator);
610
611 /***/ }),
612
613 /***/ "../assets/dev/js/editor/components/validator/number.js":
614 /*!**************************************************************!*\
615 !*** ../assets/dev/js/editor/components/validator/number.js ***!
616 \**************************************************************/
617 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
618
619 "use strict";
620
621
622 var Validator = __webpack_require__(/*! elementor-validator/base */ "../assets/dev/js/editor/components/validator/base.js");
623 module.exports = Validator.extend({
624 validationMethod: function validationMethod(newValue) {
625 var validationTerms = this.getSettings('validationTerms'),
626 errors = [];
627 if (_.isFinite(newValue)) {
628 if (undefined !== validationTerms.min && newValue < validationTerms.min) {
629 errors.push('Value is less than minimum');
630 }
631 if (undefined !== validationTerms.max && newValue > validationTerms.max) {
632 errors.push('Value is greater than maximum');
633 }
634 }
635 return errors;
636 }
637 });
638
639 /***/ }),
640
641 /***/ "../assets/dev/js/editor/controls/base-data.js":
642 /*!*****************************************************!*\
643 !*** ../assets/dev/js/editor/controls/base-data.js ***!
644 \*****************************************************/
645 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
646
647 "use strict";
648
649
650 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
651 var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
652 var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
653 var _breakpoint = _interopRequireDefault(__webpack_require__(/*! elementor-validator/breakpoint */ "../assets/dev/js/editor/components/validator/breakpoint.js"));
654 function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
655 function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
656 function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
657 var ControlBaseView = __webpack_require__(/*! elementor-controls/base */ "../assets/dev/js/editor/controls/base.js"),
658 TagsBehavior = __webpack_require__(/*! elementor-dynamic-tags/control-behavior */ "../assets/dev/js/editor/components/dynamic-tags/control-behavior.js"),
659 Validator = __webpack_require__(/*! elementor-validator/base */ "../assets/dev/js/editor/components/validator/base.js"),
660 NumberValidator = __webpack_require__(/*! elementor-validator/number */ "../assets/dev/js/editor/components/validator/number.js"),
661 ControlBaseDataView;
662 ControlBaseDataView = ControlBaseView.extend({
663 validatorTypes: {
664 Base: Validator,
665 Number: NumberValidator,
666 Breakpoint: _breakpoint.default
667 },
668 ui: function ui() {
669 var ui = ControlBaseView.prototype.ui.apply(this, arguments);
670 _.extend(ui, {
671 input: 'input[data-setting][type!="checkbox"][type!="radio"]',
672 checkbox: 'input[data-setting][type="checkbox"]',
673 radio: 'input[data-setting][type="radio"]',
674 select: 'select[data-setting]',
675 textarea: 'textarea[data-setting]',
676 responsiveSwitchersSibling: "".concat(ui.controlTitle, "[data-e-responsive-switcher-sibling!=\"false\"]"),
677 responsiveSwitchers: '.elementor-responsive-switcher',
678 contentEditable: '[contenteditable="true"]'
679 });
680 return ui;
681 },
682 templateHelpers: function templateHelpers() {
683 var controlData = ControlBaseView.prototype.templateHelpers.apply(this, arguments);
684 controlData.data.controlValue = this.getControlValue();
685 return controlData;
686 },
687 events: function events() {
688 return {
689 'input @ui.input': 'onBaseInputTextChange',
690 'change @ui.checkbox': 'onBaseInputChange',
691 'change @ui.radio': 'onBaseInputChange',
692 'input @ui.textarea': 'onBaseInputTextChange',
693 'change @ui.select': 'onBaseInputChange',
694 'input @ui.contentEditable': 'onBaseInputTextChange',
695 'click @ui.responsiveSwitchers': 'onResponsiveSwitchersClick'
696 };
697 },
698 behaviors: function behaviors() {
699 var behaviors = ControlBaseView.prototype.behaviors.apply(this, arguments),
700 dynamicSettings = this.options.model.get('dynamic');
701 if (dynamicSettings && dynamicSettings.active) {
702 var tags = _.filter(elementor.dynamicTags.getConfig('tags'), function (tag) {
703 return tag.editable && _.intersection(tag.categories, dynamicSettings.categories).length;
704 });
705 if (tags.length || elementor.config.user.is_administrator) {
706 behaviors.tags = {
707 behaviorClass: TagsBehavior,
708 tags: tags,
709 dynamicSettings: dynamicSettings
710 };
711 }
712 }
713 return behaviors;
714 },
715 initialize: function initialize() {
716 ControlBaseView.prototype.initialize.apply(this, arguments);
717 this.registerValidators();
718 if (this.model.get('responsive')) {
719 this.setPlaceholderFromParent();
720 }
721 if (undefined === this.model.get('inherit_placeholders')) {
722 this.model.set('inherit_placeholders', true);
723 }
724
725 // TODO: this.elementSettingsModel is deprecated since 2.8.0.
726 var settings = this.container ? this.container.settings : this.elementSettingsModel;
727 this.listenTo(settings, 'change:external:' + this.model.get('name'), this.onAfterExternalChange);
728 },
729 getControlValue: function getControlValue() {
730 return this.container.settings.get(this.model.get('name'));
731 },
732 getGlobalKey: function getGlobalKey() {
733 return this.container.globals.get(this.model.get('name'));
734 },
735 getGlobalValue: function getGlobalValue() {
736 return this.globalValue;
737 },
738 getGlobalDefault: function getGlobalDefault() {
739 var controlGlobalArgs = this.model.get('global');
740 if (controlGlobalArgs !== null && controlGlobalArgs !== void 0 && controlGlobalArgs.default) {
741 // If the control is a color/typography control and default colors/typography are disabled, don't return the global value.
742 if (!elementor.config.globals.defaults_enabled[this.getGlobalMeta().controlType]) {
743 return '';
744 }
745 var _$e$data$commandExtra = $e.data.commandExtractArgs(controlGlobalArgs.default),
746 command = _$e$data$commandExtra.command,
747 args = _$e$data$commandExtra.args,
748 result = $e.data.getCache($e.components.get('globals'), command, args.query);
749 return result === null || result === void 0 ? void 0 : result.value;
750 }
751
752 // No global default.
753 return '';
754 },
755 getCurrentValue: function getCurrentValue() {
756 if (this.getGlobalKey() && !this.globalValue) {
757 return '';
758 }
759 if (this.globalValue) {
760 return this.globalValue;
761 }
762 var controlValue = this.getControlValue();
763 if (controlValue) {
764 return controlValue;
765 }
766 return this.getGlobalDefault();
767 },
768 isGlobalActive: function isGlobalActive() {
769 var _this$options$model$g;
770 return (_this$options$model$g = this.options.model.get('global')) === null || _this$options$model$g === void 0 ? void 0 : _this$options$model$g.active;
771 },
772 setValue: function setValue(value) {
773 this.setSettingsModel(value);
774 },
775 setSettingsModel: function setSettingsModel(value) {
776 var key = this.model.get('name');
777 $e.run('document/elements/settings', {
778 container: this.options.container,
779 settings: (0, _defineProperty2.default)({}, key, value)
780 });
781 this.triggerMethod('settings:change');
782 },
783 applySavedValue: function applySavedValue() {
784 this.setInputValue('[data-setting="' + this.model.get('name') + '"]', this.getControlValue());
785 },
786 getEditSettings: function getEditSettings(setting) {
787 var settings = this.getOption('elementEditSettings').toJSON();
788 if (setting) {
789 return settings[setting];
790 }
791 return settings;
792 },
793 setEditSetting: function setEditSetting(settingKey, settingValue) {
794 var settings = this.getOption('elementEditSettings') || this.getOption('container').settings;
795 settings.set(settingKey, settingValue);
796 },
797 /**
798 * Get the placeholder for the current control.
799 *
800 * @return {*} placeholder
801 */
802 getControlPlaceholder: function getControlPlaceholder() {
803 var placeholder = this.model.get('placeholder');
804 if (this.model.get('responsive') && this.model.get('inherit_placeholders')) {
805 placeholder = placeholder || this.container.placeholders[this.model.get('name')];
806 }
807 return placeholder;
808 },
809 /**
810 * Get the responsive parent view if exists.
811 *
812 * @return {ControlBaseDataView|undefined} responsive parent view if exists
813 */
814 getResponsiveParentView: function getResponsiveParentView() {
815 var parent = this.model.get('parent');
816 try {
817 return parent && this.container.panel.getControlView(parent);
818 // eslint-disable-next-line no-empty
819 } catch (e) {}
820 },
821 /**
822 * Get the responsive children views if exists.
823 *
824 * @return {ControlBaseDataView|null} responsive children views if exists
825 */
826 getResponsiveChildrenViews: function getResponsiveChildrenViews() {
827 var children = this.model.get('inheritors'),
828 views = [];
829 try {
830 var _iterator = _createForOfIteratorHelper(children),
831 _step;
832 try {
833 for (_iterator.s(); !(_step = _iterator.n()).done;) {
834 var child = _step.value;
835 views.push(this.container.panel.getControlView(child));
836 }
837 // eslint-disable-next-line no-empty
838 } catch (err) {
839 _iterator.e(err);
840 } finally {
841 _iterator.f();
842 }
843 } catch (e) {}
844 return views;
845 },
846 /**
847 * Get prepared placeholder from the responsive parent, and put it into current
848 * control model as placeholder.
849 */
850 setPlaceholderFromParent: function setPlaceholderFromParent() {
851 var parent = this.getResponsiveParentView();
852 if (parent) {
853 this.container.placeholders[this.model.get('name')] = parent.preparePlaceholderForChildren();
854 }
855 },
856 /**
857 * Returns the value of the current control if exists, or the parent value if not,
858 * so responsive children can set it as their placeholder. When there are multiple
859 * inputs, the inputs which are empty on this control will inherit their values
860 * from the responsive parent.
861 * For example, if on desktop the padding of all edges is 10, and on tablet only
862 * padding right and left is set to 15, the mobile control placeholder will
863 * eventually be: { top: 10, right: 15, left: 15, bottom: 10 }, because of the
864 * inheritance of multiple values.
865 *
866 * @return {*} value of the current control if exists, or the parent value if not
867 */
868 preparePlaceholderForChildren: function preparePlaceholderForChildren() {
869 var _this$getResponsivePa;
870 var cleanValue = this.getCleanControlValue(),
871 parentValue = (_this$getResponsivePa = this.getResponsiveParentView()) === null || _this$getResponsivePa === void 0 ? void 0 : _this$getResponsivePa.preparePlaceholderForChildren();
872 if (cleanValue instanceof Object) {
873 return Object.assign({}, parentValue, cleanValue);
874 }
875 return cleanValue || parentValue;
876 },
877 /**
878 * Start the re-rendering recursive chain from the responsive child of this
879 * control. It's useful when the current control value is changed and we want
880 * to update all responsive children. In this case, the re-rendering is supposed
881 * to be applied only from the responsive child of this control and on.
882 */
883 propagatePlaceholder: function propagatePlaceholder() {
884 var children = this.getResponsiveChildrenViews();
885 var _iterator2 = _createForOfIteratorHelper(children),
886 _step2;
887 try {
888 for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
889 var child = _step2.value;
890 child.renderWithChildren();
891 }
892 } catch (err) {
893 _iterator2.e(err);
894 } finally {
895 _iterator2.f();
896 }
897 },
898 /**
899 * Re-render current control and trigger this method on the responsive child.
900 * The purpose of those actions is to recursively re-render all responsive
901 * children.
902 */
903 renderWithChildren: function renderWithChildren() {
904 this.render();
905 this.propagatePlaceholder();
906 },
907 /**
908 * Get control value without empty properties, and without default values.
909 *
910 * @return {{}} control value without empty properties, and without default values
911 */
912 getCleanControlValue: function getCleanControlValue() {
913 var value = this.getControlValue();
914 return value && value !== this.model.get('default') ? value : undefined;
915 },
916 onAfterChange: function onAfterChange(control) {
917 if (Object.keys(control.changed).includes(this.model.get('name'))) {
918 this.propagatePlaceholder();
919 }
920 ControlBaseView.prototype.onAfterChange.apply(this, arguments);
921 },
922 getInputValue: function getInputValue(input) {
923 var $input = this.$(input);
924 if ($input.is('[contenteditable="true"]')) {
925 return $input.html();
926 }
927 var inputValue = $input.val(),
928 inputType = $input.attr('type');
929 if (-1 !== ['radio', 'checkbox'].indexOf(inputType)) {
930 return $input.prop('checked') ? inputValue : '';
931 }
932 if ('number' === inputType && _.isFinite(inputValue)) {
933 return +inputValue;
934 }
935
936 // Temp fix for jQuery (< 3.0) that return null instead of empty array
937 if ('SELECT' === input.tagName && $input.prop('multiple') && null === inputValue) {
938 inputValue = [];
939 }
940 return inputValue;
941 },
942 setInputValue: function setInputValue(input, value) {
943 var $input = this.$(input),
944 inputType = $input.attr('type');
945 if ('checkbox' === inputType) {
946 $input.prop('checked', !!value);
947 } else if ('radio' === inputType) {
948 $input.filter('[value="' + value + '"]').prop('checked', true);
949 } else {
950 $input.val(value);
951 }
952 },
953 addValidator: function addValidator(validator) {
954 this.validators.push(validator);
955 },
956 registerValidators: function registerValidators() {
957 var _this = this;
958 this.validators = [];
959 var validationTerms = {};
960 if (this.model.get('required')) {
961 validationTerms.required = true;
962 }
963 if (!jQuery.isEmptyObject(validationTerms)) {
964 this.addValidator(new this.validatorTypes.Base({
965 validationTerms: validationTerms
966 }));
967 }
968 var validators = this.model.get('validators');
969 if (validators) {
970 Object.entries(validators).forEach(function (_ref) {
971 var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
972 key = _ref2[0],
973 args = _ref2[1];
974 _this.addValidator(new _this.validatorTypes[key]({
975 validationTerms: args
976 }));
977 });
978 }
979 },
980 onBeforeRender: function onBeforeRender() {
981 this.setPlaceholderFromParent();
982 },
983 onRender: function onRender() {
984 ControlBaseView.prototype.onRender.apply(this, arguments);
985 if (this.model.get('responsive')) {
986 this.renderResponsiveSwitchers();
987 }
988 this.applySavedValue();
989 this.triggerMethod('ready');
990 this.toggleControlVisibility();
991 this.addTooltip();
992 },
993 onBaseInputTextChange: function onBaseInputTextChange(event) {
994 this.onBaseInputChange(event);
995 },
996 onBaseInputChange: function onBaseInputChange(event) {
997 clearTimeout(this.correctionTimeout);
998 var input = event.currentTarget,
999 value = this.getInputValue(input),
1000 validators = this.validators.slice(0),
1001 settingsValidators = this.container.settings.validators[this.model.get('name')];
1002 if (settingsValidators) {
1003 validators = validators.concat(settingsValidators);
1004 }
1005 if (validators) {
1006 var oldValue = this.getControlValue(input.dataset.setting);
1007 var isValidValue = validators.every(function (validator) {
1008 return validator.isValid(value, oldValue);
1009 });
1010 if (!isValidValue) {
1011 this.correctionTimeout = setTimeout(this.setInputValue.bind(this, input, oldValue), 1200);
1012 return;
1013 }
1014 }
1015 this.updateElementModel(value, input);
1016 this.triggerMethod('input:change', event);
1017 },
1018 onResponsiveSwitchersClick: function onResponsiveSwitchersClick(event) {
1019 var $switcher = jQuery(event.currentTarget),
1020 device = $switcher.data('device'),
1021 $switchersWrapper = this.ui.responsiveSwitchersWrapper,
1022 selectedOption = $switcher.index();
1023 $switchersWrapper.toggleClass('elementor-responsive-switchers-open');
1024 $switchersWrapper[0].style.setProperty('--selected-option', selectedOption);
1025 this.triggerMethod('responsive:switcher:click', device);
1026 elementor.changeDeviceMode(device);
1027 },
1028 renderResponsiveSwitchers: function renderResponsiveSwitchers() {
1029 var templateHtml = Marionette.Renderer.render('#tmpl-elementor-control-responsive-switchers', this.model.attributes);
1030 this.ui.responsiveSwitchersSibling.after(templateHtml);
1031 this.ui.responsiveSwitchersWrapper = this.$el.find('.elementor-control-responsive-switchers');
1032 },
1033 onAfterExternalChange: function onAfterExternalChange() {
1034 this.hideTooltip();
1035 this.applySavedValue();
1036 },
1037 addTooltip: function addTooltip() {
1038 this.ui.tooltipTargets = this.$el.find('.tooltip-target');
1039 if (!this.ui.tooltipTargets.length) {
1040 return;
1041 }
1042
1043 // Create tooltip on controls
1044 this.ui.tooltipTargets.tipsy({
1045 gravity: function gravity() {
1046 // `n` for down, `s` for up
1047 var gravity = jQuery(this).data('tooltip-pos');
1048 if (undefined !== gravity) {
1049 return gravity;
1050 }
1051 return 's';
1052 },
1053 title: function title() {
1054 return this.getAttribute('data-tooltip');
1055 }
1056 });
1057 },
1058 hideTooltip: function hideTooltip() {
1059 if (this.ui.tooltipTargets.length) {
1060 this.ui.tooltipTargets.tipsy('hide');
1061 }
1062 },
1063 updateElementModel: function updateElementModel(value) {
1064 this.setValue(value);
1065 }
1066 }, {
1067 // Static methods
1068 getStyleValue: function getStyleValue(placeholder, controlValue, controlData) {
1069 if ('DEFAULT' === placeholder) {
1070 return controlData.default;
1071 }
1072 return controlValue;
1073 },
1074 onPasteStyle: function onPasteStyle() {
1075 return true;
1076 }
1077 });
1078 module.exports = ControlBaseDataView;
1079
1080 /***/ }),
1081
1082 /***/ "../assets/dev/js/editor/controls/base.js":
1083 /*!************************************************!*\
1084 !*** ../assets/dev/js/editor/controls/base.js ***!
1085 \************************************************/
1086 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1087
1088 "use strict";
1089
1090
1091 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1092 var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
1093 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1094 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1095 var ControlBaseView;
1096 ControlBaseView = Marionette.CompositeView.extend({
1097 ui: function ui() {
1098 return {
1099 controlTitle: '.elementor-control-title'
1100 };
1101 },
1102 behaviors: function behaviors() {
1103 var behaviors = {};
1104 return elementor.hooks.applyFilters('controls/base/behaviors', behaviors, this);
1105 },
1106 getBehavior: function getBehavior(name) {
1107 return this._behaviors[Object.keys(this.behaviors()).indexOf(name)];
1108 },
1109 className: function className() {
1110 // TODO: Any better classes for that?
1111 var classes = 'elementor-control elementor-control-' + this.model.get('name') + ' elementor-control-type-' + this.model.get('type'),
1112 modelClasses = this.model.get('classes'),
1113 responsive = this.model.get('responsive');
1114 if (!_.isEmpty(modelClasses)) {
1115 classes += ' ' + modelClasses;
1116 }
1117 if (!_.isEmpty(responsive)) {
1118 var responsiveControlName = responsive.max || responsive.min;
1119 classes += ' elementor-control-responsive-' + responsiveControlName;
1120 }
1121 return classes;
1122 },
1123 templateHelpers: function templateHelpers() {
1124 var controlData = {
1125 _cid: this.model.cid
1126 };
1127 return {
1128 view: this,
1129 data: _.extend({}, this.model.toJSON(), controlData)
1130 };
1131 },
1132 getTemplate: function getTemplate() {
1133 return Marionette.TemplateCache.get('#tmpl-elementor-control-' + this.model.get('type') + '-content');
1134 },
1135 initialize: function initialize(options) {
1136 var label = this.model.get('label');
1137
1138 // TODO: Temp backwards compatibility. since 2.8.0.
1139 Object.defineProperty(this, 'container', {
1140 get: function get() {
1141 if (!options.container) {
1142 var settingsModel = options.elementSettingsModel,
1143 view = $e.components.get('document').utils.findViewById(settingsModel.id);
1144
1145 // Element control.
1146 if (view && view.getContainer) {
1147 options.container = view.getContainer();
1148 } else {
1149 if (!settingsModel.id) {
1150 settingsModel.id = 'bc-' + elementorCommon.helpers.getUniqueId();
1151 }
1152
1153 // Document/General/Other control.
1154 options.container = new elementorModules.editor.Container({
1155 type: 'bc-container',
1156 id: settingsModel.id,
1157 model: settingsModel,
1158 settings: settingsModel,
1159 label: label,
1160 view: false,
1161 parent: false,
1162 renderer: false,
1163 controls: settingsModel.options.controls
1164 });
1165 }
1166 }
1167 return options.container;
1168 }
1169 });
1170
1171 // Use `defineProperty` because `get elementSettingsModel()` fails during the `Marionette.CompositeView.extend`.
1172 Object.defineProperty(this, 'elementSettingsModel', {
1173 get: function get() {
1174 elementorDevTools.deprecation.deprecated('elementSettingsModel', '2.8.0', 'container.settings');
1175 return options.container ? options.container.settings : options.elementSettingsModel;
1176 }
1177 });
1178 var controlType = this.model.get('type'),
1179 controlSettings = jQuery.extend(true, {}, elementor.config.controls[controlType], this.model.attributes);
1180 this.model.set(controlSettings);
1181
1182 // TODO: this.elementSettingsModel is deprecated since 2.8.0.
1183 var settings = this.container ? this.container.settings : this.elementSettingsModel;
1184 this.listenTo(settings, 'change', this.onAfterChange);
1185 if (this.model.attributes.responsive) {
1186 this.onDeviceModeChange = this.onDeviceModeChange.bind(this);
1187 elementor.listenTo(elementor.channels.deviceMode, 'change', this.onDeviceModeChange);
1188 }
1189 },
1190 onDestroy: function onDestroy() {
1191 elementor.stopListening(elementor.channels.deviceMode, 'change', this.onDeviceModeChange);
1192 },
1193 onDeviceModeChange: function onDeviceModeChange() {
1194 this.toggleControlVisibility();
1195 },
1196 onAfterChange: function onAfterChange() {
1197 this.toggleControlVisibility();
1198 },
1199 toggleControlVisibility: function toggleControlVisibility() {
1200 // TODO: this.elementSettingsModel is deprecated since 2.8.0.
1201 var settings = this.container ? this.container.settings : this.elementSettingsModel;
1202 var isVisible = elementor.helpers.isActiveControl(this.model, settings.attributes, settings.controls);
1203 this.$el.toggleClass('elementor-hidden-control', !isVisible);
1204 elementor.getPanelView().updateScrollbar();
1205 },
1206 onRender: function onRender() {
1207 var layoutType = this.model.get('label_block') ? 'block' : 'inline',
1208 showLabel = this.model.get('show_label'),
1209 elClasses = 'elementor-label-' + layoutType;
1210 elClasses += ' elementor-control-separator-' + this.model.get('separator');
1211 if (!showLabel) {
1212 elClasses += ' elementor-control-hidden-label';
1213 }
1214 this.$el.addClass(elClasses);
1215 this.toggleControlVisibility();
1216 },
1217 reRoute: function reRoute(controlActive) {
1218 $e.route($e.routes.getCurrent('panel'), this.getControlInRouteArgs(controlActive ? this.getControlPath() : ''), {
1219 history: false
1220 });
1221 },
1222 getControlInRouteArgs: function getControlInRouteArgs(path) {
1223 return _objectSpread(_objectSpread({}, $e.routes.getCurrentArgs('panel')), {}, {
1224 activeControl: path
1225 });
1226 },
1227 getControlPath: function getControlPath() {
1228 var controlPath = this.model.get('name'),
1229 parent = this._parent;
1230 while (!parent.$el.hasClass('elementor-controls-stack')) {
1231 var parentName = parent.model.get('name') || parent.model.get('_id');
1232 controlPath = parentName + '/' + controlPath;
1233 parent = parent._parent;
1234 }
1235 return controlPath;
1236 }
1237 });
1238 module.exports = ControlBaseView;
1239
1240 /***/ }),
1241
1242 /***/ "../modules/promotions/assets/js/react/app-manager.js":
1243 /*!************************************************************!*\
1244 !*** ../modules/promotions/assets/js/react/app-manager.js ***!
1245 \************************************************************/
1246 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1247
1248 "use strict";
1249
1250
1251 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1252 Object.defineProperty(exports, "__esModule", ({
1253 value: true
1254 }));
1255 exports.AppManager = void 0;
1256 var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
1257 var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
1258 var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
1259 var _app = _interopRequireDefault(__webpack_require__(/*! ./app */ "../modules/promotions/assets/js/react/app.js"));
1260 var _client = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js");
1261 var AppManager = exports.AppManager = /*#__PURE__*/function () {
1262 function AppManager() {
1263 (0, _classCallCheck2.default)(this, AppManager);
1264 this.promotionInfoTip = null;
1265 this.atomicFormPromotionWrapper = null;
1266 this.onRoute = function () {};
1267 this.attachAtomicFormListeners();
1268 }
1269 return (0, _createClass2.default)(AppManager, [{
1270 key: "getPromotionData",
1271 value: function getPromotionData(promotionType) {
1272 return elementorPromotionsData[promotionType] || {};
1273 }
1274 }, {
1275 key: "getAtomicFormPromotionData",
1276 value: function getAtomicFormPromotionData() {
1277 var _elementor;
1278 return ((_elementor = elementor) === null || _elementor === void 0 || (_elementor = _elementor.config) === null || _elementor === void 0 ? void 0 : _elementor.atomicFormPromotion) || {};
1279 }
1280 }, {
1281 key: "mount",
1282 value: function mount(targetNode, selectors) {
1283 var _elementor2,
1284 _elementor2$getPrefer,
1285 _rootElement$getAttri,
1286 _this = this;
1287 if (this.promotionInfoTip) {
1288 return;
1289 }
1290 var wrapperElement = targetNode === null || targetNode === void 0 ? void 0 : targetNode.closest(selectors.wrapperElement);
1291 var rootElement = wrapperElement === null || wrapperElement === void 0 ? void 0 : wrapperElement.querySelector(selectors.reactAnchor);
1292 if (!rootElement) {
1293 return;
1294 }
1295 this.attachEditorEventListeners();
1296 this.promotionInfoTip = (0, _client.createRoot)(rootElement);
1297 var colorScheme = ((_elementor2 = elementor) === null || _elementor2 === void 0 || (_elementor2$getPrefer = _elementor2.getPreferences) === null || _elementor2$getPrefer === void 0 ? void 0 : _elementor2$getPrefer.call(_elementor2, 'ui_theme')) || 'auto';
1298 var isRTL = elementorCommon.config.isRTL;
1299 var promotionType = (_rootElement$getAttri = rootElement.getAttribute('data-promotion')) === null || _rootElement$getAttri === void 0 ? void 0 : _rootElement$getAttri.replace('_promotion', '');
1300 this.promotionInfoTip.render(/*#__PURE__*/_react.default.createElement(_app.default, {
1301 colorScheme: colorScheme,
1302 isRTL: isRTL,
1303 promotionsData: this.getPromotionData(promotionType),
1304 onClose: function onClose() {
1305 return _this.unmount();
1306 }
1307 }));
1308 }
1309 }, {
1310 key: "mountAtomicFormPromotion",
1311 value: function mountAtomicFormPromotion(targetEl, ctaUrl) {
1312 var _elementor3,
1313 _elementor3$getPrefer,
1314 _this2 = this;
1315 this.unmount();
1316 this.atomicFormPromotionWrapper = document.createElement('span');
1317 this.atomicFormPromotionWrapper.className = 'e-atomic-form-promotion-wrapper';
1318 targetEl.appendChild(this.atomicFormPromotionWrapper);
1319 this.attachEditorEventListeners();
1320 var colorScheme = ((_elementor3 = elementor) === null || _elementor3 === void 0 || (_elementor3$getPrefer = _elementor3.getPreferences) === null || _elementor3$getPrefer === void 0 ? void 0 : _elementor3$getPrefer.call(_elementor3, 'ui_theme')) || 'auto';
1321 var isRTL = elementorCommon.config.isRTL;
1322 var promotionData = this.getAtomicFormPromotionData();
1323 this.promotionInfoTip = (0, _client.createRoot)(this.atomicFormPromotionWrapper);
1324 this.promotionInfoTip.render(/*#__PURE__*/_react.default.createElement(_app.default, {
1325 colorScheme: colorScheme,
1326 isRTL: isRTL,
1327 cardType: "atomicForm",
1328 promotionData: promotionData,
1329 ctaUrl: ctaUrl,
1330 doClose: function doClose() {
1331 return _this2.unmount();
1332 }
1333 }));
1334 }
1335 }, {
1336 key: "attachAtomicFormListeners",
1337 value: function attachAtomicFormListeners() {
1338 var _this3 = this;
1339 document.addEventListener('atomic-form-promotion:open', function (event) {
1340 var promotionData = _this3.getAtomicFormPromotionData();
1341 _this3.mountAtomicFormPromotion(event.detail.target, promotionData.widgetCtaUrl);
1342 });
1343 }
1344 }, {
1345 key: "unmount",
1346 value: function unmount() {
1347 if (this.promotionInfoTip) {
1348 this.detachEditorEventListeners();
1349 this.promotionInfoTip.unmount();
1350 }
1351 if (this.atomicFormPromotionWrapper && this.atomicFormPromotionWrapper.parentNode) {
1352 this.atomicFormPromotionWrapper.parentNode.removeChild(this.atomicFormPromotionWrapper);
1353 }
1354 this.promotionInfoTip = null;
1355 this.atomicFormPromotionWrapper = null;
1356 }
1357 }, {
1358 key: "attachEditorEventListeners",
1359 value: function attachEditorEventListeners() {
1360 var _this4 = this;
1361 this.onRoute = function (component, route) {
1362 if (route !== 'panel/elements/categories' && route !== 'panel/editor/content') {
1363 return;
1364 }
1365 _this4.unmount();
1366 };
1367 $e.routes.on('run:after', this.onRoute);
1368 }
1369 }, {
1370 key: "detachEditorEventListeners",
1371 value: function detachEditorEventListeners() {
1372 $e.routes.off('run:after', this.onRoute);
1373 }
1374 }]);
1375 }();
1376
1377 /***/ }),
1378
1379 /***/ "../modules/promotions/assets/js/react/app.js":
1380 /*!****************************************************!*\
1381 !*** ../modules/promotions/assets/js/react/app.js ***!
1382 \****************************************************/
1383 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1384
1385 "use strict";
1386 /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
1387
1388
1389 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1390 Object.defineProperty(exports, "__esModule", ({
1391 value: true
1392 }));
1393 exports["default"] = void 0;
1394 var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
1395 var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1396 var _atomicFormPromotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/atomic-form-promotion-card */ "../modules/promotions/assets/js/react/components/atomic-form-promotion-card.js"));
1397 var _promotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/promotion-card */ "../modules/promotions/assets/js/react/components/promotion-card.js"));
1398 var App = function App(props) {
1399 var cardContent = 'atomicForm' === props.cardType ? /*#__PURE__*/_react.default.createElement(_atomicFormPromotionCard.default, {
1400 doClose: props.doClose,
1401 promotionData: props.promotionData,
1402 ctaUrl: props.ctaUrl
1403 }) : /*#__PURE__*/_react.default.createElement(_promotionCard.default, {
1404 doClose: props.onClose,
1405 promotionsData: props.promotionsData
1406 });
1407 return /*#__PURE__*/_react.default.createElement(_ui.DirectionProvider, {
1408 rtl: props.isRTL
1409 }, /*#__PURE__*/_react.default.createElement(_ui.LocalizationProvider, null, /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, {
1410 colorScheme: props.colorScheme
1411 }, /*#__PURE__*/_react.default.createElement(_ui.Infotip, {
1412 content: cardContent,
1413 placement: "right",
1414 arrow: true,
1415 open: true,
1416 disableHoverListener: true,
1417 PopperProps: {
1418 modifiers: [{
1419 name: 'offset',
1420 options: {
1421 offset: [-24, 8]
1422 }
1423 }]
1424 }
1425 }, /*#__PURE__*/_react.default.createElement("span", null)))));
1426 };
1427 App.propTypes = {
1428 colorScheme: PropTypes.oneOf(['auto', 'light', 'dark']),
1429 isRTL: PropTypes.bool,
1430 cardType: PropTypes.string,
1431 promotionsData: PropTypes.object,
1432 promotionData: PropTypes.object,
1433 ctaUrl: PropTypes.string,
1434 doClose: PropTypes.func,
1435 onClose: PropTypes.func
1436 };
1437 var _default = exports["default"] = App;
1438
1439 /***/ }),
1440
1441 /***/ "../modules/promotions/assets/js/react/assets/atomic-form-animation.json":
1442 /*!*******************************************************************************!*\
1443 !*** ../modules/promotions/assets/js/react/assets/atomic-form-animation.json ***!
1444 \*******************************************************************************/
1445 /***/ ((module) => {
1446
1447 "use strict";
1448 module.exports = /*#__PURE__*/JSON.parse('{"v":"5.7.5","fr":100,"ip":0,"op":876,"w":296,"h":148,"ddd":0,"assets":[{"id":"0","layers":[{"ddd":0,"refId":"g","w":1184,"h":592,"ind":1,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[113,57],"ix":2},"a":{"a":0,"k":[592,296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":868,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":884,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"g","layers":[{"ddd":0,"ind":29,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":668,"s":[74,74],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":676,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"h","w":80,"h":78,"ind":30,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-19,-14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":29},{"ddd":0,"ind":31,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"i","w":346,"h":58,"ind":32,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":31},{"ddd":0,"refId":"j","w":626,"h":239,"ind":33,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[279,120],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":34,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.82,1,0.71],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":540,"s":[592,296],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[592,396],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":600,"s":[592,396],"h":1},{"t":620,"s":[592,347],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":540,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":560,"s":[373,373],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":35,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.012,0.18,0.193],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"k","ind":36,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"l","layers":[{"ddd":0,"refId":"m","w":344,"h":54,"ind":37,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":38,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[80,78],"ix":2},"p":{"a":0,"k":[21,25],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"h","layers":[{"ddd":0,"ind":39,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"l","w":80,"h":78,"ind":30,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,25],"ix":2},"a":{"a":0,"k":[21,25],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"m","layers":[{"ddd":0,"ind":40,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":41,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":42,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":43,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"n","layers":[{"ddd":0,"refId":"o","w":344,"h":54,"ind":44,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":45,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[64,60],"ix":2},"p":{"a":0,"k":[29,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"i","layers":[{"ddd":0,"ind":46,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"n","w":346,"h":58,"ind":32,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"o","layers":[{"ddd":0,"ind":47,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":48,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":49,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":50,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"j","layers":[{"ddd":0,"ind":33,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":540,"s":[313,176],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[313,76],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":600,"s":[313,76],"h":1},{"t":620,"s":[313,27],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":540,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":560,"s":[446,446],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":51,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":33},{"ddd":0,"refId":"p","w":24,"h":8,"ind":52,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":51},{"ddd":0,"ind":53,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":33,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.82,1,0.71],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"p","layers":[{"ddd":0,"ind":54,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"k","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"1","layers":[{"ddd":0,"ind":55,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"q","w":346,"h":58,"ind":56,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":55},{"ddd":0,"ind":57,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":536,"s":[74,74],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":544,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"r","w":80,"h":78,"ind":58,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-19,-14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":57},{"ddd":0,"refId":"s","w":626,"h":239,"ind":59,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[279,120],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":60,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.8,0.86,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":424,"s":[592,296],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[592,396],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":484,"s":[592,396],"h":1},{"t":504,"s":[592,347],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":424,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":444,"s":[373,373],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":61,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.01,0.004,0.232],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"t","ind":62,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"u","layers":[{"ddd":0,"refId":"v","w":344,"h":54,"ind":63,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":64,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[64,60],"ix":2},"p":{"a":0,"k":[29,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"q","layers":[{"ddd":0,"ind":65,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"u","w":346,"h":58,"ind":56,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"v","layers":[{"ddd":0,"ind":66,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":67,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":68,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":69,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"w","layers":[{"ddd":0,"refId":"x","w":344,"h":54,"ind":70,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":71,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[80,78],"ix":2},"p":{"a":0,"k":[21,25],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"r","layers":[{"ddd":0,"ind":72,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"w","w":80,"h":78,"ind":58,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,25],"ix":2},"a":{"a":0,"k":[21,25],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"x","layers":[{"ddd":0,"ind":73,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":74,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":75,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":76,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"s","layers":[{"ddd":0,"ind":59,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":424,"s":[313,176],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[313,76],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":484,"s":[313,76],"h":1},{"t":504,"s":[313,27],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":424,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":444,"s":[446,446],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":77,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":59},{"ddd":0,"refId":"y","w":24,"h":8,"ind":78,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":77},{"ddd":0,"ind":79,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":59,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.8,0.86,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"y","layers":[{"ddd":0,"ind":80,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"t","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"2","layers":[{"ddd":0,"refId":"z","ind":3,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[653.5,533.5],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":716,"s":[0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":764,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]}},{"t":868,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":884,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"z","u":"","p":"data:image/png;base64,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8z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z7YAAP76WgAAAAAhAv9TSArcPg+8ZFeuS5te5QitGWKMuFCzmSzN/CFDE0o9GLtt465CWR6JBFj7yYtwh7N3BtG8lMl2AFtfysauWruqxNu9VxwU2itUFdYjIB5OyFSK0cb4lTcJOUxf/ml70n6bnZRTkQnZC4/U6XPXwA/xjnQ82RipjdvlsVTD1TpRJKp6WsFvGtNXYFmBFG7sX5R2lTRfnO0W83OfuXAtcTwoix4mvGtpsMi6aMpCn3byeTwf3JCLNon5cZm7YwYABA/IOu9zm8Dsk8QdbY2erIiNmWNtb4KY7dI6nrmg8g+HmMP3ObRWQo1xEdzS6GD0J+VFCvM+B/7Z1BR8JnyDbRO85y/ak+56/+vlCZmyMoUgwupiyh08vEeoYE2v/rNQzHfLtBdVfgYzPWH4dPuwXlH/5jfTpIVjZWqXCt5brghstH9e2Wke68drY0VlWE4tjoc5LW5DWrECO65cMzBIVIR/znfHqQoWiLD1q6q4ae55Vb952kY6MIr2R1teq6JPwvPWfPB+/xCkdLF4rhsTEaaVXf6Tkvsp1kGpAAjRR5SwsrQkojf6BVyZAJTUi8bCXitzaigQ4XHgu4ruLWlsv6+kFFczxE4r8FJmHRKD/hF7aM31Do7BXTtmK4gUGYteEw1/7Y33FrvETEygALLMw/r/mMBc9HHKk8RP5rSa6Vntb5Cc5pnMf6nuXQvFIInBXT0/bAk9fDEcGvYHCYqm9zsj6lwDEdkVaSA/AUpnTun5rmAmTrkpP23X2i9PiYpOQCakJCS6gZeSNiz6vZvxc4xp+RVdUyaOp2kTBoNRsq6Yv7zWx6zJPNJpXCu0d+nLvj8gjkOQzJc+7g8d9/49lWBPalK1pOs6IvvmZRvEmt6eIMVyHp0aEUBD0hGMYcqbATia1Q0CKSPYyrfw/8zpzWmBkyX+KYjZH7OCfq2oc/VreBjdj0AvXqVVUv3ym8nLyIy42WxK18Xtd/yoxuYY22zUPkXR0rp0++OsFNZzCkCMoo2gluQGccruHXwY3vlmEsXfCeReiba/hvtkgpyCpadwsBI1Q/44h6BdGiX3V3aHkSj6iy7WqI6VOFvsBfmtTGaOgm1AaofOTFoUTZNXzV4sYHBseItex5zxgKggbsPHSsDRxjml4NfSQN9T3nG1KJeKy6pMFEfkeRV6QsKE/70m3LBamVttMJKpPzfHHcVyDiJwkyvZCvrM5P0CfoATBOBW739Sy44OsPWKtVUhmyAekWVgF3b+Ecl1U07gaNMmPcwSrrYAAtvF2rKnkJUxI13lNYM9vpDFmz+J7Nixjd701+26pY3GZU1Oz32JQ+m5/VUPgNILiZ2vpmgWG+XvV/taixBtC6d33XGM6UTIlO7/kFhc70BWbNtJQu4E6cEwCb4Z3YHYgwpjpWPDWq2PU0nMcl6RFh5t6G0ME4Cf/sFqv7WkENi0JNwaeMokOJCMJveBDFSELpzIsTUvlBnTl4137gyrcdTqIiuGxRVbxRkCoMcb/5kYFFxEaY+a5F+rMtzpKLrMsd9H54eZAfmFHB+4FYfwTnhsvkJ55h3N+wnkvGykeChas2GRs1X7riSAUa3BP9qWHjv6OHRcmtrdOhBjvi5TWY8Fx48udMZdVYI7vCQLbZIKFKaraAKSRmd0V/857HfQViRybOfuIggMBCmgHPcO77JYbl2Z6jYPGsi4zCzAEVfjR79kqb9hWETLC2tp6S2fmzpqE9m70Ho1agxB5/bxWU3vc6h7HzvELaHyNy4LJuEcYzZyJKypigZQqguvL9vgPvoCNAwyXUW0y67rRQg9qAwWnx9xuCI3QshsWrOwNR/nxmjvF180lEvf7yBm0feDAevaMbu/V9HSQN3QbFliB/oKE6fDSSssem7H+ISR+qJinBfBs99WY+f2S+r7F3vYVMY26Ku2iWySzX1EOdxkbHlPD7NfxKZqn+iis7ItEdZCu8OJszK+/01BHK1ctxv/5nz6fiWFSRCXaDw2UWcbc/5ErUDcHsq045uNfYsblCo1Z6CxwjJJka/rk8olB+XhKlg/AApw36uaMRxkURmMHecku2+cjYK4qmR8Ho5ySHpmTdh1D3LkvJwi09+f7PT1dLFhuD9mmwfPmvGvmNmKm6iLFv+g8oeitJ6ok3ze4P9prTUVou+1r/T3QNaAMWSXuAdGYtoOMGqoKgiAtjMVnNtQsXKA71QmknOdNpHLeq3EmJ+gmKFjio6t6JX/4Yj5vU2CuMChkXv9XrZztkl9ifE3CaMgJEWvPltlQcpsC+ywPRk354+TtkyDrMPQIyAySWK4nuhI7h2Ex0r+tktzpd/OeHUHS9VGDdS6YG2LoiFJttMX2wf8QjQusa9QQvgYpQwzAusetuyiIV1Y/SAgqQTvR+sW7woCaxX6xOrlXkMkl5EgHgqtzsC+exiXbhPjIB17OjT2JHieoqBrU5P7X1kzXMECcCwSBxZCy+FYYNfUaVi48YDBZ7zBGI51zI+lSFIRhk8PSgLQACx6w7r7S1Ettgz24HTpss0YX9Izd/iRkUPjovxhxG1pVvGuDB6iiDdcIn4qzMQeeruuWGgKcjZRJ7aV4XFCFiRc1HewQZVjm8f9FSe3ByJ8a+VdxJBOmqSTUnjHwtrOGszK/TASW55GJHUgDc4KtgRg4opDlBxkf5cJc3Ws9xgX25+nqQgmWi4vRs0/n/we1+4P+BzqjBkoMpjGNH1Ft8W4CG/mQvwAbeynvKjzm3Ui/HL2oCXdPu1TY6zuwTqLMjT0MtksmHsKJt93ZQmysCdYgg7stSElhgj1XiEnOCcnEZRTU6+bj5/LrlGowppRbYpASL1ViAiH7EryihNRzY+XGVS6H3iV+4nxE45jIeVPmKKvkVbcSPRjUB43DUWrD4vxPRLOA0yHDRmIyh2VaTMQZT5UcLW/L7f80NzOOsbdaT3N9zkv6hn90iU4t1u1tjM8cvYf/Zp405zlljm/3KtFZLvZhjvTzIBJgFYo5ZtynnD6MKlM1MKPZ9uw3TxpI/TgFGdHLfyHQohDH8Q+TSEr3sxignTB0rhr+gwChs6sLFQ524FSDTu5Z4jxJwdtrRLfCS+a1w5bDW+FV8gOcuyoqMK2YVIeABW6yaKDdLrdz3VEi179tGS9T2oci5L4OLn/PgbFgX7ONX9N7FrMHv3Igk93YOTulGmFVYpB+xJtAk2nH9/sMmHlRVrkz3EgE1UcpnkPJCAlKo1ShvCUi+Zi2DBct+Pb5BvDFSnh9FA8ZTjw3gqd6mWUdGlaCO2v0F7vJ4x7KG2Z8eDe1pFIzYHECgoJmXjoxbI4zFP/Cu1bg4gSmxPDCTXn0zC26Rdky3YTklcjbgjsiEm6YhVNXw6IrkA0bQeaLUOrlZf8CNU7m9L0CqK1i6y7M5ROffDMiwKSXWMJ6QJ7wTpYlFWv2TTOTlRqp7NWS8E9fDrGLvuck3HZA12uUVaBg1HZkO9jtXHuVtFIe5sdYuZJT4ZIorbW/mNFndIs7Da/F5w+QRDG6WibnGaSBej1CbQUOaQxJDgffzeQj25RQPYtJaqtPPwKUr4qSOQx2229fjmt8C86abhJSYOU/cmQL7hQMhPZC4awnSo6BvKiPRna/EqsZMBYa1/2c0FjUQfBbCYft3zgs1v3StQ80VKud3JPGfwT/OJT85NdJOu8rKiIoa7Ai2BVQlxvBhg6C+d5+Tu3JEiPEVzPG6cx8kWS8kM7dDbkTKQkGEUH4nMnfEKywLqk7SG/UbIddPT9RdU1rGzbttjqk/EgCUH8f3pkycK5Z/WYKy8/GLfHsd8RSaeXSL/yNgOV+nBLe8w9nfIWOf9GkwZ3qyBTO6oRrquu/svlnmit5wGhjADSZAXB2Vhr8RPhXH/gPiCrG0AG3D/xsyz1nbh/n0X1jPp1MJPKHxR0d1HemVB8/PODU9hm4QpFE9dD7a8I7N9xTUaipgC2S8hWS6fhztetipqjxNDv6jiKmmeRusFK8yfJL+2wSu8qOOVLmspo/m0ffS25nqJV28o93N7teCJULmGPGOiIfbouPreKheFUDOtofgconQKaSR9k4bzsBLhB7zQ880007VJlbOOZIGOwzakiiFyvjiDMd+8/X+5RNRhhjx1yp0Yb4CIKMvIVEeg8AgxHUg4AbOOm3DMAbMM3VYxaT0NG5bO2c//St3pfrWM07Y8QegeMsLy0TWc6JLRHoDJBfImPTNzV2Kvxw1a5RXlxGV0xVkabCqCXdkTXnkyL6DJaa9kuBAEhgvS9hjTgAtYJR4y5ginFzroe7nCFq0hHHoUYwRkl36AQTXlGHl/hRLfthBGcWn9AjnCL1K6zbjSLmYoAMGPReJMV4U1wXKccFj3+36+Bx1X9CtpUhuKXLe6t0AnUYWrSquFPOHJKR/g25LOw4qt8sZgNbaiAmosWrx4FoC+7q9qU6Wdq4msP4xjh8C1UKXazzdUFvX0dVbDvH0odFkF5knZFL+DudouANyCbRpD0l7XwLmhcsCip1UTUoat324LUIBShDpe8U7d+H7fcquVVN+m5d7DQZb7RBiCIAPptEr+5oVG0MkJS+Jxdfo8Ju9jgDTm9RBMKjYkGxSFgJzhoK9CafK7ke7/pU/TqIJyK65GOnc+YarJtMJ+Q8WoECLTzswnmlmWKhX0RQzftKwEPYZxTzvMmS9J0QJMv8W7XshpXZxsKUvndM2H4uNscT+qVQ6+W673JG8f+NasFy+ZEEEe00nuqAl8DLuVVOvPwXSfpY9sZDgPJSf1SrYakD4HPlN/OFJm+8aFay8EdFqAO7feumx2CtLeQjg3dnX/V5PwcYHU+4E01yLk9noSPFgxgcGiqNKqcn1nykaETVC+nRXV/H+5EQ5bTDp6mE1ud9V4A5D22rrXIWkjfb4wnaTsZyyW9C4OtSvOFn9dfo0WFOz/Acu0ercj4QWkrjy6aGaQXDwX93ll/1/bkRSjPC9zphts7CaTVbJYCptToCf8zz9qPfeUuh1kv1dMLK70/BxTCrARO3G5/aUYdCP9L7PnunE5FAyahRpGWe2/AIb5CWLT4j2CM0zRKw+NHR2eGjwe1FgPvKuDnS7k1glgPiS2/jVE/F+xafEewRmmE/aN27gfjJjvi2E/uS2lVgd2dgcjqdso9TjW5L6YEJ8z2sO1Iuv44CYVeYe8Kqh78UwXWnFXiRTgxewedIY0naVmII3MRvK1cQqEruAwdqzwcuA6SyufPicE5C2X9/EGaQeCCFrYFpFYH1+JcpBYHn2m0BL0HJl3H7DB0guQFp5RYIIjtPmZaZaQueAK6C63ANIvAc9sb2Jkas4mhllCcNE9lu1RImrazHdAvqYj1qP6YhpghmWuP4k5nj1Tr35KeT4IlID+HJJ56bMP8cAji9RBj19LrXUHnFKPjAWSB3cSc5xYa5PuyadEFZX+Z6ctsny6kvDqGpLtDFwxCOQzu2Pliho0N5wW9angkhnGFwwa3WntaK0yXlb9Wj2+VcoLhpdiNWNTwSPtRTun/tSjyZuIvo6v3ViCk7Xbjirq5R9WOyy9ccnmpCu6U8BEccA1jFCOCHb5oyE3XdLH9luAskBL2t70+Sm62XBPxTsZs+PG38Ewx3gD/b4xiGAizxnZ01ShiFY2uiwiMyC2m2YNkF0DtDTe0h8GHg/8fyvx3Kv++LMHlxoIQMrBeR6/aMtQJOaVbsy4KfXvVUlaGa95Al3Ds2PWopufBxMlGCjaE/vTkuvALjFlbogNKq8iJKZUYO0bu+P3fkAuBVhkdJkUCMfVIwY58MWre+Bpf+9NFgqEOHc5RpqfVyEbvwwzTTJZc0QrRtojmAb4WU+4UMI07uAIw4NjQELXg39iGO98/9y4x0e1K+vQgPOSpheNIvfeAbCK+YxhSdUKUpDeXlX7Zr3bd8RUTfzOUcGV1aEgk8kB5cC3LTtWFAnKC7kirLwjxLhbOesj8MhDyLPDkyXCttUZ/iJOlOGVs6Y91r/XlFYf/HEPQgfnjtlMrtKn7X4P8zLQaNbAxFrzIYgwHntYeG90sKmdIuSdneLG7nrPhIiQDN81OQjPc2iRlMAtu4M4aAyEaz2SrgPlFGE9RZtyTxihh6o//BHiHJNDiqne5e9zuChLgrt9B7xdM8Kdx7xPw59tEOsJG9v8MBRNIEaLYY/qpvghSMfaDVMlWcNOp9vjtoWAmyBi+hkiHxJN/9p6UlbYQffv7NdC1mEOxeo4Xrqrf+0MZmZkGmQ/ShgD+GeR1chHI/uGZwQWeRNIhf7p1FSp0r6uTChsBZT75WXUxV7yFD378a2xmsB52hI8dp5NOBEkOBM33PK8QEL1wH0xw1ftHOFH19eozTyFmipgOV7Zbedrm22gE7nzq3TE5HSdreaMQHLje/vZHIuS5SVh9XcwH1JDE8/a1QME4hq1MKBjH2jEkhdMrjs0Qol0yCI9MoIi1hAARixwJSMpDvI6CCIHvZ6+fXQKHo6IJ8L25YECi9jT/UEPXKkvQJDYWxqOHfOHW/xPN/RVRK8V6xre96gzbg/a1b+qfwJNahrk5B/fLv3XbQqxX8KCwOR35TMZ10k1MlWXdsICCKjcARZz7gbMgDw8NHCf5jutpqdd2aJspLcvRe6oIyDSu0T8elK7z04/T6lISZndrbMdndKqoob/qkQ/yfMogN2fKPD/azEg9D3EQKqTjtMg9eN9q192xHHr+H+5ItOkVV54Ka9q9sbPi7ia2rK1vvM/CQzod1P6kqycxpN5rYCFNyT7R7c/RlIH0+vOHLqRE7INQsd57fWIQq/SC+rR1VwDbZTVz2ru3XuwwSHw6LqbxHsEZpmiVh8aOjs8NHg9qLAfeVcHOl3JrD2fGjmbxk6HRWPPo6AOpWIj0LdZRPkL72nPWqci06UgMyOxz4VJnIkWFd8P3m+lRxPrthzElyzOa4mRM/2Bx7NH624udAgDVuF4utgA9hvETaZCpM7F1pWb6itNhXq9FNHoDqrLMAxVFKkoLcOZArCMx7qSDis/ly/pgkY47+4pAQzN7SVyV29k+jngNw5+ok0g42mGJ1DW0VeJpqLN9w6+TOmnchPYUVk8wJuyvGhjFCqPhlqfb0EsMGzvIOmfESq/CXH/c9jNqp8aCrZ3A9FD3AwE0SjpASEj6ymMkZB1+L7IrpUMODrUSDLdlsH15z+gwcWTAEfxDbXQS/1q3p9fg1jRq2byKVWhO03EpeqXgPDkpAzXcQffS0EVO3GWUOiiBgVe6FRG7Y0qM7llZkKGgHZPcsNWR77Dri60N9yQ9boQ0Hkx05R2md75FZEVfticLyW5ZXHjd0dGmOX5HTrW7H7cgysMvhYBjeug/YqD1OFmH/1xXs2dAKm8gLJfReENiKlCLOaK9MJx5zLOyTJ5jji6GC77fKh/FyAzsS3P5Mwf83X83I4hbOttSLNqQqrKVdYxRb/4j43K3GtGgQOtSefSME7FFr0OFCzmOKImdkwE0rQyvxcXI37WbjBzFX60/eDV3gfWTmPI3tthS6vjenMcyKlJm9jqIkKOZYovAFWuGdYdpGIS8c35dQn4K3VrSgLq29MBI6gCMaFsqVq1EbyIyW7fxCa/1P/Yxo6+muPVGrGvl+wwl5dFR3nG64UhmtDnofB7v9MCeM2eTk38AxxAewFmG+kRXO/IWpoAWHqxWoJTZaqkAogbh0U3SNBPoJdQriiFv4rW9NNtMKsL0m1WJyivjX8yDsQ1ET7pA5xkHvfPd3nsNwMuHjcAbWSIhzwsfCXnnh5mHtEr8WgYbMj5nAV5PwHsYaLVx6uWT0gZTPAWCHWs2dY6KCQPABUyFIgxTaywNwm7UOvADJH47JIQ9/oPb2rgDRMzbVP5gogxnweSMt/nhUMRAb7XZejKWao6Oiu1nMoLL2tgaptiPkUo2dOR95jag0qKWbrPPFMZ2QWgR+iwRV98ZdIU/hKPag3Pkaxq1dIl7y6ZGCEn2MorQhgmupQcfuNtLUqXE09aejSfvJou2PAegvda9+YpCr/YiK4+Ub0WWDxB+E2xgGKDmkv43p1uTfCpYY92r4AGjDT1HN+a0hEvy7RI2oL6/bU1t6MlIsCEkOK2vshSeQjPchJbb/woMIpI16qGIU4usLxnwB0vpiwnNn4KP2kZQl/7vkOc1rj0eJWQ2ZArmWsxsMdRjH6i3R0KRwYrOVnmrWi2m+FUNqYipFfEMUp9d3WeEvsT2Mp9PdPaPeL2sC+5LKVzNumsQtQRoiajt/4YJw94W3hIa8ZleCYXNGEEUd7m3rZmZ0KBCBFMGvM8/wvRrfx+Dw4ie0qVktqyG0kksybZAACt6q3aX8tGo3tCU2Fq4+TXq2IiU22OarBNUfgPAAT62gAWgc8bDF5QMzBcPF7aUNpNX5KJcLE84VZhO2B1pxuUl9EhYFBAJuyIQieZ6q34HGEMqPzAEnqtLYIcIrqjHXpvHvj5ns+9nlqw0mIiOgTjbHO/pRfUL8QakjG5nz4svfdH5WMJZMFXtTpmwm412zTDgyAfYfXzqFy9oM99L6hcz84gMrVNxvOSgKkn4yy/bVJk9AINwAisyoqoAWQu8i/o6dh5xNf3TnaiAEOpH6osp8fxy48xE+nTRtGPcjXSmnr6TIhueG12/6jH60XQjMtn7B7N55Rma3uOUkrmT2Aygr4juutp8jHgj3LSGAF1VRIePIU69y6+hnir/wFen0HC+/ms+1qeitvj+qGQRSMs2UJvctRxmvUc8RTCQR0AXshiZIcjcZcbOs0sUWCcXEWFrD1HKgWkCrJ54qLhIAAHdAAI8VZvZCE+HE+Ep5mwvyaLjGU72qnCvgRL3OpP9lwAikZ9uJaGcWPPwOafQBOxukbvy+YsuBMVXqQXUzh2glE9fiBsPb6aPAJIHk994x/qzMSnVwvNJoyZtM4rpug9Y6QFR5NLQOjkqGFUfIPw/Bm4lY1gh+sXTTQDQ2q2RvIqxa7AZ+PBnzmwPrkBsQjCXVTc52A8maq+YIN3HrvW/+AMOLQi6gx85PIHA16CBuh+TTW41WeU3PLUvpPIWMp1YpTqaGHjJdM5A6+8+td9HhI6ifqB36+ciGoc6V3s1pQtTi7X6Lq9Nj6Z3cVj7xODmvqV4oLTdFZkfZUtLO11jTpEgtIGjmuOdXDabFfkGypTsAhgoGxBiUoWG48FjHdR5kN4urzfar/3ehdgJKAYHZphRGDZE6AGN8rPRcydfk7jfeSbgrAAABU6ZLg4YnWbkULa360vcYlTQ90Umegd/oS4qpKvr1URxVuIqow75hfOsiFaP25ULyIrP4TI6fHnfjxsNGQ+Utlu8zG6b5Abxw0329hPdPS/zWQRnEY3dmVyx6x4ImlQIF3v3gadS0R85aL9CionSSutomokYnBeH18eB/dEGofhp1RhVfnFoOf7ERCUcTny0IzEIeaaYK82KrWNhJ0V3hAleuJbzFgN5b42B7eqxaXHWdjlBWIbrUz/B2rgOpqMGvjNl8Ys3Fe9XGTzCt+D9Xo113lBUJXo06VYln6CRibTG00zv/HhQWTxfT/aw3GBvLXoC+y39uIqpVMiaMhnEuqGrZ7ftcZuCAJnCdE5qJ8cQAGCtIC/L/qwzse8P7oyEHpNA6AAR0858Nx0zio+I88/tq3ss8R4qNJGwEAnJx8z0po7O/RPmdN4EDingA24s9XESjoe9cEPaIwH+OERRIA+5+8XNx2zFl7kp7mGtyayytOvcGVvvaqQhZYYZthMx8HznLI/LuX6W+xJfCSarsGagwxf/dm728eIgVr3XwEBGyEIwWXk9NQODBzFTH9H4/Wp7r95BzWk8FZmnPwaDhqOpJrGEGb5pdkbOBHHHeBLehxzlqq/PrZF6yDxtj6KZFtyoecBat4pYBkYO/XiRki0G1A4xuRAJKp+gChvsto3RQ6leQbslS3eAFxq5TnbhfDmjTbaLQEBVwIzvY3EBDoAAhJSNjmYd+lqJrBrrfK7jHzi3kSQXxcOvAhfhUPkcFQuM3/f6RZq6DBJ4cZRCXVtY8d3A7draPIbgfeE+IKdef1Sbhh4FJ/E+/Clni97/m6/m5FxYHAf+Xf7iKn0gz0AjPfGtIWSMueJ+xGfeiXb+JID1lKsHwGc8Ro3zUIUfUxEFC17XWRQfVNZdW4wefP2yeGcQ9NKYrFN3spjSjWPrG6ah7mKe7+Xd60w2Z3TmRiXuloIfb3P0PwUsYNW7rg3g+2zUl1GNLv/1wsS4Zgmj5H45wAAAA0MwcIeqXXz4xqiOfiY5FLTcri48R3ENyN1mfFELmr4nmK4afB9W+G1K/8DYYU3ez5JdfS7FcF6Pdz4Ijt8KfFCY6uJfHQZiOuY4ovryg4L+Tkv4PxacnXWEoRXiD9rvNXFivPCCoSQS0itnzhSPoPlXYvQtTC36ahVNyAf7SXMCofISPfaWbKrQ187eWfmc2PnwSUkm9DSG0sEn3J/tcI19TyAiRBK1et7SI2+WKV6ZHOdYCbd7VMut8SpRK3TNvzRjjylShHpRT7u9gQzJQT8UCxWoBbez1cOq4gKqRDIMq+z2Gikrp5MjES3k26HaAAAuZE0Nm+WZSPgg0c7Ns+Gcz52+25Mm/50hLphkRnPubnoYBD2e8ErDqkApujvAsyB12yjoP0wc9ywki6jliUTs8D/ZOCNz5yPgi/WYGImkcwxlVXvBF5lS4dr2vNh+ZPfUKGwIZeWDtxHlpUh/p3eGTE01lZq3Payh2uOFG+JcTudIB5ZejxBeLz+jupMxlHSkSnElHbrCJ7UyBhH9MwwIi325NrPmwOO86O0BtdwZkZnblMT9fRKXekwF4nrB+7RKmaCEgOlKF1Izfd+asPd8DQZsEQ9/jcJLmlzhbvmcOrGXQAA4mHoR48/uQlOhYOlXP7pnegHm6UZrecU9KDCnzMolbOJ+RJDKX8K6eCq6BSdazxPYso2Dykke+X/vYD2nh607pKtGvpy6JKu54SLgDAw/+0Crk3aF/DvhsNRgWNv711RUIv4PiCc0TEZjmvGbI5+pL6ELzf99iRBYYyBmw3bPCqek7oqXm3UDJKU+nft0TrQwdju27RbHpzLcqnMVbxqBCoQlm44tE3AAAAfkpqVCXIG6+W72gbwYTpDNIsn8GjTexnCIkPx3nQhzZWXqu4kChwr04Gr7EtDrhkIvpjl/nTClmY948e0QuYvkTdhJLzI0l+HqR/95iCtXjEpE4nSXVogpor1sYiUAp1uuNChYsVkvwWo3s+Mri8xkMzh3xF63E+ynyjGYTHXJmKUPXtneXMX6mNk7+sDyjmsShtLeBddVv3qC0doGjW1bqBmwbiKxBvG8/7bVp5cdeawHMDuMX1fRaCi5YQAvt9cqYZtjCr2Hz/0qJhohnQ6zchcyvdl4PXZ+MgAAAFIFGH+fJXOTsJFO/gNlQ2dHJDnWhPCHLEbTFzv/nPxR5Ka3KFQo7bQXgK8nq0CPz5/Moc0miyl6u3pV9bHrlMcD6f73EYcE+sPpQIwU7MP1jq8aNJUIzby5hVs/nVj3BezdQq6uWpIsviBt2e0v+95+NylqalWIbdFL1mfz8DMMQO4iTR0+Ug/DD1lhOjZ27hoxIVMiD+xzdGg89lsM+5XQACk8tuWkqHiGEwxmRvHmfFLvHs8P6MLYJEp9/rO5/4a3cvHdTYc/Apfqb7g460rDfFP4ouUewLFP4pWlU8v5Ye1fgfIU2biQ1XThkEev3V4BB3FQlwYELIeNZFil8O0S9ZDlj96B4umkOkZljIyhndhKFT/HhMwF7ylWD8DgfPd8XlGnHZdKmBMQs0Is/dAPj1KkaPdusyqv+NapfqIAAApqT6bLIjgjMF5orm/AMcxQkL13IIdlVqLzFAsd8ZSqRUnUXMa0FiTLRQmWBDItgQztvwdmru1EGK4ZaF5ITr0Z874AKVWH3AbU4D+5u2/Z8HkyFAaPYAdBsQw1bK9IEEmct5NrtClkoCXLU4k8tI0pD7EQ0UTO/sAYsO/jfta+VMTRFlpMgG8YilJMXgc6JZYJSW9Yyhx5x+AAB0dxmmjnj1Uo1+BPYB5QyI7sVCMgAyxa0ku/stIBuI2AiWqEcOerAtxKc9RzZmFtWhfhEDuio85n+RQKxNX8c4SICXw7H98Xy2EC+8YgGKyAysAABtuY8jNE7mJDuZaoDPGGCP9TdL9awTTGnmiGNg/9VtF9WUS0/YOtgWa1PEMql3WDIQF+TtkPCPM3rQ6iUurEbO50KEdrF+wZGufrQseDMTBTRseycie3qNeXE3d2ZVobMfjl8GHCmpSnEuJOD7oes3yQHj4dzvqdALc/a2FlL8AnqaFkMAAA6dF62eMUR41oZupwlWeFuoSDz/r5yhVGjMhX0QTvtHjtTRtxJzreyxFee5jxKlKa2PFc7ADk0LsoPd6+cHZ+FhEMZ0KWrELtCHZ7BdmaZ+axn0F8bdoUfBLyCYpqNCkRsFmE3PL/phVr9/+YKz7Qi25UFKiK8g3EpUrEPJNCwnF5N+sIKSnmc3yc5r2gbU7TNMJt2j71Mu0qRxF3Is9wUDF4LlQEJ2PZRTQldCgAAtABAb4kJEdcQx9z4f0OIsxhzjvfHOT/CFdfZ7SLVQ1JLOqNvQxNZBWyxGSy2RBFbsg4mTYH4Vi+SLnxdAE45M/haYL2YL42rSxU1BcP6EU7RqAbVIG/lwDoiTnyt7jZIFgcfl0QS4C3vLDeORYRc6GMOYJJ/yHkS2noBCpILHfhWwAjYPk5qmRvoDB9xgt2wSnZ9SoSthhOVsJt00axBE0IWQiFGpZsLDQ3mts7XXR+endFvvyHcVV3NgB7b0+5kF53Gk7cqV42H42xhZXzeZPAAAIEg4IKOuHMYB8OgDlsVAFQnbAKoa1k3uT8yOm9YH/No8cEmr0LImo2x0w13VgBYeCdRStJt0JWjtfotEmYoZS3Q8CxciKHEwcVzhTV2OF5by2MtaNB0SaPkbNreq5XJ0tgxHl+k+stfJmDoAfa1qNmjD9CtiQwPgTJH2ZZm9yNTGAyBQ6vFWLnBhVapO7JAkyO7m17t7G7J9SD22sAoGOgTnTOAU0/6bXcZPfTHwKpGeQbxJYn1cK+18pTV3+L592YU0LBeXIW30eg98s4d6lgW7x5dI0XCbeaTCzeaKihjM5NspnHBoCc4nXWlDhTwKGAAFDuWkt7D1vLkuMCLVtv4t0BJAu0boOWUtPc61OSw1+8Am9Ou90XQAW6nieCClB2g9/xnb78YuXHMzCfohfr9z91COcQNoxISqxMzodz6NJQh+7y6sphSFXBt4BwiYvnFyLBd5hWy7yJgmNc95K3F5PumWwgHSwZKg0o/MLQ+nJUWgJGQ0r49K4mYaepoXHRP8lnHEOPF60KrIhVvHbOmq9hR7/nLPvCEyuNMoEggxsyyb/wA+p+7aUxbWNreN1z3RmPqcETy6BkJ93LG7HOvVNZAoT0+OQ2HXQHwG88ESHDiX4WnkGFsw1p/4AvlwPV32szafPriEWNQonrnuyX/jxpSz/QF9dyAgpMEVqWRBbNgG6bNXBABEi3eZybyT3fKOkGX7aQN5feiPObYGkzwYxJX9XXwa7hy75f/akr/SwHfLMGrWbXgl4P+UqUqA1O7FWbcWwo+n28gs4+ZzqxwLXLradQKgERCN5/V+MVZnmpV7JmY85+aNRVKunS7quOsB7vpJI61GXfo+VxeadZYud0nWGZKzZVeK2r2erf3D5Y/JwABX0T7LOn7Ikim2z98NOkN3RbHta61gGdPeTZXlh/AGjPRdEHdp2Bfgj7xoYYRqNpmBORjE1ZbrsgNcmgAefOl1aNyZKSOO9epaaqrsVbmJXhrBcrmI4cQL7zoGT8aaReTLDW244Ro/MH9QRuC8VLuktHIz446UOYrWVYikNoTgtUN28PXOOi9ZU7UwO94QB6rAAAXeqIFGaymb1ic/d4N8oRkMLhSfJkXGWf3WNRl3boj56AXuPB8URybTjdqcwpBUF3VPI0EHsw3WHwHeAgagURUeb/U/h/y87T08wuQqdrn09YLN5ZUDmRW51aZfFEtrhMsqPdTr6gc4JfrRoTlDLGA8WQ1xg5WHPCpbgSXfXF0q0RWOxPtuq2SPimZPW4WmKD7DNiYjCEj7Fdytb0loMANvx1r6xtrdcFaq8BVUh/+LqGlXylYN2hFxOmeUjJ2T1d/H3B5NgNFRF6YolEz/Osgq4HnWuVDe2BV5l5TnvLT0X6fZrgYLrcaG1i3/GNymt6E+RL9i/a/5qrD5sN82qA3kCXTP11BH3LqWi6cj5AInRb70zoozAmMFxQICPgARZAgKSKsTCy4R7EfkydpCxs11C8Wa4tdhYtSH9R9q/u8uZIdBsJAVE5pg4VD10AFi17c9qKKqdcTQD624QWWF3Ivwcu5UJgH3aOmF9gUBp3JBZCpyy0IvRVufrqTzY6wJLLFZ0VKfdwnQDdAeN7H9nDBK00kJCa+KL7VRczMmEip00V+Ba8DSt83As22VUeXhUz/DEPZiJwRqtThc/lwxhWZi8EZjsjS9OsFQol7rQwIuB9FyKB0yAxNbqAWeC98h8AitIM3MpkcXy/nY1b864Tfl+EYxRQpgkFzPXPzkmBo24aKkLiFGudkU86oVz8il/+SFo8XsqxjykGX7sIGzAUygnfvMMYboC1hJ7cd1r4tKp20HnAC4HaB3fDeIFWrOo5LAUarRz+GK3++rMBgDALH5x1R2pPgwIAHEo4o1Kw8JI7XCeD6etcs7Gw05JTldARF14Sdy+jCx9VaIjPjJFQu7JozI8Eo7Q/p3i0uQ8BPigK3prLpHXoLkijv+Sg0kSkHm3lxZoKIbO5eyjt9pUT9v5DMdx4a24ZNPQWEWDMUTxwMJrcM/C4qme/mMAFmxODfGtShsfIabjCPp0vvfIpZWH76NdnJ+WTz65Xf2ZGQGwzOlozQ8iQebcxQZ0+N09ehLIQoD/X/lqMFwxPdoPw8qwbWz8HLXDlanvRbeDHj7qGJD7G7XaMY3GK8PopSIkZKnnkbUrqbUoHweEa8IeMAWmQefoGliKcDhjEVKkPKTp8CYv50YVExOCMUNM1Bl/X1SmShQDB7ngrM3KNbpvbnteyBKMj2AdNTf9/swq6xBIbMa7K2CTXIXKghrd5yEN3xJy1qTaKgU35FstCZwEIW89vMdXNCgTX3hADWfkPQ6Yge788zNxgW76US9wPfZ+QGKdXr7ZM35I+TkRxd9NnezQbO5AbzNQzwpKi1qyhzj6fsOOol+DgNdnMvQ89IF85bKtrqhXS5XqQEUG3ony1woYwiKiEBqVtrSPDD/vVoffnvbn/HJsKBeJ3pDPge42lrIfPL0kAEUCClt2/oTQa6Z92e2rJvSq3SRGL4rU2v1Hkxdyzevdf0m5N02aaZtvWOwqWzNyI5VYAABahR93AukgNLf3sYYcL16htER9YU9/YH/VBntx3FE8WAno/dow2vP+YKkeQVVmchEJ1fbJzOorDUYk1EeI/9gOjJkKnUnTlNviasQ8SPoLkqfGQjcuIAC4rzYIG8L8JWeIsFneO+CKkes4G/N6U9wFlmFMR+XBc5CNrOg1GV9Ico3jZwPOEOrxRcYXsFQM9DUh2Qz+H8jiDWs9CABN8b7wWkQ8U/AjEPxuY7W5AyY5TArbi0p4nWMIsJhHlKtTSQA6N/PIngwW0K7RJYvaQbiQngaFNPV8aSJC+LJZGeLQgkanIcBJLh66XSjy4AJv2i2NojiMJRM5YTlr5U55bBQ8H07u3aldXfg55CrBFMv6tuF6AmUGO8uYgp0yC1dLNL/oZ5/AIGBzn9r7n3uNu4l2Q1N0yT3gFH8aCRfcr/2INp/9N8xa6IBEVlv3R38FT98rx1Ce5D06qttoXpza7+0IYIPfDLHF4fGre0qCWEoajElZ9ckjt/jUwxLQ9pXQOM1g8RdbgG0euhovpKv6BUFBBxxPqhnZpipkslPOjhmXwdFCWbtXVimzkRJNV9+NOMdvQcXoFk4FdqSB9DRIRIProsppaC2Btgh4ImjLcqvYhVq/CuNM8ZrnKVzNTqGrkCjHV/mWMiM/PNl14AAocpavO+53PvWz4ctE/h04nUKXtDsKAlQSeWWZ4YVhNvc/6rzP9dP4TvYUz+1jeRKPRw58ysng2ycm+S9ZrElRkJK88CXht+lwMJ/T7yQK+qwkQHweZiCwP5WTfWCZc665B8Pc0MaHXlRWhSroHBkyJTiRlwDUPSW3LKCEYb0NvnvnmDt1IULRwY5dDb9gX6soa88vQVw8dLiLLfSsfvV2OytS4NdPyryawTMIzAAAAAUrAEowd4GnQzq5pYD49pw9CpZSO9aya1+kvkgOmq5sjur4Olcu+wlcdXD0YJ7qCzLQXXyogRzUT7q3blhq3YMg3zrTPoW3tRCaCtWHfv5tPMwHNsBNqza15CUmWc3KVXPuhGCuXm0f5wH9vM6Xn3Um2KCXFu6LS+5bJrY7qUrQZk2DQiahuEUmX7k5rquMgrB4l8KgOzqs2lS8X864Tuim53f8b7yqQLcAGVfobxtL7ebqufvxAi9PQLGwAB441d2AFesu3+IXHwdcE4IwxYILI6kNIReJ0suebAxpuKzrYEW8JvjTnMaz3jSKV0mplp9wyPON5IgV/Z45sNtlQNEmW9HOkHmrwEKLKNMhEXI5E6IVHxpfV8/X7XHWLoYi/NPGzfIpOc1OZin2V0GFuhn2wu5VjD6Q21r1Gxs7fZyQ4zCuTEL6hRTaMR/COWap39sgDJih2rlyVbCVxSkNOPiKYQ/hhW5HVpe844j7MbVfHsKMGAAAN97jpFRajy/lSn43wwerm0zyqYyKmx9Jw8wDyhKEnZDEL2+SDUIV3EYax6MRuSDJjd1cQb5t+qTdAtwuJOR5wfqfrmgDWhmRyhoJnzGFru2P/V+cM2FueoTj/ejVQJjxQzch1P1tYgu/53iD6AKALzF6HQHAv6zvV73B7xNEm19CWBH4NRQN4e5rpWnEHPiRRKewKI8OXikvQ2/oVkAITZ/+gB9ur964V0FUsCSYGVoy8tT3yi9PCva4fdDJ+eNwkKJnbCNLMwJnI58+vFuoVhajUOhWNzKje/Mlmawu4P2+V3yTyEZbQcfuviI18WgwFCh3nXs5wEd54J0wNMuPyNtB8aBOqfyzuoebNbwoePFsprnswv4Tcl/41cSFsh48PLyhIJqiV7dZqMEZlkJ/nl7UZrKa3L8ThxIywKI1USL33Jlf9+6+YDH1lLC1Bcn+UX4UUP+gj5AAAABS6NAlHloIrjxLLSB8w+Q6GhCHXH/JBa/GI06WZKVLl9+5M++5x9Ypwg6bPpH52VTU4CoGNu3eHzg2VPMyMAmCEQbWcbU0PWyYDQr5K7WvtYGj0hgsyBjv3nfE4ArItaLAvD5Rck3l+mrU5qMiQbH0d/JPFKv3XM4hLUl+dOY1gpBTxnHJJrrTmGy2Ixy4vrZ+PhFJFO2XNPJAqZLpDY4hrAnHfbW4GpwHQ4EMsGahzLihIRwQt9u+XwEmBjlXFHKAsm33AdbHp5OmlgIN4AHQv9mg2XlqbPLT0XEY0TuT413guGr5vr4AUzslPSr+6loZWyX1217bDEKZ0fXTDg41M3XshNhbAgyYTzAxSZYKFF76vFDhYYYFVa5hfAq5rWeUfeMph8QxKw9227HWhBsv+04LUFmQH1rAUGDGx/x8u10piksx3xDPoLMT6Gq1DBPL/z/NbftvI/I2pyMol/Vv9M//VE4HnQn3Fb42ATrb+LOgrpRJxGN1cTqETatJi1V8ibxcsvtQvWZDXzZv/ydXodKHvW54DwkqrAABZ/wv8zO3r0Nv8e+ufVBACt3CujYD7Hnlz7MdwCyKkML+f3IBxJTykboBrGggtSJITHIFzk8JpBtmcHsCtvf0DL3NNvzdAmOJKGetc6v3V1ipjeeOu+WT9YS6Bu7MMhjYSFWAq+eFj3Yaj1PC++dNQXgBSEAfVnzownUTBPAVdI3Z0KtjzIZyAEymntiEVeLUjKVBimMeKoAT8h5+kgxVQkbTh4ctthsfiB9oAZZNPe0jBhDIe/HSkv4LOge+pttn1c0X6ssqWVX8VU4CCAir/TItCIv63Rl1G8+uepSFbiwhzmjxdDLJqob9Gd5HEomdFckcKHCcwAPfc5wA22a2pRq1g6NjM4+ij/DUUM3hSW3zua5Lx8VkZSg8wKhhjzATC+l3i4A8GSxH9lNsdw0ghbVb+FZ4boHvPUYHXcV61pEEvsM+KqvYQBeVcj1huXbUS5qLCdwaLgOKZb28pIpBf5mD6a9s5Qf6j03om/d3oIUWoR53d0diJzYjueBZ+h6jg5vOVdAHqWGYsRuIV4ZlKwidWn7Z5G7iwlvwaG57ZyBKCWEIfYF+bFdFwrw2c1X2ywy5XelBUhLXzykxR6Ow1+gpNedh++LUv3b24bNN0hJFXzf8q0f1YtAFAhj2uPiAAAABPq6N88a6644B/miiklWJIh4xnCsVje/ShtGPF+Ry4Tuj9UNXc5FI9O+mzZXaqHT1RjhXIbR5BYWAtG9y/4rAM9ld/WHLzI4MEKZDRJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==","w":1307,"h":1067,"e":1},{"id":"3","layers":[{"ddd":0,"refId":"A","ind":4,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[653.5,533.5],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":592,"s":[0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":628,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]}},{"t":716,"s":[100],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":764,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"A","u":"","p":"data:image/png;base64,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","w":1307,"h":1067,"e":1},{"id":"B","layers":[{"ddd":0,"refId":"C","w":344,"h":54,"ind":81,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1},{"t":604,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":82,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,60],"ix":2},"p":{"a":0,"k":[36,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"4","layers":[{"ddd":0,"ind":83,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[74.01,-31.72],[-31.26,-31.72],[-31.26,75],[74.01,75],[74.01,-31.72]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"B","w":346,"h":58,"ind":7,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"C","layers":[{"ddd":0,"ind":84,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":85,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":86,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":87,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"D","layers":[{"ddd":0,"refId":"E","w":344,"h":54,"ind":88,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1},{"t":604,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":89,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[107,108],"ix":2},"p":{"a":0,"k":[21.5,22],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"5","layers":[{"ddd":0,"ind":90,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[74.01,-31.72],[-31.26,-31.72],[-31.26,75],[74.01,75],[74.01,-31.72]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"D","w":107,"h":108,"ind":9,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21.5,22],"ix":2},"a":{"a":0,"k":[21.5,22],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"E","layers":[{"ddd":0,"ind":91,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":92,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":93,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":94,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"F","layers":[{"ddd":0,"refId":"G","w":344,"h":54,"ind":95,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1},{"t":512,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":96,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[69,54],"ix":2},"p":{"a":0,"k":[32.5,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"6","layers":[{"ddd":0,"ind":97,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[66.55,-14.39],[-24.84,-14.39],[-24.84,67.77],[66.55,67.77],[66.55,-14.39]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"F","w":343,"h":53,"ind":12,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[172.5,26.5],"ix":2},"a":{"a":0,"k":[172.5,26.5],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"G","layers":[{"ddd":0,"refId":"H","w":266,"h":29,"ind":98,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[78,13],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":99,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"H","layers":[{"ddd":0,"ind":100,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-182,189],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"I","w":266,"h":29,"ind":98,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[182,-189],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":100}]},{"id":"I","layers":[{"ddd":0,"ind":101,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-182,189],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"J","layers":[{"ddd":0,"refId":"K","w":344,"h":54,"ind":102,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1},{"t":512,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":103,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[92,83],"ix":2},"p":{"a":0,"k":[21,26.5],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"7","layers":[{"ddd":0,"ind":104,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[66.55,-14.39],[-24.84,-14.39],[-24.84,67.77],[66.55,67.77],[66.55,-14.39]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"J","w":92,"h":83,"ind":14,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,26.5],"ix":2},"a":{"a":0,"k":[21,26.5],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"K","layers":[{"ddd":0,"refId":"L","w":0,"h":0,"ind":105,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":106,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"L","layers":[{"ddd":0,"refId":"M","w":0,"h":0,"ind":105,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"M","layers":[{"ddd":0,"ind":107,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"8","layers":[{"ddd":0,"refId":"N","w":45,"h":45,"ind":108,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[276,17],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":109,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[348.53,-181.7],[344.59,-181.7],[351.23,-191.29],[345.1,-200.08],[349.15,-200.08],[353.24,-194.17],[357.32,-200.08],[361.33,-200.08],[355.24,-191.32],[361.88,-181.7],[357.9,-181.7],[353.24,-188.44],[348.53,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[334.41,-184.51],[340.24,-190.89],[334.41,-197.27],[328.54,-190.89],[334.41,-184.51]],"i":[[0,0],[0,3.756],[3.464,0],[0,-3.756],[-3.501,0]],"o":[[3.464,0],[0,-3.756],[-3.501,0],[0,3.756],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[334.41,-181.41],[324.93,-190.89],[334.41,-200.37],[343.85,-190.89],[334.41,-181.41]],"i":[[0,0],[0,5.507],[-5.507,0],[0,-5.507],[5.507,0]],"o":[[-5.507,0],[0,-5.507],[5.507,0],[0,5.507],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[312.91,-184.51],[318.57,-190.89],[312.91,-197.27],[307.26,-190.89],[312.91,-184.51]],"i":[[0,0],[0,3.829],[3.391,0],[0,-3.829],[-3.391,0]],"o":[[3.391,0],[0,-3.829],[-3.391,0],[0,3.829],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[313.46,-181.41],[307.55,-184.43],[307.55,-181.7],[304.02,-181.7],[304.02,-207.77],[307.55,-207.77],[307.55,-197.38],[313.43,-200.37],[322.14,-190.89],[313.46,-181.41]],"i":[[0,0],[1.094,1.823],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.443,0],[0,-5.434],[5.507,0]],"o":[[-2.48,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.13,-1.823],[5.543,0],[0,5.433],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[284.82,-181.7],[284.82,-207.77],[288.36,-207.77],[288.36,-192.71],[296.38,-200.08],[300.98,-200.08],[293.25,-192.89],[301.67,-181.7],[297.29,-181.7],[290.73,-190.52],[288.36,-188.34],[288.36,-181.7],[284.82,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[272.44,-181.41],[263.36,-190.89],[272.44,-200.37],[280.97,-193.66],[277.43,-193.66],[272.51,-197.27],[267.04,-190.89],[272.55,-184.51],[277.47,-187.9],[280.97,-187.9],[272.44,-181.41]],"i":[[0,0],[0,5.069],[-5.762,0],[-0.511,-4.157],[0,0],[2.516,0],[0,-3.538],[-3.647,0],[-0.584,2.079],[0,0],[4.704,0]],"o":[[-5.762,0],[0,-5.069],[4.303,0],[0,0],[-0.329,-2.078],[-3.647,0],[0,3.537],[2.516,0],[0,0],[-0.584,3.866],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[246.49,-192.97],[256.88,-192.97],[251.77,-197.52],[246.49,-192.97]],"i":[[0,0],[0,0],[3.027,0],[0.547,-2.99]],"o":[[0,0],[-0.219,-2.808],[-2.844,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[252.1,-181.41],[242.91,-191],[251.77,-200.37],[260.45,-191.65],[260.38,-190.23],[246.38,-190.23],[252.1,-184.43],[257.06,-187.68],[260.6,-187.68],[252.1,-181.41]],"i":[[0,0],[0,5.105],[-5.652,0],[0,-4.668],[0.036,-0.329],[0,0],[-3.172,0],[-0.51,2.078],[0,0],[4.559,0]],"o":[[-5.689,0],[0,-5.142],[5.652,0],[0,0.474],[0,0],[0.292,3.428],[2.699,0],[0,0],[-0.62,3.792],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[222.93,-181.7],[222.93,-207.77],[226.47,-207.77],[226.47,-196.83],[232.37,-200.37],[239.23,-193],[239.23,-181.7],[235.69,-181.7],[235.69,-192.31],[231.39,-197.2],[226.47,-191.65],[226.47,-181.7],[222.93,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.735,0],[0,-4.376],[0,0],[0,0],[0,0],[2.589,0],[0,-3.209],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.984,-2.297],[4.157,0],[0,0],[0,0],[0,0],[0,-2.918],[-2.881,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[207.92,-181.41],[195.45,-194.46],[207.92,-207.52],[218.97,-199.02],[214.99,-199.02],[207.88,-204.16],[199.31,-194.46],[207.92,-184.76],[215.07,-189.9],[218.93,-189.9],[207.92,-181.41]],"i":[[0,0],[0,8.752],[-6.528,0],[-0.656,-4.959],[0,0],[3.683,0],[0,-6.308],[-4.996,0],[-0.401,2.99],[0,0],[5.871,0]],"o":[[-6.6,0],[0,-8.752],[5.762,0],[0,0],[-0.401,-2.99],[-4.959,0],[0,6.309],[3.756,0],[0,0],[-0.547,4.959],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-109,370],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":110,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[307.4,-283.23],[307.4,-261.32],[305.26,-256.15],[300.1,-254.01],[256.27,-254.01],[251.11,-256.15],[248.97,-261.32],[248.97,-305.14],[251.11,-310.3],[256.27,-312.44],[289.14,-312.44]],"i":[[0,0],[0,0],[1.37,-1.37],[1.937,0],[0,0],[1.37,1.37],[0,1.937],[0,0],[-1.37,1.37],[-1.937,0],[0,0]],"o":[[0,0],[0,1.937],[-1.37,1.37],[0,0],[-1.937,0],[-1.37,-1.37],[0,0],[0,-1.937],[1.37,-1.37],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[267.23,-286.88],[278.19,-275.93],[307.4,-305.14]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-109,370],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":111,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[338,237],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[169,118.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"N","layers":[{"ddd":0,"ind":108,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-385,353],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":112,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":108},{"ddd":0,"refId":"O","w":45,"h":45,"ind":113,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[385,-353],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":112}]},{"id":"O","layers":[{"ddd":0,"ind":114,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-385,353],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394,-343.42],[401.94,-324.91],[420.45,-316.98],[412.52,-335.49],[394,-343.42]],"i":[[0,0],[-7.304,-7.293],[-2.922,2.921],[7.304,7.293],[2.923,-2.921]],"o":[[-2.921,2.921],[7.303,7.303],[2.919,-2.921],[-7.303,-7.303],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[420.45,-343.42],[401.94,-335.49],[394,-316.97],[412.52,-324.91],[420.45,-343.42]],"i":[[0,0],[7.293,-7.305],[-2.921,-2.923],[-7.293,7.305],[2.921,2.923]],"o":[[-2.921,-2.921],[-7.303,7.303],[2.921,2.919],[7.303,-7.303],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[407.23,-330.2],[407.23,-330.18]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"9","layers":[{"ddd":0,"ind":17,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":200,"s":[282,203],"i":{"x":[0.292],"y":[1]},"o":{"x":[0.483],"y":[0]}},{"t":228,"s":[282,212.03],"i":{"x":[0],"y":[1]},"o":{"x":[0.585],"y":[0]}},{"t":272,"s":[282,97],"i":{"x":[0.293],"y":[1]},"o":{"x":[0.694],"y":[0]}},{"t":308,"s":[282,103],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":348,"s":[282,103],"i":{"x":[0],"y":[1]},"o":{"x":[0.517],"y":[0]}},{"t":416,"s":[282,39],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":456,"s":[282,39],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":492,"s":[282,54]}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"r":{"a":1,"k":[{"t":200,"s":[0],"i":{"x":[0.326],"y":[1]},"o":{"x":[0.759],"y":[0]}},{"t":228,"s":[3],"i":{"x":[0],"y":[1]},"o":{"x":[0.311],"y":[0]}},{"t":272,"s":[-1.1],"i":{"x":[0],"y":[1]},"o":{"x":[0.572],"y":[0]}},{"t":292,"s":[0]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":115,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":17},{"ddd":0,"refId":"P","w":24,"h":8,"ind":116,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":115},{"ddd":0,"ind":117,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":17,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":118,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":17,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"P","layers":[{"ddd":0,"ind":119,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"a","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"b","layers":[{"ddd":0,"refId":"Q","w":51,"h":51,"ind":120,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[323,21],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":121,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-542.66,-39.25],[-542.66,-60.74],[-538.52,-60.74],[-538.52,-56.95],[-532.08,-61.08],[-525.21,-56.65],[-518.22,-61.08],[-510.67,-52.9],[-510.67,-39.25],[-514.81,-39.25],[-514.81,-51.74],[-519.37,-57.46],[-524.62,-50.98],[-524.62,-39.25],[-528.75,-39.25],[-528.75,-51.74],[-533.27,-57.46],[-538.52,-50.98],[-538.52,-39.25],[-542.66,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.199,0],[-0.853,-2.815],[-3.113,0],[0,-4.99],[0,0],[0,0],[0,0],[2.857,0],[0,-3.411],[0,0],[0,0],[0,0],[2.815,0],[0,-3.411],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.896,-2.431],[3.284,0],[0.896,-2.558],[4.649,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.284,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.284,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-558.69,-39.25],[-558.69,-60.74],[-554.55,-60.74],[-554.55,-56.6],[-548.84,-60.74],[-546.24,-60.74],[-546.24,-57.16],[-549.35,-57.16],[-554.55,-48.97],[-554.55,-39.25],[-558.69,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.028,0],[0,0],[0,0],[0,0],[0,-4.691],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.981,-2.857],[0,0],[0,0],[0,0],[-3.923,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-574.33,-42.53],[-567.51,-49.99],[-574.33,-57.46],[-581.2,-49.99],[-574.33,-42.53]],"i":[[0,0],[0,4.393],[4.051,0],[0,-4.392],[-4.094,0]],"o":[[4.051,0],[0,-4.392],[-4.094,0],[0,4.393],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-574.33,-38.91],[-585.42,-49.99],[-574.33,-61.08],[-563.29,-49.99],[-574.33,-38.91]],"i":[[0,0],[0,6.44],[-6.44,0],[0,-6.439],[6.44,0]],"o":[[-6.44,0],[0,-6.439],[6.44,0],[0,6.44],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-605.41,-39.25],[-605.41,-69.1],[-586.26,-69.1],[-586.26,-65.18],[-600.97,-65.18],[-600.97,-56.26],[-589.08,-56.26],[-589.08,-52.34],[-600.97,-52.34],[-600.97,-39.25],[-605.41,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.35,199.91],"ix":2},"a":{"a":0,"k":[-558.04,-54],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":122,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-37.02,-7.43],[37.02,-7.43],[37.66,-6.79],[37.66,6.79],[37.02,7.43],[-37.02,7.43],[-37.66,6.79],[-37.66,-6.79],[-37.02,-7.43]],"i":[[0,0],[0,0],[0,-0.356],[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0]],"o":[[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0],[0,0],[0,-0.356],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.48,104.52],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":123,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-37.02,-7.43],[37.02,-7.43],[37.66,-6.79],[37.66,6.79],[37.02,7.43],[-37.02,7.43],[-37.66,6.79],[-37.66,-6.79],[-37.02,-7.43]],"i":[[0,0],[0,0],[0,-0.356],[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0]],"o":[[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0],[0,0],[0,-0.356],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.47,76.91],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":124,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,276],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":15,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.5,138],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"Q","layers":[{"ddd":0,"ind":125,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[25.37,25.32],"ix":2},"a":{"a":0,"k":[-407.02,-207.6],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"R","w":50,"h":51,"ind":120,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-432,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":125}]},{"id":"R","layers":[{"ddd":0,"ind":126,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[432,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-422.49,-223.06],[-413.21,-201.41],[-391.55,-192.13],[-400.83,-213.78],[-422.49,-223.06]],"i":[[0,0],[-8.542,-8.529],[-3.418,3.416],[8.542,8.529],[3.418,-3.416]],"o":[[-3.416,3.416],[8.54,8.54],[3.414,-3.416],[-8.54,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-391.56,-223.06],[-413.21,-213.78],[-422.49,-192.13],[-400.83,-201.41],[-391.56,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.529,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.54,8.54],[3.417,3.414],[8.54,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-407.02,-207.6],[-407.02,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"c","layers":[{"ddd":0,"ind":127,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[0,-30.62],[0,30.62]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.53,101.33],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":128,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-22.96,0],[22.96,0]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.54,70.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"S","w":51,"h":51,"ind":129,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[323,21],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":130,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-103.84,-39.25],[-103.84,-69.74],[-99.71,-69.74],[-99.71,-39.25],[-103.84,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-124.98,-52.43],[-112.82,-52.43],[-118.79,-57.76],[-124.98,-52.43]],"i":[[0,0],[0,0],[3.541,0],[0.639,-3.497]],"o":[[0,0],[-0.254,-3.284],[-3.326,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-118.41,-38.91],[-129.16,-50.12],[-118.79,-61.08],[-108.64,-50.89],[-108.73,-49.23],[-125.11,-49.23],[-118.41,-42.45],[-112.61,-46.24],[-108.47,-46.24],[-118.41,-38.91]],"i":[[0,0],[0,5.971],[-6.61,0],[0,-5.458],[0.038,-0.384],[0,0],[-3.712,0],[-0.592,2.431],[0,0],[5.331,0]],"o":[[-6.655,0],[0,-6.013],[6.614,0],[0,0.555],[0,0],[0.341,4.009],[3.155,0],[0,0],[-0.725,4.436],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-143.21,-42.53],[-136.6,-49.99],[-143.21,-57.46],[-149.82,-49.99],[-143.21,-42.53]],"i":[[0,0],[0,4.478],[3.966,0],[0,-4.478],[-3.966,0]],"o":[[3.966,0],[0,-4.478],[-3.966,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-142.57,-38.91],[-149.47,-42.45],[-149.47,-39.25],[-153.61,-39.25],[-153.61,-69.74],[-149.47,-69.74],[-149.47,-57.59],[-142.61,-61.08],[-132.42,-49.99],[-142.57,-38.91]],"i":[[0,0],[1.279,2.133],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.857,0],[0,-6.354],[6.44,0]],"o":[[-2.9,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.322,-2.132],[6.483,0],[0,6.355],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-169.65,-42.19],[-163.46,-48.67],[-163.46,-49.06],[-169.01,-49.06],[-173.66,-45.47],[-169.65,-42.19]],"i":[[0,0],[0,3.966],[0,0],[0,0],[0,-2.26],[-2.431,0]],"o":[[3.881,0],[0,0],[0,0],[-2.815,0],[0,1.962],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-170.46,-38.91],[-177.79,-45.39],[-169.43,-52.26],[-164.91,-52.26],[-163.46,-53.36],[-168.66,-57.76],[-173.95,-53.7],[-177.79,-53.7],[-168.54,-61.08],[-159.37,-53.11],[-159.37,-39.25],[-163.46,-39.25],[-163.46,-42.79],[-170.46,-38.91]],"i":[[0,0],[0,3.838],[-5.032,0],[0,0],[0,0.768],[3.284,0],[0.128,-2.175],[0,0],[-5.118,0],[0,-4.777],[0,0],[0,0],[0,0],[3.241,0]],"o":[[-4.393,0],[0,-4.137],[0,0],[0.981,0],[0,-2.602],[-3.028,0],[0,0],[0.341,-4.222],[5.544,0],[0,0],[0,0],[0,0],[-1.066,2.345],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-199.12,-39.25],[-199.12,-69.1],[-194.69,-69.1],[-194.69,-43.17],[-180.15,-43.17],[-180.15,-39.25],[-199.12,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[346,254],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":131,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":15,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.5,138.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"S","layers":[{"ddd":0,"ind":132,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[23,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"T","w":51,"h":51,"ind":129,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-23,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":132}]},{"id":"T","layers":[{"ddd":0,"ind":133,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[23,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.02,-223.06],[-3.74,-201.41],[17.91,-192.13],[8.62,-213.78],[-13.02,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.543,8.529],[3.416,-3.416]],"o":[[-3.416,3.416],[8.536,8.54],[3.409,-3.416],[-8.537,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[17.9,-223.06],[-3.75,-213.78],[-13.02,-192.13],[8.63,-201.41],[17.9,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.537,8.54],[3.416,3.414],[8.536,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[2.44,-207.6],[2.44,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"d","layers":[{"ddd":0,"ind":24,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":0,"s":[133.24,473.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":104,"s":[507.08,94.91]}],"ix":2},"a":{"a":0,"k":[257,-116],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":134,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":24},{"ddd":0,"refId":"U","w":50,"h":51,"ind":135,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[387,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":134},{"ddd":0,"ind":136,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[305.62,-39.25],[298.46,-46.28],[298.46,-57.16],[294.06,-57.16],[294.06,-60.74],[298.46,-60.74],[298.46,-67.48],[302.59,-67.48],[302.59,-60.74],[308.94,-60.74],[308.94,-57.16],[302.59,-57.16],[302.59,-46.41],[305.92,-42.83],[308.94,-42.83],[308.94,-39.25],[305.62,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.048,0],[0,0],[0,0],[0,0]],"o":[[-4.351,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.52,-38.91],[271.5,-47.52],[271.5,-60.74],[275.64,-60.74],[275.64,-48.33],[280.67,-42.62],[286.47,-49.1],[286.47,-60.74],[290.61,-60.74],[290.61,-39.25],[286.47,-39.25],[286.47,-43.04],[279.52,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.86,0],[0,0],[0,0],[0,0],[0,3.412],[3.371,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[256.3,-42.53],[262.91,-49.99],[256.3,-57.46],[249.69,-49.99],[256.3,-42.53]],"i":[[0,0],[0,4.478],[3.963,0],[0,-4.478],[-3.969,0]],"o":[[3.963,0],[0,-4.478],[-3.969,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[245.9,-30.55],[245.9,-60.74],[250.03,-60.74],[250.03,-57.59],[256.9,-61.08],[267.09,-49.99],[256.94,-38.91],[250.03,-42.45],[250.03,-30.55],[245.9,-30.55]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.862,0],[0,-6.354],[6.444,0],[1.279,2.133],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.323,-2.132],[6.482,0],[0,6.355],[-2.901,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[221.07,-39.25],[221.07,-60.74],[225.21,-60.74],[225.21,-56.95],[232.12,-61.08],[240.14,-52.47],[240.14,-39.25],[236,-39.25],[236,-51.66],[230.97,-57.37],[225.21,-50.89],[225.21,-39.25],[221.07,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[0,-5.118],[0,0],[0,0],[0,0],[3.028,0],[0,-3.752],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.151,-2.687],[4.86,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.365,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[210.34,-39.25],[210.34,-69.1],[214.77,-69.1],[214.77,-39.25],[210.34,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":137,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[234.2,-171.8],[230.37,-171.8],[227.67,-170.68],[226.55,-167.98],[226.55,-137.36],[227.67,-134.65],[230.37,-133.53],[234.2,-133.53]],"i":[[0,0],[0,0],[0.719,-0.718],[0,-1.015],[0,0],[-0.719,-0.718],[-1.011,0],[0,0]],"o":[[0,0],[-1.011,0],[-0.719,0.717],[0,0],[0,1.015],[0.719,0.718],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[264.82,-171.8],[291.61,-171.8],[294.32,-170.68],[295.44,-167.98],[295.44,-137.36],[294.32,-134.65],[291.61,-133.53],[264.82,-133.53]],"i":[[0,0],[0,0],[-0.719,-0.718],[0,-1.015],[0,0],[0.712,-0.718],[1.018,0],[0,0]],"o":[[0,0],[1.018,0],[0.712,0.717],[0,0],[0,1.015],[-0.719,0.718],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-129.7],[246.15,-121.58],[238.03,-118.22]],"i":[[0,0],[2.15,-2.153],[3.041,0]],"o":[[0,3.045],[-2.156,2.154],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-129.7],[252.87,-121.58],[261,-118.22]],"i":[[0,0],[-2.15,-2.153],[-3.047,0]],"o":[[0,3.045],[2.156,2.154],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-175.63],[246.15,-183.75],[238.03,-187.11]],"i":[[0,0],[2.15,2.153],[3.041,0]],"o":[[0,-3.045],[-2.156,-2.153],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-175.63],[249.51,-129.7]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[261,-187.11],[252.87,-183.75],[249.51,-175.63]],"i":[[0,0],[2.156,-2.153],[0,-3.045]],"o":[[-3.047,0],[-2.15,2.153],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":138,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[257,-116],"ix":2},"s":{"a":0,"k":[99,99],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"U","layers":[{"ddd":0,"ind":139,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-387,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[396.44,-223.06],[405.72,-201.41],[427.37,-192.13],[418.09,-213.78],[396.44,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.537,8.529],[3.416,-3.416]],"o":[[-3.416,3.416],[8.536,8.54],[3.41,-3.416],[-8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[427.36,-223.06],[405.72,-213.78],[396.44,-192.13],[418.09,-201.41],[427.36,-223.06]],"i":[[0,0],[8.524,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.543,8.54],[3.416,3.414],[8.537,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[411.9,-207.6],[411.9,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"e","layers":[{"ddd":0,"ind":25,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":-4,"s":[132.4,473.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":100,"s":[506.24,94.91]}],"ix":2},"a":{"a":0,"k":[670.85,-116],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":140,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":25},{"ddd":0,"refId":"V","w":51,"h":51,"ind":141,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[796,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":140},{"ddd":0,"ind":142,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[787.54,-39.25],[787.54,-60.74],[791.68,-60.74],[791.68,-56.95],[798.59,-61.08],[806.6,-52.47],[806.6,-39.25],[802.47,-39.25],[802.47,-51.66],[797.43,-57.37],[791.68,-50.89],[791.68,-39.25],[787.54,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[0,-5.118],[0,0],[0,0],[0,0],[3.028,0],[0,-3.752],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.151,-2.687],[4.86,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.371,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[771.89,-42.53],[778.72,-49.99],[771.89,-57.46],[765.03,-49.99],[771.89,-42.53]],"i":[[0,0],[0,4.393],[4.052,0],[0,-4.392],[-4.09,0]],"o":[[4.052,0],[0,-4.392],[-4.09,0],[0,4.393],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[771.89,-38.91],[760.81,-49.99],[771.89,-61.08],[782.94,-49.99],[771.89,-38.91]],"i":[[0,0],[0,6.44],[-6.437,0],[0,-6.439],[6.444,0]],"o":[[-6.437,0],[0,-6.439],[6.444,0],[0,6.44],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[755.25,-39.25],[748.09,-46.28],[748.09,-57.16],[738.37,-57.16],[738.37,-46.41],[741.69,-42.83],[744.72,-42.83],[744.72,-39.25],[741.39,-39.25],[734.23,-46.28],[734.23,-57.16],[729.84,-57.16],[729.84,-60.74],[734.23,-60.74],[734.23,-67.48],[738.37,-67.48],[738.37,-60.74],[748.09,-60.74],[748.09,-67.48],[752.23,-67.48],[752.23,-60.74],[758.58,-60.74],[758.58,-57.16],[752.23,-57.16],[752.23,-46.41],[755.55,-42.83],[758.58,-42.83],[758.58,-39.25],[755.25,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[-2.042,0],[0,0],[0,0],[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.042,0],[0,0],[0,0],[0,0]],"o":[[-4.345,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[-4.345,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[715.29,-38.91],[707.28,-47.52],[707.28,-60.74],[711.41,-60.74],[711.41,-48.33],[716.45,-42.62],[722.25,-49.1],[722.25,-60.74],[726.38,-60.74],[726.38,-39.25],[722.25,-39.25],[722.25,-43.04],[715.29,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.86,0],[0,0],[0,0],[0,0],[0,3.412],[3.371,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[685.66,-57.03],[692.1,-57.03],[697.22,-61.21],[692.05,-65.39],[685.66,-65.39],[685.66,-57.03]],"i":[[0,0],[0,0],[0,2.772],[3.371,0],[0,0],[0,0]],"o":[[0,0],[3.327,0],[0,-2.73],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[685.66,-43.17],[692.27,-43.17],[698.53,-48.16],[692.27,-53.15],[685.66,-53.15],[685.66,-43.17]],"i":[[0,0],[0,0],[0,3.242],[4.179,0],[0,0],[0,0]],"o":[[0,0],[4.179,0],[0,-3.241],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[681.26,-39.25],[681.26,-69.1],[692.31,-69.1],[701.52,-61.81],[697.68,-55.58],[702.88,-47.95],[692.87,-39.25],[681.26,-39.25]],"i":[[0,0],[0,0],[0,0],[0,-4.478],[2.137,-1.024],[0,-4.137],[6.183,0],[0,0]],"o":[[0,0],[0,0],[5.585,0],[0,3.198],[2.99,1.066],[0,5.373],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[663.6,-39.25],[656.44,-46.28],[656.44,-57.16],[652.04,-57.16],[652.04,-60.74],[656.44,-60.74],[656.44,-67.48],[660.57,-67.48],[660.57,-60.74],[666.92,-60.74],[666.92,-57.16],[660.57,-57.16],[660.57,-46.41],[663.9,-42.83],[666.92,-42.83],[666.92,-39.25],[663.6,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.048,0],[0,0],[0,0],[0,0]],"o":[[-4.351,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[644.18,-69.74],[648.79,-69.74],[648.79,-64.54],[644.18,-64.54],[644.18,-69.74]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[644.44,-39.25],[644.44,-60.74],[648.57,-60.74],[648.57,-39.25],[644.44,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[606.71,-39.25],[606.71,-60.74],[610.84,-60.74],[610.84,-56.95],[617.28,-61.08],[624.15,-56.65],[631.14,-61.08],[638.69,-52.9],[638.69,-39.25],[634.55,-39.25],[634.55,-51.74],[629.99,-57.46],[624.75,-50.98],[624.75,-39.25],[620.61,-39.25],[620.61,-51.74],[616.09,-57.46],[610.84,-50.98],[610.84,-39.25],[606.71,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[-0.852,-2.815],[-3.117,0],[0,-4.99],[0,0],[0,0],[0,0],[2.856,0],[0,-3.411],[0,0],[0,0],[0,0],[2.812,0],[0,-3.411],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.897,-2.431],[3.282,0],[0.897,-2.558],[4.644,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.289,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.282,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[591.2,-42.53],[597.82,-49.99],[591.2,-57.46],[584.59,-49.99],[591.2,-42.53]],"i":[[0,0],[0,4.478],[3.969,0],[0,-4.478],[-3.963,0]],"o":[[3.969,0],[0,-4.478],[-3.963,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[591.85,-38.91],[584.94,-42.45],[584.94,-39.25],[580.8,-39.25],[580.8,-69.74],[584.94,-69.74],[584.94,-57.59],[591.8,-61.08],[602,-49.99],[591.85,-38.91]],"i":[[0,0],[1.279,2.133],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.856,0],[0,-6.354],[6.437,0]],"o":[[-2.901,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.323,-2.132],[6.482,0],[0,6.355],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[563.7,-38.91],[555.68,-47.52],[555.68,-60.74],[559.82,-60.74],[559.82,-48.33],[564.85,-42.62],[570.65,-49.1],[570.65,-60.74],[574.78,-60.74],[574.78,-39.25],[570.65,-39.25],[570.65,-43.04],[563.7,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.866,0],[0,0],[0,0],[0,0],[0,3.412],[3.365,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[540.47,-38.91],[529,-49.14],[533.3,-49.14],[540.47,-42.83],[546.87,-47.52],[529.9,-61.3],[540.13,-69.44],[550.79,-60.44],[546.49,-60.44],[540.13,-65.52],[534.37,-61.34],[551.39,-47.56],[540.47,-38.91]],"i":[[0,0],[0.344,6.184],[0,0],[-4.567,0],[0,3.241],[0,11.216],[-6.011,0],[-0.382,-5.458],[0,0],[3.67,0],[0,-2.558],[0,-11.685],[6.393,0]],"o":[[-7.08,0],[0,0],[0.344,3.838],[3.753,0],[0,-7.463],[0,-4.862],[6.1,0],[0,0],[-0.299,-3.07],[-3.581,0],[0,7.506],[0,5.459],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":143,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[677.09,-136.49],[676.84,-138.96],[678.4,-140.89],[680.87,-141.14],[682.8,-139.58],[684.34,-136.73]],"i":[[0,0],[-0.242,0.824],[-0.757,0.409],[-0.821,-0.246],[-0.407,-0.756],[0,0]],"o":[[-0.407,-0.756],[0.248,-0.824],[0.757,-0.409],[0.827,0.246],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[672.41,-131.51],[670.36,-135.31],[669.99,-136.52],[670.11,-137.78],[670.7,-138.9],[671.67,-139.7],[672.88,-140.08],[674.14,-139.96],[675.26,-139.37],[676.07,-138.39],[678.64,-133.64]],"i":[[0,0],[0,0],[0.045,0.424],[-0.121,0.408],[-0.267,0.331],[-0.375,0.202],[-0.426,0.044],[-0.407,-0.121],[-0.331,-0.268],[-0.204,-0.375],[0,0]],"o":[[0,0],[-0.204,-0.374],[-0.045,-0.424],[0.121,-0.408],[0.267,-0.33],[0.375,-0.203],[0.42,-0.044],[0.407,0.121],[0.331,0.268],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[672.93,-130.56],[665.22,-144.81],[663.29,-146.38],[660.83,-146.12],[659.26,-144.2],[659.51,-141.73],[668.25,-125.57],[663.95,-126.85],[661.33,-126.74],[659.33,-125.04],[658.97,-122.63],[660.39,-120.64],[672.53,-113.13],[673.21,-112.76],[679.36,-111.22],[685.51,-112.79],[685.12,-112.57],[688.92,-114.63],[695.18,-122.33],[694.16,-132.21],[689.53,-140.76],[687.61,-142.33],[685.14,-142.07],[683.57,-140.15],[683.83,-137.68]],"i":[[0,0],[0,0],[0.821,0.246],[0.757,-0.409],[0.242,-0.824],[-0.407,-0.756],[0,0],[0,0],[0.84,-0.328],[0.458,-0.774],[-0.197,-0.821],[-0.712,-0.45],[-1.088,-0.59],[-0.229,-0.123],[-2.144,0.004],[-1.889,1.022],[0,0],[0,0],[-0.986,3.297],[1.635,3.025],[0,0],[0.821,0.245],[0.751,-0.41],[0.242,-0.824],[-0.413,-0.756]],"o":[[0,0],[-0.413,-0.756],[-0.827,-0.246],[-0.757,0.409],[-0.248,0.824],[0,0],[0,0],[-0.859,-0.256],[-0.84,0.328],[-0.432,0.726],[0.197,0.821],[7.01,4.417],[0.223,0.123],[1.889,1.015],[2.15,-0.004],[0,0],[0,0],[3.022,-1.637],[0.98,-3.296],[0,0],[-0.407,-0.756],[-0.827,-0.246],[-0.757,0.409],[-0.248,0.824],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[677.3,-128.87],"ix":2},"a":{"a":0,"k":[677.3,-128.87],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":144,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[695.61,-130.39],[697.27,-130.39],[710.4,-143.51],[710.4,-159.9],[697.27,-173.02],[643.65,-173.02],[630.53,-159.9],[630.53,-143.51],[643.65,-130.39],[663.41,-130.39]],"i":[[0,0],[0,0],[0,7.248],[0,0],[7.245,0],[0,0],[0,-7.248],[0,0],[-7.245,0],[0,0]],"o":[[0,0],[7.245,0],[0,0],[0,-7.248],[0,0],[-7.245,0],[0,0],[0,7.248],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":1,"ml":4},{"ty":"tr","p":{"a":0,"k":[670.46,-151.71],"ix":2},"a":{"a":0,"k":[670.46,-151.71],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":145,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[670.85,-116],"ix":2},"s":{"a":0,"k":[99,99],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"V","layers":[{"ddd":0,"ind":146,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-796,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[805.9,-223.06],[815.18,-201.41],[836.83,-192.13],[827.55,-213.78],[805.9,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.543,8.529],[3.422,-3.416]],"o":[[-3.416,3.416],[8.543,8.54],[3.409,-3.416],[-8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[836.83,-223.06],[815.18,-213.78],[805.9,-192.13],[827.55,-201.41],[836.83,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.543,8.54],[3.416,3.414],[8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[821.36,-207.6],[821.36,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"f","layers":[{"ddd":0,"refId":"W","ind":27,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[147.95,140.95],"ix":2},"a":{"a":0,"k":[653.29,801.29],"ix":2},"s":{"a":1,"k":[{"t":-8,"s":[0,0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":216,"s":[25,25]}],"ix":2},"o":{"a":1,"k":[{"t":592,"s":[100],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":628,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"W","u":"","p":"data:image/png;base64,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YO93u/3hzjnHOOcdFHXTPD/NI1eAqmmhZ8WVD9kQECtfliQEgJASAkBH62PdUgyd0/bacDFTw0TLZkXhzjnHOObNBScsM2NKhx9te61C2urmvASAkBICQEgJASAkBMgLcYEd0Hh4T5hQJmawfHKMtmReHOOcc45tJlHoiT/h/hYRBB8kHfzMahUgJASAkBICQEgJASAZ4FgHk3F49bzoCBWvyxICQEgJASAZn9TgEYhs1RvhmDa70KtuqAgVr8sSAkBH6bGppY78cPfnfLDWzrZkXhzjnHOOcc45xzi4RY1H7kTiS59MAwrFwAOLsyLw5xzjjhgOMogFR2X7Rzm4qxMGJASAkBICQEgJASAkBKLOATd4LQYc9tJJSKV73R9oyqyBICMrOSUCcwGrLZ5brhfUuiFEnOoy2ZF4c45xzjnHOOcc45xzjnHX40lTOgNDdN+b/MHuGoZfg9qPuWbvjI93axj+8Occ45xzjnHOOcc45xzjnHOOcc45xzjnHxZJevyxICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJALgAA/u2oAAAAABRvZe8svGFYehUK/Bkb/o3ZD5Y8qXX/PKuZ8AccPKT3xcqfJG1GK3kEYalY5qthz7z9FU1OaXwbmWgjaVqCrJX2oDvYkW2yKU3uN+Vd6CJf+62r8TpCsj7DW1u3H9MpnPbB8TB9hsDHC67iNHFddxGjiuu4XAWl2kCAJGz2rMnxvfm9up/7ltRiG8+v/5Xv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","w":1307,"h":1067,"e":1}],"layers":[{"ddd":0,"refId":"0","w":225,"h":113,"ind":1,"ty":0,"nm":"lottielab.com","sr":1,"ks":{"p":{"a":0,"k":[35,17],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"1","w":1184,"h":592,"ind":2,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[592,296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":816,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"2","w":296,"h":148,"ind":3,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":716,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"3","w":296,"h":148,"ind":4,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":592,"s":[100],"h":1},{"t":856,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":5,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":176,"s":[22.5,22.5],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":248,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":6,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-137.23,51.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":5},{"ddd":0,"refId":"4","w":346,"h":58,"ind":7,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":6},{"ddd":0,"ind":8,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-255.49,52.06],"ix":2},"a":{"a":0,"k":[25.34,27.62],"ix":2},"s":{"a":1,"k":[{"t":512,"s":[70,70],"i":{"x":[0],"y":[3.063]},"o":{"x":[0],"y":[0]}},{"t":548,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":5},{"ddd":0,"refId":"5","w":107,"h":108,"ind":9,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-32,-32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":8},{"ddd":0,"ind":10,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[111.85,87.11],"ix":2},"s":{"a":1,"k":[{"t":444,"s":[21,21],"i":{"x":[0.288],"y":[1]},"o":{"x":[0.478],"y":[0]}},{"t":460,"s":[26.25,26.25],"i":{"x":[0.629],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":480,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":11,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[7.38,-0.79],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":448,"s":[75,75],"i":{"x":[0.833],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":508,"s":[76,76]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":10},{"ddd":0,"refId":"6","w":343,"h":53,"ind":12,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":11},{"ddd":0,"ind":13,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-110.31,-1.7],"ix":2},"a":{"a":0,"k":[27.34,25.87],"ix":2},"s":{"a":1,"k":[{"t":496,"s":[81,81],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":512,"s":[67,67]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":10},{"ddd":0,"refId":"7","w":92,"h":83,"ind":14,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-25,-15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":13},{"ddd":0,"refId":"8","w":338,"h":237,"ind":15,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":336,"s":[-40.48,107.77],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":408,"s":[77.02,102.77]}],"ix":2},"a":{"a":0,"k":[169,118.5],"ix":2},"s":{"a":1,"k":[{"t":428,"s":[19.75,19.75],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":452,"s":[16.25,16.25]}],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1},{"t":448,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":16,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":176,"s":[22.5,22.5],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":248,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"9","w":563,"h":283,"ind":17,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-282,-203],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":16},{"ddd":0,"ind":18,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"parent":16,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":248,"s":[0,0],"i":{"x":[0.437],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":284,"s":[0,100],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":348,"s":[0,100],"i":{"x":[0],"y":[1]},"o":{"x":[0.517],"y":[0]}},{"t":416,"s":[0,36],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":448,"s":[0,36],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":484,"s":[0,51]}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":19,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"parent":16,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"a","ind":20,"ty":2,"sr":1,"ks":{"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":16},{"ddd":0,"ind":21,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":148,"s":[25,25],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":176,"s":[18.25,18.25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"b","w":395,"h":276,"ind":22,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":16,"s":[-762.81,389.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":136,"s":[-388.97,10.9]}],"ix":2},"a":{"a":0,"k":[197.5,138],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"c","w":395,"h":277,"ind":23,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":8,"s":[-499.64,389.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":124,"s":[-125.81,10.9]}],"ix":2},"a":{"a":0,"k":[197.5,138.5],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":8,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"d","w":640,"h":490,"ind":24,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-371,-84],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"e","w":639,"h":490,"ind":25,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-107,-84],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"ind":26,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":64,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"t":12,"s":[0,0],"i":{"x":[0],"y":[1]},"o":{"x":[0.454],"y":[0]}},{"t":152,"s":[885.4,463.6],"i":{"x":[0],"y":[1]},"o":{"x":[0.34],"y":[0]}},{"t":204,"s":[967.32,506.16]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"st","c":{"a":0,"k":[0.855,0.22,0.891],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","p":{"a":0,"k":[-1.84,-2.42],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[148.46,74.6],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"f","w":296,"h":148,"ind":27,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":36,"s":[100],"h":1},{"t":668,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":28,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[1184,592],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0.965,0.965,0.965],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","a":{"a":0,"k":[-592,-296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]}');
1449
1450 /***/ }),
1451
1452 /***/ "../modules/promotions/assets/js/react/components/atomic-form-promotion-card.js":
1453 /*!**************************************************************************************!*\
1454 !*** ../modules/promotions/assets/js/react/components/atomic-form-promotion-card.js ***!
1455 \**************************************************************************************/
1456 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1457
1458 "use strict";
1459 /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
1460
1461
1462 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1463 var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
1464 Object.defineProperty(exports, "__esModule", ({
1465 value: true
1466 }));
1467 exports["default"] = void 0;
1468 var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
1469 var _lottieReact = _interopRequireDefault(__webpack_require__(/*! lottie-react */ "../node_modules/lottie-react/build/index.umd.js"));
1470 var _icons = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
1471 var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1472 var animationData = _interopRequireWildcard(__webpack_require__(/*! ../assets/atomic-form-animation.json */ "../modules/promotions/assets/js/react/assets/atomic-form-animation.json"));
1473 function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
1474 var AtomicFormPromotionCard = function AtomicFormPromotionCard(props) {
1475 var _props$promotionData;
1476 var _ref = (_props$promotionData = props.promotionData) !== null && _props$promotionData !== void 0 ? _props$promotionData : {},
1477 title = _ref.title,
1478 content = _ref.content,
1479 ctaText = _ref.ctaText;
1480 return /*#__PURE__*/_react.default.createElement(_ui.ClickAwayListener, {
1481 disableReactTree: true,
1482 mouseEvent: "onMouseDown",
1483 touchEvent: "onTouchStart",
1484 onClickAway: props.doClose
1485 }, /*#__PURE__*/_react.default.createElement(_ui.Box, {
1486 sx: {
1487 width: 296
1488 }
1489 }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
1490 direction: "row",
1491 alignItems: "center",
1492 py: 1,
1493 px: 2
1494 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
1495 variant: "subtitle2"
1496 }, title), /*#__PURE__*/_react.default.createElement(_ui.CloseButton, {
1497 edge: "end",
1498 sx: {
1499 ml: 'auto'
1500 },
1501 slotProps: {
1502 icon: {
1503 fontSize: 'small'
1504 }
1505 },
1506 onClick: props.doClose
1507 })), /*#__PURE__*/_react.default.createElement(_ui.Box, {
1508 sx: {
1509 height: 150,
1510 width: '100%',
1511 overflow: 'hidden'
1512 }
1513 }, /*#__PURE__*/_react.default.createElement(_lottieReact.default, {
1514 animationData: animationData,
1515 loop: true,
1516 autoplay: true,
1517 rendererSettings: {
1518 preserveAspectRatio: 'xMidYMid slice'
1519 },
1520 style: {
1521 width: '100%',
1522 height: '100%'
1523 }
1524 })), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
1525 px: 2
1526 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
1527 variant: "body2",
1528 color: "secondary",
1529 sx: {
1530 pt: 1.5,
1531 pb: 1
1532 }
1533 }, content)), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
1534 direction: "row",
1535 pt: 1,
1536 pb: 1.5,
1537 px: 2
1538 }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
1539 variant: "contained",
1540 size: "small",
1541 color: "promotion",
1542 startIcon: /*#__PURE__*/_react.default.createElement(_icons.CrownFilledIcon, null),
1543 href: props.ctaUrl,
1544 target: "_blank",
1545 rel: "noopener noreferrer"
1546 }, ctaText))));
1547 };
1548 AtomicFormPromotionCard.propTypes = {
1549 doClose: PropTypes.func,
1550 promotionData: PropTypes.object,
1551 ctaUrl: PropTypes.string
1552 };
1553 var _default = exports["default"] = AtomicFormPromotionCard;
1554
1555 /***/ }),
1556
1557 /***/ "../modules/promotions/assets/js/react/components/promotion-card.js":
1558 /*!**************************************************************************!*\
1559 !*** ../modules/promotions/assets/js/react/components/promotion-card.js ***!
1560 \**************************************************************************/
1561 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1562
1563 "use strict";
1564 /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
1565
1566
1567 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1568 Object.defineProperty(exports, "__esModule", ({
1569 value: true
1570 }));
1571 exports["default"] = void 0;
1572 var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
1573 var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
1574 var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1575 var PromotionCard = function PromotionCard(_ref) {
1576 var doClose = _ref.doClose,
1577 promotionsData = _ref.promotionsData;
1578 var title = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.title,
1579 description = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.description,
1580 imgSrc = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.image,
1581 imgAlt = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.image_alt,
1582 ctaText = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.upgrade_text,
1583 ctaUrl = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.upgrade_url;
1584 var redirectHandler = function redirectHandler() {
1585 window.open(ctaUrl, '_blank');
1586 return doClose();
1587 };
1588 return /*#__PURE__*/_react.default.createElement(_ui.ClickAwayListener, {
1589 disableReactTree: true,
1590 mouseEvent: "onMouseDown",
1591 touchEvent: "onTouchStart",
1592 onClickAway: doClose
1593 }, /*#__PURE__*/_react.default.createElement(_ui.Box, {
1594 sx: {
1595 width: 296
1596 },
1597 "data-testid": "e-promotion-card"
1598 }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
1599 direction: "row",
1600 alignItems: "center",
1601 py: 1,
1602 px: 2
1603 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
1604 variant: "subtitle2"
1605 }, title), /*#__PURE__*/_react.default.createElement(_ui.Chip, {
1606 label: (0, _i18n.__)('PRO', 'elementor'),
1607 size: "small",
1608 variant: "outlined",
1609 color: "promotion",
1610 sx: {
1611 ml: 1
1612 }
1613 }), /*#__PURE__*/_react.default.createElement(_ui.CloseButton, {
1614 edge: "end",
1615 sx: {
1616 ml: 'auto'
1617 },
1618 slotProps: {
1619 icon: {
1620 fontSize: 'small'
1621 }
1622 },
1623 onClick: doClose
1624 })), /*#__PURE__*/_react.default.createElement(_ui.Image, {
1625 src: imgSrc,
1626 alt: imgAlt,
1627 sx: {
1628 height: 150,
1629 width: '100%'
1630 }
1631 }), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
1632 px: 2
1633 }, 1 === description.length ? /*#__PURE__*/_react.default.createElement(_ui.Typography, {
1634 variant: "body2",
1635 color: "secondary",
1636 sx: {
1637 pt: 1.5,
1638 pb: 1
1639 }
1640 }, description[0]) : /*#__PURE__*/_react.default.createElement(_ui.List, {
1641 sx: {
1642 pl: 2
1643 }
1644 }, description.map(function (text, index) {
1645 return /*#__PURE__*/_react.default.createElement(_ui.ListItem, {
1646 key: index,
1647 sx: {
1648 listStyle: 'disc',
1649 display: 'list-item',
1650 color: 'text.secondary',
1651 p: 0
1652 }
1653 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
1654 variant: "body2",
1655 color: "secondary"
1656 }, text));
1657 }))), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
1658 pt: 1,
1659 pb: 1.5,
1660 px: 2
1661 }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
1662 variant: "contained",
1663 size: "small",
1664 color: "promotion",
1665 onClick: redirectHandler,
1666 sx: {
1667 ml: 'auto'
1668 }
1669 }, ctaText))));
1670 };
1671 PromotionCard.propTypes = {
1672 doClose: PropTypes.func,
1673 promotionsData: PropTypes.object
1674 };
1675 var _default = exports["default"] = PromotionCard;
1676
1677 /***/ }),
1678
1679 /***/ "../modules/promotions/assets/js/react/controls/promotion.js":
1680 /*!*******************************************************************!*\
1681 !*** ../modules/promotions/assets/js/react/controls/promotion.js ***!
1682 \*******************************************************************/
1683 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1684
1685 "use strict";
1686
1687
1688 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1689 Object.defineProperty(exports, "__esModule", ({
1690 value: true
1691 }));
1692 exports["default"] = void 0;
1693 var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
1694 var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
1695 var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
1696 var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
1697 var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
1698 var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
1699 var _baseData = _interopRequireDefault(__webpack_require__(/*! elementor-controls/base-data */ "../assets/dev/js/editor/controls/base-data.js"));
1700 var _appManager = __webpack_require__(/*! ../app-manager */ "../modules/promotions/assets/js/react/app-manager.js");
1701 function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
1702 function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
1703 var _default = exports["default"] = /*#__PURE__*/function (_ControlBaseDataView) {
1704 function _default(options) {
1705 var _this;
1706 (0, _classCallCheck2.default)(this, _default);
1707 _this = _callSuper(this, _default, [options]);
1708 (0, _defineProperty2.default)(_this, "promotionInfoTip", null);
1709 (0, _defineProperty2.default)(_this, "selectors", {
1710 wrapperElement: '.elementor-control-type-switcher',
1711 reactAnchor: '.e-promotion-react-wrapper'
1712 });
1713 _this.AppManager = new _appManager.AppManager();
1714 return _this;
1715 }
1716 (0, _inherits2.default)(_default, _ControlBaseDataView);
1717 return (0, _createClass2.default)(_default, [{
1718 key: "ui",
1719 value: function ui() {
1720 return {
1721 switcher: '[data-promotion].elementor-control-type-switcher'
1722 };
1723 }
1724 }, {
1725 key: "events",
1726 value: function events() {
1727 return {
1728 'click @ui.switcher': 'onClickControlSwitcher'
1729 };
1730 }
1731 }, {
1732 key: "promotionData",
1733 value: function promotionData(promotionType) {
1734 return elementorPromotionsData[promotionType] || {};
1735 }
1736 }, {
1737 key: "onClickControlSwitcher",
1738 value: function onClickControlSwitcher(event) {
1739 event.stopPropagation();
1740 this.AppManager.mount(event.target, this.selectors);
1741 }
1742 }]);
1743 }(_baseData.default);
1744
1745 /***/ }),
1746
1747 /***/ "../modules/promotions/assets/js/react/module.js":
1748 /*!*******************************************************!*\
1749 !*** ../modules/promotions/assets/js/react/module.js ***!
1750 \*******************************************************/
1751 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1752
1753 "use strict";
1754
1755
1756 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1757 Object.defineProperty(exports, "__esModule", ({
1758 value: true
1759 }));
1760 exports["default"] = void 0;
1761 var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
1762 var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
1763 var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
1764 var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
1765 var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
1766 var _appManager = __webpack_require__(/*! ./app-manager */ "../modules/promotions/assets/js/react/app-manager.js");
1767 var _promotion = _interopRequireDefault(__webpack_require__(/*! ./controls/promotion */ "../modules/promotions/assets/js/react/controls/promotion.js"));
1768 function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
1769 function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
1770 var Module = exports["default"] = /*#__PURE__*/function (_elementorModules$edi) {
1771 function Module() {
1772 (0, _classCallCheck2.default)(this, Module);
1773 return _callSuper(this, Module, arguments);
1774 }
1775 (0, _inherits2.default)(Module, _elementorModules$edi);
1776 return (0, _createClass2.default)(Module, [{
1777 key: "onElementorInit",
1778 value: function onElementorInit() {
1779 elementor.addControlView('promotion_control', _promotion.default);
1780 new _appManager.AppManager();
1781 }
1782 }]);
1783 }(elementorModules.editor.utils.Module);
1784
1785 /***/ }),
1786
1787 /***/ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
1788 /*!******************************************************************!*\
1789 !*** ../node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
1790 \******************************************************************/
1791 /***/ ((module) => {
1792
1793 function _arrayLikeToArray(r, a) {
1794 (null == a || a > r.length) && (a = r.length);
1795 for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
1796 return n;
1797 }
1798 module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
1799
1800 /***/ }),
1801
1802 /***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js":
1803 /*!****************************************************************!*\
1804 !*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
1805 \****************************************************************/
1806 /***/ ((module) => {
1807
1808 function _arrayWithHoles(r) {
1809 if (Array.isArray(r)) return r;
1810 }
1811 module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
1812
1813 /***/ }),
1814
1815 /***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js":
1816 /*!***********************************************************************!*\
1817 !*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
1818 \***********************************************************************/
1819 /***/ ((module) => {
1820
1821 function _assertThisInitialized(e) {
1822 if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
1823 return e;
1824 }
1825 module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;
1826
1827 /***/ }),
1828
1829 /***/ "../node_modules/@babel/runtime/helpers/classCallCheck.js":
1830 /*!****************************************************************!*\
1831 !*** ../node_modules/@babel/runtime/helpers/classCallCheck.js ***!
1832 \****************************************************************/
1833 /***/ ((module) => {
1834
1835 function _classCallCheck(a, n) {
1836 if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
1837 }
1838 module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
1839
1840 /***/ }),
1841
1842 /***/ "../node_modules/@babel/runtime/helpers/createClass.js":
1843 /*!*************************************************************!*\
1844 !*** ../node_modules/@babel/runtime/helpers/createClass.js ***!
1845 \*************************************************************/
1846 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1847
1848 var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
1849 function _defineProperties(e, r) {
1850 for (var t = 0; t < r.length; t++) {
1851 var o = r[t];
1852 o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);
1853 }
1854 }
1855 function _createClass(e, r, t) {
1856 return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
1857 writable: !1
1858 }), e;
1859 }
1860 module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
1861
1862 /***/ }),
1863
1864 /***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
1865 /*!****************************************************************!*\
1866 !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
1867 \****************************************************************/
1868 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1869
1870 var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
1871 function _defineProperty(e, r, t) {
1872 return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
1873 value: t,
1874 enumerable: !0,
1875 configurable: !0,
1876 writable: !0
1877 }) : e[r] = t, e;
1878 }
1879 module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
1880
1881 /***/ }),
1882
1883 /***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js":
1884 /*!****************************************************************!*\
1885 !*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
1886 \****************************************************************/
1887 /***/ ((module) => {
1888
1889 function _getPrototypeOf(t) {
1890 return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
1891 return t.__proto__ || Object.getPrototypeOf(t);
1892 }, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t);
1893 }
1894 module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
1895
1896 /***/ }),
1897
1898 /***/ "../node_modules/@babel/runtime/helpers/inherits.js":
1899 /*!**********************************************************!*\
1900 !*** ../node_modules/@babel/runtime/helpers/inherits.js ***!
1901 \**********************************************************/
1902 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1903
1904 var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js");
1905 function _inherits(t, e) {
1906 if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
1907 t.prototype = Object.create(e && e.prototype, {
1908 constructor: {
1909 value: t,
1910 writable: !0,
1911 configurable: !0
1912 }
1913 }), Object.defineProperty(t, "prototype", {
1914 writable: !1
1915 }), e && setPrototypeOf(t, e);
1916 }
1917 module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;
1918
1919 /***/ }),
1920
1921 /***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
1922 /*!***********************************************************************!*\
1923 !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
1924 \***********************************************************************/
1925 /***/ ((module) => {
1926
1927 function _interopRequireDefault(e) {
1928 return e && e.__esModule ? e : {
1929 "default": e
1930 };
1931 }
1932 module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
1933
1934 /***/ }),
1935
1936 /***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
1937 /*!**********************************************************************!*\
1938 !*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
1939 \**********************************************************************/
1940 /***/ ((module) => {
1941
1942 function _iterableToArrayLimit(r, l) {
1943 var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
1944 if (null != t) {
1945 var e,
1946 n,
1947 i,
1948 u,
1949 a = [],
1950 f = !0,
1951 o = !1;
1952 try {
1953 if (i = (t = t.call(r)).next, 0 === l) {
1954 if (Object(t) !== t) return;
1955 f = !1;
1956 } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
1957 } catch (r) {
1958 o = !0, n = r;
1959 } finally {
1960 try {
1961 if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
1962 } finally {
1963 if (o) throw n;
1964 }
1965 }
1966 return a;
1967 }
1968 }
1969 module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports;
1970
1971 /***/ }),
1972
1973 /***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js":
1974 /*!*****************************************************************!*\
1975 !*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
1976 \*****************************************************************/
1977 /***/ ((module) => {
1978
1979 function _nonIterableRest() {
1980 throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1981 }
1982 module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports;
1983
1984 /***/ }),
1985
1986 /***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
1987 /*!***************************************************************************!*\
1988 !*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
1989 \***************************************************************************/
1990 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1991
1992 var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
1993 var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
1994 function _possibleConstructorReturn(t, e) {
1995 if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
1996 if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
1997 return assertThisInitialized(t);
1998 }
1999 module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;
2000
2001 /***/ }),
2002
2003 /***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js":
2004 /*!****************************************************************!*\
2005 !*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
2006 \****************************************************************/
2007 /***/ ((module) => {
2008
2009 function _setPrototypeOf(t, e) {
2010 return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
2011 return t.__proto__ = e, t;
2012 }, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e);
2013 }
2014 module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
2015
2016 /***/ }),
2017
2018 /***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js":
2019 /*!***************************************************************!*\
2020 !*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***!
2021 \***************************************************************/
2022 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2023
2024 var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js");
2025 var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");
2026 var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
2027 var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js");
2028 function _slicedToArray(r, e) {
2029 return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
2030 }
2031 module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
2032
2033 /***/ }),
2034
2035 /***/ "../node_modules/@babel/runtime/helpers/toPrimitive.js":
2036 /*!*************************************************************!*\
2037 !*** ../node_modules/@babel/runtime/helpers/toPrimitive.js ***!
2038 \*************************************************************/
2039 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2040
2041 var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
2042 function toPrimitive(t, r) {
2043 if ("object" != _typeof(t) || !t) return t;
2044 var e = t[Symbol.toPrimitive];
2045 if (void 0 !== e) {
2046 var i = e.call(t, r || "default");
2047 if ("object" != _typeof(i)) return i;
2048 throw new TypeError("@@toPrimitive must return a primitive value.");
2049 }
2050 return ("string" === r ? String : Number)(t);
2051 }
2052 module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
2053
2054 /***/ }),
2055
2056 /***/ "../node_modules/@babel/runtime/helpers/toPropertyKey.js":
2057 /*!***************************************************************!*\
2058 !*** ../node_modules/@babel/runtime/helpers/toPropertyKey.js ***!
2059 \***************************************************************/
2060 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2061
2062 var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
2063 var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "../node_modules/@babel/runtime/helpers/toPrimitive.js");
2064 function toPropertyKey(t) {
2065 var i = toPrimitive(t, "string");
2066 return "symbol" == _typeof(i) ? i : i + "";
2067 }
2068 module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
2069
2070 /***/ }),
2071
2072 /***/ "../node_modules/@babel/runtime/helpers/typeof.js":
2073 /*!********************************************************!*\
2074 !*** ../node_modules/@babel/runtime/helpers/typeof.js ***!
2075 \********************************************************/
2076 /***/ ((module) => {
2077
2078 function _typeof(o) {
2079 "@babel/helpers - typeof";
2080
2081 return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
2082 return typeof o;
2083 } : function (o) {
2084 return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
2085 }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
2086 }
2087 module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
2088
2089 /***/ }),
2090
2091 /***/ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
2092 /*!****************************************************************************!*\
2093 !*** ../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
2094 \****************************************************************************/
2095 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2096
2097 var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
2098 function _unsupportedIterableToArray(r, a) {
2099 if (r) {
2100 if ("string" == typeof r) return arrayLikeToArray(r, a);
2101 var t = {}.toString.call(r).slice(8, -1);
2102 return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
2103 }
2104 }
2105 module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
2106
2107 /***/ }),
2108
2109 /***/ "../node_modules/lottie-react/build/index.umd.js":
2110 /*!*******************************************************!*\
2111 !*** ../node_modules/lottie-react/build/index.umd.js ***!
2112 \*******************************************************/
2113 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
2114
2115 (function (global, factory) {
2116 true ? factory(exports, __webpack_require__(/*! lottie-web */ "../node_modules/lottie-web/build/player/lottie.js"), __webpack_require__(/*! react */ "react")) :
2117 0;
2118 })(this, (function (exports, lottie, React) { 'use strict';
2119
2120 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
2121
2122 var lottie__default = /*#__PURE__*/_interopDefaultLegacy(lottie);
2123 var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
2124
2125 function _arrayLikeToArray(r, a) {
2126 (null == a || a > r.length) && (a = r.length);
2127 for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
2128 return n;
2129 }
2130 function _arrayWithHoles(r) {
2131 if (Array.isArray(r)) return r;
2132 }
2133 function _defineProperty(e, r, t) {
2134 return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
2135 value: t,
2136 enumerable: !0,
2137 configurable: !0,
2138 writable: !0
2139 }) : e[r] = t, e;
2140 }
2141 function _iterableToArrayLimit(r, l) {
2142 var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
2143 if (null != t) {
2144 var e,
2145 n,
2146 i,
2147 u,
2148 a = [],
2149 f = !0,
2150 o = !1;
2151 try {
2152 if (i = (t = t.call(r)).next, 0 === l) {
2153 if (Object(t) !== t) return;
2154 f = !1;
2155 } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
2156 } catch (r) {
2157 o = !0, n = r;
2158 } finally {
2159 try {
2160 if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
2161 } finally {
2162 if (o) throw n;
2163 }
2164 }
2165 return a;
2166 }
2167 }
2168 function _nonIterableRest() {
2169 throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2170 }
2171 function ownKeys(e, r) {
2172 var t = Object.keys(e);
2173 if (Object.getOwnPropertySymbols) {
2174 var o = Object.getOwnPropertySymbols(e);
2175 r && (o = o.filter(function (r) {
2176 return Object.getOwnPropertyDescriptor(e, r).enumerable;
2177 })), t.push.apply(t, o);
2178 }
2179 return t;
2180 }
2181 function _objectSpread2(e) {
2182 for (var r = 1; r < arguments.length; r++) {
2183 var t = null != arguments[r] ? arguments[r] : {};
2184 r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
2185 _defineProperty(e, r, t[r]);
2186 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
2187 Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
2188 });
2189 }
2190 return e;
2191 }
2192 function _objectWithoutProperties(e, t) {
2193 if (null == e) return {};
2194 var o,
2195 r,
2196 i = _objectWithoutPropertiesLoose(e, t);
2197 if (Object.getOwnPropertySymbols) {
2198 var s = Object.getOwnPropertySymbols(e);
2199 for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
2200 }
2201 return i;
2202 }
2203 function _objectWithoutPropertiesLoose(r, e) {
2204 if (null == r) return {};
2205 var t = {};
2206 for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
2207 if (e.includes(n)) continue;
2208 t[n] = r[n];
2209 }
2210 return t;
2211 }
2212 function _slicedToArray(r, e) {
2213 return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
2214 }
2215 function _toPrimitive(t, r) {
2216 if ("object" != typeof t || !t) return t;
2217 var e = t[Symbol.toPrimitive];
2218 if (void 0 !== e) {
2219 var i = e.call(t, r || "default");
2220 if ("object" != typeof i) return i;
2221 throw new TypeError("@@toPrimitive must return a primitive value.");
2222 }
2223 return ("string" === r ? String : Number)(t);
2224 }
2225 function _toPropertyKey(t) {
2226 var i = _toPrimitive(t, "string");
2227 return "symbol" == typeof i ? i : i + "";
2228 }
2229 function _unsupportedIterableToArray(r, a) {
2230 if (r) {
2231 if ("string" == typeof r) return _arrayLikeToArray(r, a);
2232 var t = {}.toString.call(r).slice(8, -1);
2233 return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
2234 }
2235 }
2236
2237 var _excluded$1 = ["animationData", "loop", "autoplay", "initialSegment", "onComplete", "onLoopComplete", "onEnterFrame", "onSegmentStart", "onConfigReady", "onDataReady", "onDataFailed", "onLoadedImages", "onDOMLoaded", "onDestroy", "lottieRef", "renderer", "name", "assetsPath", "rendererSettings"];
2238 var useLottie = function useLottie(props, style) {
2239 var animationData = props.animationData,
2240 loop = props.loop,
2241 autoplay = props.autoplay,
2242 initialSegment = props.initialSegment,
2243 onComplete = props.onComplete,
2244 onLoopComplete = props.onLoopComplete,
2245 onEnterFrame = props.onEnterFrame,
2246 onSegmentStart = props.onSegmentStart,
2247 onConfigReady = props.onConfigReady,
2248 onDataReady = props.onDataReady,
2249 onDataFailed = props.onDataFailed,
2250 onLoadedImages = props.onLoadedImages,
2251 onDOMLoaded = props.onDOMLoaded,
2252 onDestroy = props.onDestroy;
2253 props.lottieRef;
2254 props.renderer;
2255 props.name;
2256 props.assetsPath;
2257 props.rendererSettings;
2258 var rest = _objectWithoutProperties(props, _excluded$1);
2259 var _useState = React.useState(false),
2260 _useState2 = _slicedToArray(_useState, 2),
2261 animationLoaded = _useState2[0],
2262 setAnimationLoaded = _useState2[1];
2263 var animationInstanceRef = React.useRef();
2264 var animationContainer = React.useRef(null);
2265 /*
2266 ======================================
2267 INTERACTION METHODS
2268 ======================================
2269 */
2270 /**
2271 * Play
2272 */
2273 var play = function play() {
2274 var _a;
2275 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.play();
2276 };
2277 /**
2278 * Stop
2279 */
2280 var stop = function stop() {
2281 var _a;
2282 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.stop();
2283 };
2284 /**
2285 * Pause
2286 */
2287 var pause = function pause() {
2288 var _a;
2289 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.pause();
2290 };
2291 /**
2292 * Set animation speed
2293 * @param speed
2294 */
2295 var setSpeed = function setSpeed(speed) {
2296 var _a;
2297 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSpeed(speed);
2298 };
2299 /**
2300 * Got to frame and play
2301 * @param value
2302 * @param isFrame
2303 */
2304 var goToAndPlay = function goToAndPlay(value, isFrame) {
2305 var _a;
2306 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndPlay(value, isFrame);
2307 };
2308 /**
2309 * Got to frame and stop
2310 * @param value
2311 * @param isFrame
2312 */
2313 var goToAndStop = function goToAndStop(value, isFrame) {
2314 var _a;
2315 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndStop(value, isFrame);
2316 };
2317 /**
2318 * Set animation direction
2319 * @param direction
2320 */
2321 var setDirection = function setDirection(direction) {
2322 var _a;
2323 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setDirection(direction);
2324 };
2325 /**
2326 * Play animation segments
2327 * @param segments
2328 * @param forceFlag
2329 */
2330 var playSegments = function playSegments(segments, forceFlag) {
2331 var _a;
2332 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.playSegments(segments, forceFlag);
2333 };
2334 /**
2335 * Set sub frames
2336 * @param useSubFrames
2337 */
2338 var setSubframe = function setSubframe(useSubFrames) {
2339 var _a;
2340 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSubframe(useSubFrames);
2341 };
2342 /**
2343 * Get animation duration
2344 * @param inFrames
2345 */
2346 var getDuration = function getDuration(inFrames) {
2347 var _a;
2348 return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames);
2349 };
2350 /**
2351 * Destroy animation
2352 */
2353 var destroy = function destroy() {
2354 var _a;
2355 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();
2356 // Removing the reference to the animation so separate cleanups are skipped.
2357 // Without it the internal `lottie-react` instance throws exceptions as it already cleared itself on destroy.
2358 animationInstanceRef.current = undefined;
2359 };
2360 /*
2361 ======================================
2362 LOTTIE
2363 ======================================
2364 */
2365 /**
2366 * Load a new animation, and if it's the case, destroy the previous one
2367 * @param {Object} forcedConfigs
2368 */
2369 var loadAnimation = function loadAnimation() {
2370 var forcedConfigs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2371 var _a;
2372 // Return if the container ref is null
2373 if (!animationContainer.current) {
2374 return;
2375 }
2376 // Destroy any previous instance
2377 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();
2378 // Build the animation configuration
2379 var config = _objectSpread2(_objectSpread2(_objectSpread2({}, props), forcedConfigs), {}, {
2380 container: animationContainer.current
2381 });
2382 // Save the animation instance
2383 animationInstanceRef.current = lottie__default["default"].loadAnimation(config);
2384 setAnimationLoaded(!!animationInstanceRef.current);
2385 // Return a function that will clean up
2386 return function () {
2387 var _a;
2388 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();
2389 animationInstanceRef.current = undefined;
2390 };
2391 };
2392 /**
2393 * (Re)Initialize when animation data changed
2394 */
2395 React.useEffect(function () {
2396 var onUnmount = loadAnimation();
2397 // Clean up on unmount
2398 return function () {
2399 return onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount();
2400 };
2401 // eslint-disable-next-line react-hooks/exhaustive-deps
2402 }, [animationData, loop]);
2403 // Update the autoplay state
2404 React.useEffect(function () {
2405 if (!animationInstanceRef.current) {
2406 return;
2407 }
2408 animationInstanceRef.current.autoplay = !!autoplay;
2409 }, [autoplay]);
2410 // Update the initial segment state
2411 React.useEffect(function () {
2412 if (!animationInstanceRef.current) {
2413 return;
2414 }
2415 // When null should reset to default animation length
2416 if (!initialSegment) {
2417 animationInstanceRef.current.resetSegments(true);
2418 return;
2419 }
2420 // If it's not a valid segment, do nothing
2421 if (!Array.isArray(initialSegment) || !initialSegment.length) {
2422 return;
2423 }
2424 // If the current position it's not in the new segment
2425 // set the current position to start
2426 if (animationInstanceRef.current.currentRawFrame < initialSegment[0] || animationInstanceRef.current.currentRawFrame > initialSegment[1]) {
2427 animationInstanceRef.current.currentRawFrame = initialSegment[0];
2428 }
2429 // Update the segment
2430 animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]);
2431 }, [initialSegment]);
2432 /*
2433 ======================================
2434 EVENTS
2435 ======================================
2436 */
2437 /**
2438 * Reinitialize listener on change
2439 */
2440 React.useEffect(function () {
2441 var partialListeners = [{
2442 name: "complete",
2443 handler: onComplete
2444 }, {
2445 name: "loopComplete",
2446 handler: onLoopComplete
2447 }, {
2448 name: "enterFrame",
2449 handler: onEnterFrame
2450 }, {
2451 name: "segmentStart",
2452 handler: onSegmentStart
2453 }, {
2454 name: "config_ready",
2455 handler: onConfigReady
2456 }, {
2457 name: "data_ready",
2458 handler: onDataReady
2459 }, {
2460 name: "data_failed",
2461 handler: onDataFailed
2462 }, {
2463 name: "loaded_images",
2464 handler: onLoadedImages
2465 }, {
2466 name: "DOMLoaded",
2467 handler: onDOMLoaded
2468 }, {
2469 name: "destroy",
2470 handler: onDestroy
2471 }];
2472 var listeners = partialListeners.filter(function (listener) {
2473 return listener.handler != null;
2474 });
2475 if (!listeners.length) {
2476 return;
2477 }
2478 var deregisterList = listeners.map(
2479 /**
2480 * Handle the process of adding an event listener
2481 * @param {Listener} listener
2482 * @return {Function} Function that deregister the listener
2483 */
2484 function (listener) {
2485 var _a;
2486 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener(listener.name, listener.handler);
2487 // Return a function to deregister this listener
2488 return function () {
2489 var _a;
2490 (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(listener.name, listener.handler);
2491 };
2492 });
2493 // Deregister listeners on unmount
2494 return function () {
2495 deregisterList.forEach(function (deregister) {
2496 return deregister();
2497 });
2498 };
2499 }, [onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy]);
2500 /**
2501 * Build the animation view
2502 */
2503 var View = /*#__PURE__*/React__default["default"].createElement("div", _objectSpread2({
2504 style: style,
2505 ref: animationContainer
2506 }, rest));
2507 return {
2508 View: View,
2509 play: play,
2510 stop: stop,
2511 pause: pause,
2512 setSpeed: setSpeed,
2513 goToAndStop: goToAndStop,
2514 goToAndPlay: goToAndPlay,
2515 setDirection: setDirection,
2516 playSegments: playSegments,
2517 setSubframe: setSubframe,
2518 getDuration: getDuration,
2519 destroy: destroy,
2520 animationContainerRef: animationContainer,
2521 animationLoaded: animationLoaded,
2522 animationItem: animationInstanceRef.current
2523 };
2524 };
2525
2526 // helpers
2527 function getContainerVisibility(container) {
2528 var _container$getBoundin = container.getBoundingClientRect(),
2529 top = _container$getBoundin.top,
2530 height = _container$getBoundin.height;
2531 var current = window.innerHeight - top;
2532 var max = window.innerHeight + height;
2533 return current / max;
2534 }
2535 function getContainerCursorPosition(container, cursorX, cursorY) {
2536 var _container$getBoundin2 = container.getBoundingClientRect(),
2537 top = _container$getBoundin2.top,
2538 left = _container$getBoundin2.left,
2539 width = _container$getBoundin2.width,
2540 height = _container$getBoundin2.height;
2541 var x = (cursorX - left) / width;
2542 var y = (cursorY - top) / height;
2543 return {
2544 x: x,
2545 y: y
2546 };
2547 }
2548 var useInitInteractivity = function useInitInteractivity(_ref) {
2549 var wrapperRef = _ref.wrapperRef,
2550 animationItem = _ref.animationItem,
2551 mode = _ref.mode,
2552 actions = _ref.actions;
2553 React.useEffect(function () {
2554 var wrapper = wrapperRef.current;
2555 if (!wrapper || !animationItem || !actions.length) {
2556 return;
2557 }
2558 animationItem.stop();
2559 var scrollModeHandler = function scrollModeHandler() {
2560 var assignedSegment = null;
2561 var scrollHandler = function scrollHandler() {
2562 var currentPercent = getContainerVisibility(wrapper);
2563 // Find the first action that satisfies the current position conditions
2564 var action = actions.find(function (_ref2) {
2565 var visibility = _ref2.visibility;
2566 return visibility && currentPercent >= visibility[0] && currentPercent <= visibility[1];
2567 });
2568 // Skip if no matching action was found!
2569 if (!action) {
2570 return;
2571 }
2572 if (action.type === "seek" && action.visibility && action.frames.length === 2) {
2573 // Seek: Go to a frame based on player scroll position action
2574 var frameToGo = action.frames[0] + Math.ceil((currentPercent - action.visibility[0]) / (action.visibility[1] - action.visibility[0]) * action.frames[1]);
2575 //! goToAndStop must be relative to the start of the current segment
2576 animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true);
2577 }
2578 if (action.type === "loop") {
2579 // Loop: Loop a given frames
2580 if (assignedSegment === null) {
2581 // if not playing any segments currently. play those segments and save to state
2582 animationItem.playSegments(action.frames, true);
2583 assignedSegment = action.frames;
2584 } else {
2585 // if playing any segments currently.
2586 //check if segments in state are equal to the frames selected by action
2587 if (assignedSegment !== action.frames) {
2588 // if they are not equal. new segments are to be loaded
2589 animationItem.playSegments(action.frames, true);
2590 assignedSegment = action.frames;
2591 } else if (animationItem.isPaused) {
2592 // if they are equal the play method must be called only if lottie is paused
2593 animationItem.playSegments(action.frames, true);
2594 assignedSegment = action.frames;
2595 }
2596 }
2597 }
2598 if (action.type === "play" && animationItem.isPaused) {
2599 // Play: Reset segments and continue playing full animation from current position
2600 animationItem.resetSegments(true);
2601 animationItem.play();
2602 }
2603 if (action.type === "stop") {
2604 // Stop: Stop playback
2605 animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true);
2606 }
2607 };
2608 document.addEventListener("scroll", scrollHandler);
2609 return function () {
2610 document.removeEventListener("scroll", scrollHandler);
2611 };
2612 };
2613 var cursorModeHandler = function cursorModeHandler() {
2614 var handleCursor = function handleCursor(_x, _y) {
2615 var x = _x;
2616 var y = _y;
2617 // Resolve cursor position if cursor is inside container
2618 if (x !== -1 && y !== -1) {
2619 // Get container cursor position
2620 var pos = getContainerCursorPosition(wrapper, x, y);
2621 // Use the resolved position
2622 x = pos.x;
2623 y = pos.y;
2624 }
2625 // Find the first action that satisfies the current position conditions
2626 var action = actions.find(function (_ref3) {
2627 var position = _ref3.position;
2628 if (position && Array.isArray(position.x) && Array.isArray(position.y)) {
2629 return x >= position.x[0] && x <= position.x[1] && y >= position.y[0] && y <= position.y[1];
2630 }
2631 if (position && !Number.isNaN(position.x) && !Number.isNaN(position.y)) {
2632 return x === position.x && y === position.y;
2633 }
2634 return false;
2635 });
2636 // Skip if no matching action was found!
2637 if (!action) {
2638 return;
2639 }
2640 // Process action types:
2641 if (action.type === "seek" && action.position && Array.isArray(action.position.x) && Array.isArray(action.position.y) && action.frames.length === 2) {
2642 // Seek: Go to a frame based on player scroll position action
2643 var xPercent = (x - action.position.x[0]) / (action.position.x[1] - action.position.x[0]);
2644 var yPercent = (y - action.position.y[0]) / (action.position.y[1] - action.position.y[0]);
2645 animationItem.playSegments(action.frames, true);
2646 animationItem.goToAndStop(Math.ceil((xPercent + yPercent) / 2 * (action.frames[1] - action.frames[0])), true);
2647 }
2648 if (action.type === "loop") {
2649 animationItem.playSegments(action.frames, true);
2650 }
2651 if (action.type === "play") {
2652 // Play: Reset segments and continue playing full animation from current position
2653 if (animationItem.isPaused) {
2654 animationItem.resetSegments(false);
2655 }
2656 animationItem.playSegments(action.frames);
2657 }
2658 if (action.type === "stop") {
2659 animationItem.goToAndStop(action.frames[0], true);
2660 }
2661 };
2662 var mouseMoveHandler = function mouseMoveHandler(ev) {
2663 handleCursor(ev.clientX, ev.clientY);
2664 };
2665 var mouseOutHandler = function mouseOutHandler() {
2666 handleCursor(-1, -1);
2667 };
2668 wrapper.addEventListener("mousemove", mouseMoveHandler);
2669 wrapper.addEventListener("mouseout", mouseOutHandler);
2670 return function () {
2671 wrapper.removeEventListener("mousemove", mouseMoveHandler);
2672 wrapper.removeEventListener("mouseout", mouseOutHandler);
2673 };
2674 };
2675 switch (mode) {
2676 case "scroll":
2677 return scrollModeHandler();
2678 case "cursor":
2679 return cursorModeHandler();
2680 }
2681 // eslint-disable-next-line react-hooks/exhaustive-deps
2682 }, [mode, animationItem]);
2683 };
2684 var useLottieInteractivity = function useLottieInteractivity(_ref4) {
2685 var actions = _ref4.actions,
2686 mode = _ref4.mode,
2687 lottieObj = _ref4.lottieObj;
2688 var animationItem = lottieObj.animationItem,
2689 View = lottieObj.View,
2690 animationContainerRef = lottieObj.animationContainerRef;
2691 useInitInteractivity({
2692 actions: actions,
2693 animationItem: animationItem,
2694 mode: mode,
2695 wrapperRef: animationContainerRef
2696 });
2697 return View;
2698 };
2699
2700 var _excluded = ["style", "interactivity"];
2701 var Lottie = function Lottie(props) {
2702 var _a, _b, _c;
2703 var style = props.style,
2704 interactivity = props.interactivity,
2705 lottieProps = _objectWithoutProperties(props, _excluded);
2706 /**
2707 * Initialize the 'useLottie' hook
2708 */
2709 var _useLottie = useLottie(lottieProps, style),
2710 View = _useLottie.View,
2711 play = _useLottie.play,
2712 stop = _useLottie.stop,
2713 pause = _useLottie.pause,
2714 setSpeed = _useLottie.setSpeed,
2715 goToAndStop = _useLottie.goToAndStop,
2716 goToAndPlay = _useLottie.goToAndPlay,
2717 setDirection = _useLottie.setDirection,
2718 playSegments = _useLottie.playSegments,
2719 setSubframe = _useLottie.setSubframe,
2720 getDuration = _useLottie.getDuration,
2721 destroy = _useLottie.destroy,
2722 animationContainerRef = _useLottie.animationContainerRef,
2723 animationLoaded = _useLottie.animationLoaded,
2724 animationItem = _useLottie.animationItem;
2725 /**
2726 * Make the hook variables/methods available through the provided 'lottieRef'
2727 */
2728 React.useEffect(function () {
2729 if (props.lottieRef) {
2730 props.lottieRef.current = {
2731 play: play,
2732 stop: stop,
2733 pause: pause,
2734 setSpeed: setSpeed,
2735 goToAndPlay: goToAndPlay,
2736 goToAndStop: goToAndStop,
2737 setDirection: setDirection,
2738 playSegments: playSegments,
2739 setSubframe: setSubframe,
2740 getDuration: getDuration,
2741 destroy: destroy,
2742 animationContainerRef: animationContainerRef,
2743 animationLoaded: animationLoaded,
2744 animationItem: animationItem
2745 };
2746 }
2747 // eslint-disable-next-line react-hooks/exhaustive-deps
2748 }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]);
2749 return useLottieInteractivity({
2750 lottieObj: {
2751 View: View,
2752 play: play,
2753 stop: stop,
2754 pause: pause,
2755 setSpeed: setSpeed,
2756 goToAndStop: goToAndStop,
2757 goToAndPlay: goToAndPlay,
2758 setDirection: setDirection,
2759 playSegments: playSegments,
2760 setSubframe: setSubframe,
2761 getDuration: getDuration,
2762 destroy: destroy,
2763 animationContainerRef: animationContainerRef,
2764 animationLoaded: animationLoaded,
2765 animationItem: animationItem
2766 },
2767 actions: (_b = interactivity === null || interactivity === void 0 ? void 0 : interactivity.actions) !== null && _b !== void 0 ? _b : [],
2768 mode: (_c = interactivity === null || interactivity === void 0 ? void 0 : interactivity.mode) !== null && _c !== void 0 ? _c : "scroll"
2769 });
2770 };
2771
2772 Object.defineProperty(exports, 'LottiePlayer', {
2773 enumerable: true,
2774 get: function () { return lottie__default["default"]; }
2775 });
2776 exports["default"] = Lottie;
2777 exports.useLottie = useLottie;
2778 exports.useLottieInteractivity = useLottieInteractivity;
2779
2780 Object.defineProperty(exports, '__esModule', { value: true });
2781
2782 }));
2783 //# sourceMappingURL=index.umd.js.map
2784
2785
2786 /***/ }),
2787
2788 /***/ "../node_modules/lottie-web/build/player/lottie.js":
2789 /*!*********************************************************!*\
2790 !*** ../node_modules/lottie-web/build/player/lottie.js ***!
2791 \*********************************************************/
2792 /***/ (function(module, exports, __webpack_require__) {
2793
2794 (typeof document !== "undefined") && (typeof navigator !== "undefined") && (function (global, factory) {
2795 true ? module.exports = factory() :
2796 0;
2797 })(this, (function () { 'use strict';
2798
2799 var svgNS = 'http://www.w3.org/2000/svg';
2800 var locationHref = '';
2801 var _useWebWorker = false;
2802 var initialDefaultFrame = -999999;
2803 var setWebWorker = function setWebWorker(flag) {
2804 _useWebWorker = !!flag;
2805 };
2806 var getWebWorker = function getWebWorker() {
2807 return _useWebWorker;
2808 };
2809 var setLocationHref = function setLocationHref(value) {
2810 locationHref = value;
2811 };
2812 var getLocationHref = function getLocationHref() {
2813 return locationHref;
2814 };
2815
2816 function createTag(type) {
2817 // return {appendChild:function(){},setAttribute:function(){},style:{}}
2818 return document.createElement(type);
2819 }
2820
2821 function extendPrototype(sources, destination) {
2822 var i;
2823 var len = sources.length;
2824 var sourcePrototype;
2825 for (i = 0; i < len; i += 1) {
2826 sourcePrototype = sources[i].prototype;
2827 for (var attr in sourcePrototype) {
2828 if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];
2829 }
2830 }
2831 }
2832 function getDescriptor(object, prop) {
2833 return Object.getOwnPropertyDescriptor(object, prop);
2834 }
2835 function createProxyFunction(prototype) {
2836 function ProxyFunction() {}
2837 ProxyFunction.prototype = prototype;
2838 return ProxyFunction;
2839 }
2840
2841 // import Howl from '../../3rd_party/howler';
2842
2843 var audioControllerFactory = function () {
2844 function AudioController(audioFactory) {
2845 this.audios = [];
2846 this.audioFactory = audioFactory;
2847 this._volume = 1;
2848 this._isMuted = false;
2849 }
2850 AudioController.prototype = {
2851 addAudio: function addAudio(audio) {
2852 this.audios.push(audio);
2853 },
2854 pause: function pause() {
2855 var i;
2856 var len = this.audios.length;
2857 for (i = 0; i < len; i += 1) {
2858 this.audios[i].pause();
2859 }
2860 },
2861 resume: function resume() {
2862 var i;
2863 var len = this.audios.length;
2864 for (i = 0; i < len; i += 1) {
2865 this.audios[i].resume();
2866 }
2867 },
2868 setRate: function setRate(rateValue) {
2869 var i;
2870 var len = this.audios.length;
2871 for (i = 0; i < len; i += 1) {
2872 this.audios[i].setRate(rateValue);
2873 }
2874 },
2875 createAudio: function createAudio(assetPath) {
2876 if (this.audioFactory) {
2877 return this.audioFactory(assetPath);
2878 }
2879 if (window.Howl) {
2880 return new window.Howl({
2881 src: [assetPath]
2882 });
2883 }
2884 return {
2885 isPlaying: false,
2886 play: function play() {
2887 this.isPlaying = true;
2888 },
2889 seek: function seek() {
2890 this.isPlaying = false;
2891 },
2892 playing: function playing() {},
2893 rate: function rate() {},
2894 setVolume: function setVolume() {}
2895 };
2896 },
2897 setAudioFactory: function setAudioFactory(audioFactory) {
2898 this.audioFactory = audioFactory;
2899 },
2900 setVolume: function setVolume(value) {
2901 this._volume = value;
2902 this._updateVolume();
2903 },
2904 mute: function mute() {
2905 this._isMuted = true;
2906 this._updateVolume();
2907 },
2908 unmute: function unmute() {
2909 this._isMuted = false;
2910 this._updateVolume();
2911 },
2912 getVolume: function getVolume() {
2913 return this._volume;
2914 },
2915 _updateVolume: function _updateVolume() {
2916 var i;
2917 var len = this.audios.length;
2918 for (i = 0; i < len; i += 1) {
2919 this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));
2920 }
2921 }
2922 };
2923 return function () {
2924 return new AudioController();
2925 };
2926 }();
2927
2928 var createTypedArray = function () {
2929 function createRegularArray(type, len) {
2930 var i = 0;
2931 var arr = [];
2932 var value;
2933 switch (type) {
2934 case 'int16':
2935 case 'uint8c':
2936 value = 1;
2937 break;
2938 default:
2939 value = 1.1;
2940 break;
2941 }
2942 for (i = 0; i < len; i += 1) {
2943 arr.push(value);
2944 }
2945 return arr;
2946 }
2947 function createTypedArrayFactory(type, len) {
2948 if (type === 'float32') {
2949 return new Float32Array(len);
2950 }
2951 if (type === 'int16') {
2952 return new Int16Array(len);
2953 }
2954 if (type === 'uint8c') {
2955 return new Uint8ClampedArray(len);
2956 }
2957 return createRegularArray(type, len);
2958 }
2959 if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {
2960 return createTypedArrayFactory;
2961 }
2962 return createRegularArray;
2963 }();
2964 function createSizedArray(len) {
2965 return Array.apply(null, {
2966 length: len
2967 });
2968 }
2969
2970 function _typeof$6(o) { "@babel/helpers - typeof"; return _typeof$6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$6(o); }
2971 var subframeEnabled = true;
2972 var expressionsPlugin = null;
2973 var expressionsInterfaces = null;
2974 var idPrefix$1 = '';
2975 var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
2976 var _shouldRoundValues = false;
2977 var bmPow = Math.pow;
2978 var bmSqrt = Math.sqrt;
2979 var bmFloor = Math.floor;
2980 var bmMax = Math.max;
2981 var bmMin = Math.min;
2982 var BMMath = {};
2983 (function () {
2984 var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];
2985 var i;
2986 var len = propertyNames.length;
2987 for (i = 0; i < len; i += 1) {
2988 BMMath[propertyNames[i]] = Math[propertyNames[i]];
2989 }
2990 })();
2991 function ProjectInterface$1() {
2992 return {};
2993 }
2994 BMMath.random = Math.random;
2995 BMMath.abs = function (val) {
2996 var tOfVal = _typeof$6(val);
2997 if (tOfVal === 'object' && val.length) {
2998 var absArr = createSizedArray(val.length);
2999 var i;
3000 var len = val.length;
3001 for (i = 0; i < len; i += 1) {
3002 absArr[i] = Math.abs(val[i]);
3003 }
3004 return absArr;
3005 }
3006 return Math.abs(val);
3007 };
3008 var defaultCurveSegments = 150;
3009 var degToRads = Math.PI / 180;
3010 var roundCorner = 0.5519;
3011 function roundValues(flag) {
3012 _shouldRoundValues = !!flag;
3013 }
3014 function bmRnd(value) {
3015 if (_shouldRoundValues) {
3016 return Math.round(value);
3017 }
3018 return value;
3019 }
3020 function styleDiv(element) {
3021 element.style.position = 'absolute';
3022 element.style.top = 0;
3023 element.style.left = 0;
3024 element.style.display = 'block';
3025 element.style.transformOrigin = '0 0';
3026 element.style.webkitTransformOrigin = '0 0';
3027 element.style.backfaceVisibility = 'visible';
3028 element.style.webkitBackfaceVisibility = 'visible';
3029 element.style.transformStyle = 'preserve-3d';
3030 element.style.webkitTransformStyle = 'preserve-3d';
3031 element.style.mozTransformStyle = 'preserve-3d';
3032 }
3033 function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {
3034 this.type = type;
3035 this.currentTime = currentTime;
3036 this.totalTime = totalTime;
3037 this.direction = frameMultiplier < 0 ? -1 : 1;
3038 }
3039 function BMCompleteEvent(type, frameMultiplier) {
3040 this.type = type;
3041 this.direction = frameMultiplier < 0 ? -1 : 1;
3042 }
3043 function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {
3044 this.type = type;
3045 this.currentLoop = currentLoop;
3046 this.totalLoops = totalLoops;
3047 this.direction = frameMultiplier < 0 ? -1 : 1;
3048 }
3049 function BMSegmentStartEvent(type, firstFrame, totalFrames) {
3050 this.type = type;
3051 this.firstFrame = firstFrame;
3052 this.totalFrames = totalFrames;
3053 }
3054 function BMDestroyEvent(type, target) {
3055 this.type = type;
3056 this.target = target;
3057 }
3058 function BMRenderFrameErrorEvent(nativeError, currentTime) {
3059 this.type = 'renderFrameError';
3060 this.nativeError = nativeError;
3061 this.currentTime = currentTime;
3062 }
3063 function BMConfigErrorEvent(nativeError) {
3064 this.type = 'configError';
3065 this.nativeError = nativeError;
3066 }
3067 function BMAnimationConfigErrorEvent(type, nativeError) {
3068 this.type = type;
3069 this.nativeError = nativeError;
3070 }
3071 var createElementID = function () {
3072 var _count = 0;
3073 return function createID() {
3074 _count += 1;
3075 return idPrefix$1 + '__lottie_element_' + _count;
3076 };
3077 }();
3078 function HSVtoRGB(h, s, v) {
3079 var r;
3080 var g;
3081 var b;
3082 var i;
3083 var f;
3084 var p;
3085 var q;
3086 var t;
3087 i = Math.floor(h * 6);
3088 f = h * 6 - i;
3089 p = v * (1 - s);
3090 q = v * (1 - f * s);
3091 t = v * (1 - (1 - f) * s);
3092 switch (i % 6) {
3093 case 0:
3094 r = v;
3095 g = t;
3096 b = p;
3097 break;
3098 case 1:
3099 r = q;
3100 g = v;
3101 b = p;
3102 break;
3103 case 2:
3104 r = p;
3105 g = v;
3106 b = t;
3107 break;
3108 case 3:
3109 r = p;
3110 g = q;
3111 b = v;
3112 break;
3113 case 4:
3114 r = t;
3115 g = p;
3116 b = v;
3117 break;
3118 case 5:
3119 r = v;
3120 g = p;
3121 b = q;
3122 break;
3123 default:
3124 break;
3125 }
3126 return [r, g, b];
3127 }
3128 function RGBtoHSV(r, g, b) {
3129 var max = Math.max(r, g, b);
3130 var min = Math.min(r, g, b);
3131 var d = max - min;
3132 var h;
3133 var s = max === 0 ? 0 : d / max;
3134 var v = max / 255;
3135 switch (max) {
3136 case min:
3137 h = 0;
3138 break;
3139 case r:
3140 h = g - b + d * (g < b ? 6 : 0);
3141 h /= 6 * d;
3142 break;
3143 case g:
3144 h = b - r + d * 2;
3145 h /= 6 * d;
3146 break;
3147 case b:
3148 h = r - g + d * 4;
3149 h /= 6 * d;
3150 break;
3151 default:
3152 break;
3153 }
3154 return [h, s, v];
3155 }
3156 function addSaturationToRGB(color, offset) {
3157 var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
3158 hsv[1] += offset;
3159 if (hsv[1] > 1) {
3160 hsv[1] = 1;
3161 } else if (hsv[1] <= 0) {
3162 hsv[1] = 0;
3163 }
3164 return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
3165 }
3166 function addBrightnessToRGB(color, offset) {
3167 var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
3168 hsv[2] += offset;
3169 if (hsv[2] > 1) {
3170 hsv[2] = 1;
3171 } else if (hsv[2] < 0) {
3172 hsv[2] = 0;
3173 }
3174 return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
3175 }
3176 function addHueToRGB(color, offset) {
3177 var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
3178 hsv[0] += offset / 360;
3179 if (hsv[0] > 1) {
3180 hsv[0] -= 1;
3181 } else if (hsv[0] < 0) {
3182 hsv[0] += 1;
3183 }
3184 return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
3185 }
3186 var rgbToHex = function () {
3187 var colorMap = [];
3188 var i;
3189 var hex;
3190 for (i = 0; i < 256; i += 1) {
3191 hex = i.toString(16);
3192 colorMap[i] = hex.length === 1 ? '0' + hex : hex;
3193 }
3194 return function (r, g, b) {
3195 if (r < 0) {
3196 r = 0;
3197 }
3198 if (g < 0) {
3199 g = 0;
3200 }
3201 if (b < 0) {
3202 b = 0;
3203 }
3204 return '#' + colorMap[r] + colorMap[g] + colorMap[b];
3205 };
3206 }();
3207 var setSubframeEnabled = function setSubframeEnabled(flag) {
3208 subframeEnabled = !!flag;
3209 };
3210 var getSubframeEnabled = function getSubframeEnabled() {
3211 return subframeEnabled;
3212 };
3213 var setExpressionsPlugin = function setExpressionsPlugin(value) {
3214 expressionsPlugin = value;
3215 };
3216 var getExpressionsPlugin = function getExpressionsPlugin() {
3217 return expressionsPlugin;
3218 };
3219 var setExpressionInterfaces = function setExpressionInterfaces(value) {
3220 expressionsInterfaces = value;
3221 };
3222 var getExpressionInterfaces = function getExpressionInterfaces() {
3223 return expressionsInterfaces;
3224 };
3225 var setDefaultCurveSegments = function setDefaultCurveSegments(value) {
3226 defaultCurveSegments = value;
3227 };
3228 var getDefaultCurveSegments = function getDefaultCurveSegments() {
3229 return defaultCurveSegments;
3230 };
3231 var setIdPrefix = function setIdPrefix(value) {
3232 idPrefix$1 = value;
3233 };
3234 var getIdPrefix = function getIdPrefix() {
3235 return idPrefix$1;
3236 };
3237
3238 function createNS(type) {
3239 // return {appendChild:function(){},setAttribute:function(){},style:{}}
3240 return document.createElementNS(svgNS, type);
3241 }
3242
3243 function _typeof$5(o) { "@babel/helpers - typeof"; return _typeof$5 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$5(o); }
3244 var dataManager = function () {
3245 var _counterId = 1;
3246 var processes = [];
3247 var workerFn;
3248 var workerInstance;
3249 var workerProxy = {
3250 onmessage: function onmessage() {},
3251 postMessage: function postMessage(path) {
3252 workerFn({
3253 data: path
3254 });
3255 }
3256 };
3257 var _workerSelf = {
3258 postMessage: function postMessage(data) {
3259 workerProxy.onmessage({
3260 data: data
3261 });
3262 }
3263 };
3264 function createWorker(fn) {
3265 if (window.Worker && window.Blob && getWebWorker()) {
3266 var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {
3267 type: 'text/javascript'
3268 });
3269 // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });
3270 var url = URL.createObjectURL(blob);
3271 return new Worker(url);
3272 }
3273 workerFn = fn;
3274 return workerProxy;
3275 }
3276 function setupWorker() {
3277 if (!workerInstance) {
3278 workerInstance = createWorker(function workerStart(e) {
3279 function dataFunctionManager() {
3280 function completeLayers(layers, comps) {
3281 var layerData;
3282 var i;
3283 var len = layers.length;
3284 var j;
3285 var jLen;
3286 var k;
3287 var kLen;
3288 for (i = 0; i < len; i += 1) {
3289 layerData = layers[i];
3290 if ('ks' in layerData && !layerData.completed) {
3291 layerData.completed = true;
3292 if (layerData.hasMask) {
3293 var maskProps = layerData.masksProperties;
3294 jLen = maskProps.length;
3295 for (j = 0; j < jLen; j += 1) {
3296 if (maskProps[j].pt.k.i) {
3297 convertPathsToAbsoluteValues(maskProps[j].pt.k);
3298 } else {
3299 kLen = maskProps[j].pt.k.length;
3300 for (k = 0; k < kLen; k += 1) {
3301 if (maskProps[j].pt.k[k].s) {
3302 convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);
3303 }
3304 if (maskProps[j].pt.k[k].e) {
3305 convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);
3306 }
3307 }
3308 }
3309 }
3310 }
3311 if (layerData.ty === 0) {
3312 layerData.layers = findCompLayers(layerData.refId, comps);
3313 completeLayers(layerData.layers, comps);
3314 } else if (layerData.ty === 4) {
3315 completeShapes(layerData.shapes);
3316 } else if (layerData.ty === 5) {
3317 completeText(layerData);
3318 }
3319 }
3320 }
3321 }
3322 function completeChars(chars, assets) {
3323 if (chars) {
3324 var i = 0;
3325 var len = chars.length;
3326 for (i = 0; i < len; i += 1) {
3327 if (chars[i].t === 1) {
3328 // var compData = findComp(chars[i].data.refId, assets);
3329 chars[i].data.layers = findCompLayers(chars[i].data.refId, assets);
3330 // chars[i].data.ip = 0;
3331 // chars[i].data.op = 99999;
3332 // chars[i].data.st = 0;
3333 // chars[i].data.sr = 1;
3334 // chars[i].w = compData.w;
3335 // chars[i].data.ks = {
3336 // a: { k: [0, 0, 0], a: 0 },
3337 // p: { k: [0, -compData.h, 0], a: 0 },
3338 // r: { k: 0, a: 0 },
3339 // s: { k: [100, 100], a: 0 },
3340 // o: { k: 100, a: 0 },
3341 // };
3342 completeLayers(chars[i].data.layers, assets);
3343 }
3344 }
3345 }
3346 }
3347 function findComp(id, comps) {
3348 var i = 0;
3349 var len = comps.length;
3350 while (i < len) {
3351 if (comps[i].id === id) {
3352 return comps[i];
3353 }
3354 i += 1;
3355 }
3356 return null;
3357 }
3358 function findCompLayers(id, comps) {
3359 var comp = findComp(id, comps);
3360 if (comp) {
3361 if (!comp.layers.__used) {
3362 comp.layers.__used = true;
3363 return comp.layers;
3364 }
3365 return JSON.parse(JSON.stringify(comp.layers));
3366 }
3367 return null;
3368 }
3369 function completeShapes(arr) {
3370 var i;
3371 var len = arr.length;
3372 var j;
3373 var jLen;
3374 for (i = len - 1; i >= 0; i -= 1) {
3375 if (arr[i].ty === 'sh') {
3376 if (arr[i].ks.k.i) {
3377 convertPathsToAbsoluteValues(arr[i].ks.k);
3378 } else {
3379 jLen = arr[i].ks.k.length;
3380 for (j = 0; j < jLen; j += 1) {
3381 if (arr[i].ks.k[j].s) {
3382 convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);
3383 }
3384 if (arr[i].ks.k[j].e) {
3385 convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);
3386 }
3387 }
3388 }
3389 } else if (arr[i].ty === 'gr') {
3390 completeShapes(arr[i].it);
3391 }
3392 }
3393 }
3394 function convertPathsToAbsoluteValues(path) {
3395 var i;
3396 var len = path.i.length;
3397 for (i = 0; i < len; i += 1) {
3398 path.i[i][0] += path.v[i][0];
3399 path.i[i][1] += path.v[i][1];
3400 path.o[i][0] += path.v[i][0];
3401 path.o[i][1] += path.v[i][1];
3402 }
3403 }
3404 function checkVersion(minimum, animVersionString) {
3405 var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];
3406 if (minimum[0] > animVersion[0]) {
3407 return true;
3408 }
3409 if (animVersion[0] > minimum[0]) {
3410 return false;
3411 }
3412 if (minimum[1] > animVersion[1]) {
3413 return true;
3414 }
3415 if (animVersion[1] > minimum[1]) {
3416 return false;
3417 }
3418 if (minimum[2] > animVersion[2]) {
3419 return true;
3420 }
3421 if (animVersion[2] > minimum[2]) {
3422 return false;
3423 }
3424 return null;
3425 }
3426 var checkText = function () {
3427 var minimumVersion = [4, 4, 14];
3428 function updateTextLayer(textLayer) {
3429 var documentData = textLayer.t.d;
3430 textLayer.t.d = {
3431 k: [{
3432 s: documentData,
3433 t: 0
3434 }]
3435 };
3436 }
3437 function iterateLayers(layers) {
3438 var i;
3439 var len = layers.length;
3440 for (i = 0; i < len; i += 1) {
3441 if (layers[i].ty === 5) {
3442 updateTextLayer(layers[i]);
3443 }
3444 }
3445 }
3446 return function (animationData) {
3447 if (checkVersion(minimumVersion, animationData.v)) {
3448 iterateLayers(animationData.layers);
3449 if (animationData.assets) {
3450 var i;
3451 var len = animationData.assets.length;
3452 for (i = 0; i < len; i += 1) {
3453 if (animationData.assets[i].layers) {
3454 iterateLayers(animationData.assets[i].layers);
3455 }
3456 }
3457 }
3458 }
3459 };
3460 }();
3461 var checkChars = function () {
3462 var minimumVersion = [4, 7, 99];
3463 return function (animationData) {
3464 if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {
3465 var i;
3466 var len = animationData.chars.length;
3467 for (i = 0; i < len; i += 1) {
3468 var charData = animationData.chars[i];
3469 if (charData.data && charData.data.shapes) {
3470 completeShapes(charData.data.shapes);
3471 charData.data.ip = 0;
3472 charData.data.op = 99999;
3473 charData.data.st = 0;
3474 charData.data.sr = 1;
3475 charData.data.ks = {
3476 p: {
3477 k: [0, 0],
3478 a: 0
3479 },
3480 s: {
3481 k: [100, 100],
3482 a: 0
3483 },
3484 a: {
3485 k: [0, 0],
3486 a: 0
3487 },
3488 r: {
3489 k: 0,
3490 a: 0
3491 },
3492 o: {
3493 k: 100,
3494 a: 0
3495 }
3496 };
3497 if (!animationData.chars[i].t) {
3498 charData.data.shapes.push({
3499 ty: 'no'
3500 });
3501 charData.data.shapes[0].it.push({
3502 p: {
3503 k: [0, 0],
3504 a: 0
3505 },
3506 s: {
3507 k: [100, 100],
3508 a: 0
3509 },
3510 a: {
3511 k: [0, 0],
3512 a: 0
3513 },
3514 r: {
3515 k: 0,
3516 a: 0
3517 },
3518 o: {
3519 k: 100,
3520 a: 0
3521 },
3522 sk: {
3523 k: 0,
3524 a: 0
3525 },
3526 sa: {
3527 k: 0,
3528 a: 0
3529 },
3530 ty: 'tr'
3531 });
3532 }
3533 }
3534 }
3535 }
3536 };
3537 }();
3538 var checkPathProperties = function () {
3539 var minimumVersion = [5, 7, 15];
3540 function updateTextLayer(textLayer) {
3541 var pathData = textLayer.t.p;
3542 if (typeof pathData.a === 'number') {
3543 pathData.a = {
3544 a: 0,
3545 k: pathData.a
3546 };
3547 }
3548 if (typeof pathData.p === 'number') {
3549 pathData.p = {
3550 a: 0,
3551 k: pathData.p
3552 };
3553 }
3554 if (typeof pathData.r === 'number') {
3555 pathData.r = {
3556 a: 0,
3557 k: pathData.r
3558 };
3559 }
3560 }
3561 function iterateLayers(layers) {
3562 var i;
3563 var len = layers.length;
3564 for (i = 0; i < len; i += 1) {
3565 if (layers[i].ty === 5) {
3566 updateTextLayer(layers[i]);
3567 }
3568 }
3569 }
3570 return function (animationData) {
3571 if (checkVersion(minimumVersion, animationData.v)) {
3572 iterateLayers(animationData.layers);
3573 if (animationData.assets) {
3574 var i;
3575 var len = animationData.assets.length;
3576 for (i = 0; i < len; i += 1) {
3577 if (animationData.assets[i].layers) {
3578 iterateLayers(animationData.assets[i].layers);
3579 }
3580 }
3581 }
3582 }
3583 };
3584 }();
3585 var checkColors = function () {
3586 var minimumVersion = [4, 1, 9];
3587 function iterateShapes(shapes) {
3588 var i;
3589 var len = shapes.length;
3590 var j;
3591 var jLen;
3592 for (i = 0; i < len; i += 1) {
3593 if (shapes[i].ty === 'gr') {
3594 iterateShapes(shapes[i].it);
3595 } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {
3596 if (shapes[i].c.k && shapes[i].c.k[0].i) {
3597 jLen = shapes[i].c.k.length;
3598 for (j = 0; j < jLen; j += 1) {
3599 if (shapes[i].c.k[j].s) {
3600 shapes[i].c.k[j].s[0] /= 255;
3601 shapes[i].c.k[j].s[1] /= 255;
3602 shapes[i].c.k[j].s[2] /= 255;
3603 shapes[i].c.k[j].s[3] /= 255;
3604 }
3605 if (shapes[i].c.k[j].e) {
3606 shapes[i].c.k[j].e[0] /= 255;
3607 shapes[i].c.k[j].e[1] /= 255;
3608 shapes[i].c.k[j].e[2] /= 255;
3609 shapes[i].c.k[j].e[3] /= 255;
3610 }
3611 }
3612 } else {
3613 shapes[i].c.k[0] /= 255;
3614 shapes[i].c.k[1] /= 255;
3615 shapes[i].c.k[2] /= 255;
3616 shapes[i].c.k[3] /= 255;
3617 }
3618 }
3619 }
3620 }
3621 function iterateLayers(layers) {
3622 var i;
3623 var len = layers.length;
3624 for (i = 0; i < len; i += 1) {
3625 if (layers[i].ty === 4) {
3626 iterateShapes(layers[i].shapes);
3627 }
3628 }
3629 }
3630 return function (animationData) {
3631 if (checkVersion(minimumVersion, animationData.v)) {
3632 iterateLayers(animationData.layers);
3633 if (animationData.assets) {
3634 var i;
3635 var len = animationData.assets.length;
3636 for (i = 0; i < len; i += 1) {
3637 if (animationData.assets[i].layers) {
3638 iterateLayers(animationData.assets[i].layers);
3639 }
3640 }
3641 }
3642 }
3643 };
3644 }();
3645 var checkShapes = function () {
3646 var minimumVersion = [4, 4, 18];
3647 function completeClosingShapes(arr) {
3648 var i;
3649 var len = arr.length;
3650 var j;
3651 var jLen;
3652 for (i = len - 1; i >= 0; i -= 1) {
3653 if (arr[i].ty === 'sh') {
3654 if (arr[i].ks.k.i) {
3655 arr[i].ks.k.c = arr[i].closed;
3656 } else {
3657 jLen = arr[i].ks.k.length;
3658 for (j = 0; j < jLen; j += 1) {
3659 if (arr[i].ks.k[j].s) {
3660 arr[i].ks.k[j].s[0].c = arr[i].closed;
3661 }
3662 if (arr[i].ks.k[j].e) {
3663 arr[i].ks.k[j].e[0].c = arr[i].closed;
3664 }
3665 }
3666 }
3667 } else if (arr[i].ty === 'gr') {
3668 completeClosingShapes(arr[i].it);
3669 }
3670 }
3671 }
3672 function iterateLayers(layers) {
3673 var layerData;
3674 var i;
3675 var len = layers.length;
3676 var j;
3677 var jLen;
3678 var k;
3679 var kLen;
3680 for (i = 0; i < len; i += 1) {
3681 layerData = layers[i];
3682 if (layerData.hasMask) {
3683 var maskProps = layerData.masksProperties;
3684 jLen = maskProps.length;
3685 for (j = 0; j < jLen; j += 1) {
3686 if (maskProps[j].pt.k.i) {
3687 maskProps[j].pt.k.c = maskProps[j].cl;
3688 } else {
3689 kLen = maskProps[j].pt.k.length;
3690 for (k = 0; k < kLen; k += 1) {
3691 if (maskProps[j].pt.k[k].s) {
3692 maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;
3693 }
3694 if (maskProps[j].pt.k[k].e) {
3695 maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;
3696 }
3697 }
3698 }
3699 }
3700 }
3701 if (layerData.ty === 4) {
3702 completeClosingShapes(layerData.shapes);
3703 }
3704 }
3705 }
3706 return function (animationData) {
3707 if (checkVersion(minimumVersion, animationData.v)) {
3708 iterateLayers(animationData.layers);
3709 if (animationData.assets) {
3710 var i;
3711 var len = animationData.assets.length;
3712 for (i = 0; i < len; i += 1) {
3713 if (animationData.assets[i].layers) {
3714 iterateLayers(animationData.assets[i].layers);
3715 }
3716 }
3717 }
3718 }
3719 };
3720 }();
3721 function completeData(animationData) {
3722 if (animationData.__complete) {
3723 return;
3724 }
3725 checkColors(animationData);
3726 checkText(animationData);
3727 checkChars(animationData);
3728 checkPathProperties(animationData);
3729 checkShapes(animationData);
3730 completeLayers(animationData.layers, animationData.assets);
3731 completeChars(animationData.chars, animationData.assets);
3732 animationData.__complete = true;
3733 }
3734 function completeText(data) {
3735 if (data.t.a.length === 0 && !('m' in data.t.p)) {
3736 // data.singleShape = true;
3737 }
3738 }
3739 var moduleOb = {};
3740 moduleOb.completeData = completeData;
3741 moduleOb.checkColors = checkColors;
3742 moduleOb.checkChars = checkChars;
3743 moduleOb.checkPathProperties = checkPathProperties;
3744 moduleOb.checkShapes = checkShapes;
3745 moduleOb.completeLayers = completeLayers;
3746 return moduleOb;
3747 }
3748 if (!_workerSelf.dataManager) {
3749 _workerSelf.dataManager = dataFunctionManager();
3750 }
3751 if (!_workerSelf.assetLoader) {
3752 _workerSelf.assetLoader = function () {
3753 function formatResponse(xhr) {
3754 // using typeof doubles the time of execution of this method,
3755 // so if available, it's better to use the header to validate the type
3756 var contentTypeHeader = xhr.getResponseHeader('content-type');
3757 if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {
3758 return xhr.response;
3759 }
3760 if (xhr.response && _typeof$5(xhr.response) === 'object') {
3761 return xhr.response;
3762 }
3763 if (xhr.response && typeof xhr.response === 'string') {
3764 return JSON.parse(xhr.response);
3765 }
3766 if (xhr.responseText) {
3767 return JSON.parse(xhr.responseText);
3768 }
3769 return null;
3770 }
3771 function loadAsset(path, fullPath, callback, errorCallback) {
3772 var response;
3773 var xhr = new XMLHttpRequest();
3774 // set responseType after calling open or IE will break.
3775 try {
3776 // This crashes on Android WebView prior to KitKat
3777 xhr.responseType = 'json';
3778 } catch (err) {} // eslint-disable-line no-empty
3779 xhr.onreadystatechange = function () {
3780 if (xhr.readyState === 4) {
3781 if (xhr.status === 200) {
3782 response = formatResponse(xhr);
3783 callback(response);
3784 } else {
3785 try {
3786 response = formatResponse(xhr);
3787 callback(response);
3788 } catch (err) {
3789 if (errorCallback) {
3790 errorCallback(err);
3791 }
3792 }
3793 }
3794 }
3795 };
3796 try {
3797 // Hack to workaround banner validation
3798 xhr.open(['G', 'E', 'T'].join(''), path, true);
3799 } catch (error) {
3800 // Hack to workaround banner validation
3801 xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);
3802 }
3803 xhr.send();
3804 }
3805 return {
3806 load: loadAsset
3807 };
3808 }();
3809 }
3810 if (e.data.type === 'loadAnimation') {
3811 _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {
3812 _workerSelf.dataManager.completeData(data);
3813 _workerSelf.postMessage({
3814 id: e.data.id,
3815 payload: data,
3816 status: 'success'
3817 });
3818 }, function () {
3819 _workerSelf.postMessage({
3820 id: e.data.id,
3821 status: 'error'
3822 });
3823 });
3824 } else if (e.data.type === 'complete') {
3825 var animation = e.data.animation;
3826 _workerSelf.dataManager.completeData(animation);
3827 _workerSelf.postMessage({
3828 id: e.data.id,
3829 payload: animation,
3830 status: 'success'
3831 });
3832 } else if (e.data.type === 'loadData') {
3833 _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {
3834 _workerSelf.postMessage({
3835 id: e.data.id,
3836 payload: data,
3837 status: 'success'
3838 });
3839 }, function () {
3840 _workerSelf.postMessage({
3841 id: e.data.id,
3842 status: 'error'
3843 });
3844 });
3845 }
3846 });
3847 workerInstance.onmessage = function (event) {
3848 var data = event.data;
3849 var id = data.id;
3850 var process = processes[id];
3851 processes[id] = null;
3852 if (data.status === 'success') {
3853 process.onComplete(data.payload);
3854 } else if (process.onError) {
3855 process.onError();
3856 }
3857 };
3858 }
3859 }
3860 function createProcess(onComplete, onError) {
3861 _counterId += 1;
3862 var id = 'processId_' + _counterId;
3863 processes[id] = {
3864 onComplete: onComplete,
3865 onError: onError
3866 };
3867 return id;
3868 }
3869 function loadAnimation(path, onComplete, onError) {
3870 setupWorker();
3871 var processId = createProcess(onComplete, onError);
3872 workerInstance.postMessage({
3873 type: 'loadAnimation',
3874 path: path,
3875 fullPath: window.location.origin + window.location.pathname,
3876 id: processId
3877 });
3878 }
3879 function loadData(path, onComplete, onError) {
3880 setupWorker();
3881 var processId = createProcess(onComplete, onError);
3882 workerInstance.postMessage({
3883 type: 'loadData',
3884 path: path,
3885 fullPath: window.location.origin + window.location.pathname,
3886 id: processId
3887 });
3888 }
3889 function completeAnimation(anim, onComplete, onError) {
3890 setupWorker();
3891 var processId = createProcess(onComplete, onError);
3892 workerInstance.postMessage({
3893 type: 'complete',
3894 animation: anim,
3895 id: processId
3896 });
3897 }
3898 return {
3899 loadAnimation: loadAnimation,
3900 loadData: loadData,
3901 completeAnimation: completeAnimation
3902 };
3903 }();
3904
3905 var ImagePreloader = function () {
3906 var proxyImage = function () {
3907 var canvas = createTag('canvas');
3908 canvas.width = 1;
3909 canvas.height = 1;
3910 var ctx = canvas.getContext('2d');
3911 ctx.fillStyle = 'rgba(0,0,0,0)';
3912 ctx.fillRect(0, 0, 1, 1);
3913 return canvas;
3914 }();
3915 function imageLoaded() {
3916 this.loadedAssets += 1;
3917 if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {
3918 if (this.imagesLoadedCb) {
3919 this.imagesLoadedCb(null);
3920 }
3921 }
3922 }
3923 function footageLoaded() {
3924 this.loadedFootagesCount += 1;
3925 if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {
3926 if (this.imagesLoadedCb) {
3927 this.imagesLoadedCb(null);
3928 }
3929 }
3930 }
3931 function getAssetsPath(assetData, assetsPath, originalPath) {
3932 var path = '';
3933 if (assetData.e) {
3934 path = assetData.p;
3935 } else if (assetsPath) {
3936 var imagePath = assetData.p;
3937 if (imagePath.indexOf('images/') !== -1) {
3938 imagePath = imagePath.split('/')[1];
3939 }
3940 path = assetsPath + imagePath;
3941 } else {
3942 path = originalPath;
3943 path += assetData.u ? assetData.u : '';
3944 path += assetData.p;
3945 }
3946 return path;
3947 }
3948 function testImageLoaded(img) {
3949 var _count = 0;
3950 var intervalId = setInterval(function () {
3951 var box = img.getBBox();
3952 if (box.width || _count > 500) {
3953 this._imageLoaded();
3954 clearInterval(intervalId);
3955 }
3956 _count += 1;
3957 }.bind(this), 50);
3958 }
3959 function createImageData(assetData) {
3960 var path = getAssetsPath(assetData, this.assetsPath, this.path);
3961 var img = createNS('image');
3962 if (isSafari) {
3963 this.testImageLoaded(img);
3964 } else {
3965 img.addEventListener('load', this._imageLoaded, false);
3966 }
3967 img.addEventListener('error', function () {
3968 ob.img = proxyImage;
3969 this._imageLoaded();
3970 }.bind(this), false);
3971 img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);
3972 if (this._elementHelper.append) {
3973 this._elementHelper.append(img);
3974 } else {
3975 this._elementHelper.appendChild(img);
3976 }
3977 var ob = {
3978 img: img,
3979 assetData: assetData
3980 };
3981 return ob;
3982 }
3983 function createImgData(assetData) {
3984 var path = getAssetsPath(assetData, this.assetsPath, this.path);
3985 var img = createTag('img');
3986 img.crossOrigin = 'anonymous';
3987 img.addEventListener('load', this._imageLoaded, false);
3988 img.addEventListener('error', function () {
3989 ob.img = proxyImage;
3990 this._imageLoaded();
3991 }.bind(this), false);
3992 img.src = path;
3993 var ob = {
3994 img: img,
3995 assetData: assetData
3996 };
3997 return ob;
3998 }
3999 function createFootageData(data) {
4000 var ob = {
4001 assetData: data
4002 };
4003 var path = getAssetsPath(data, this.assetsPath, this.path);
4004 dataManager.loadData(path, function (footageData) {
4005 ob.img = footageData;
4006 this._footageLoaded();
4007 }.bind(this), function () {
4008 ob.img = {};
4009 this._footageLoaded();
4010 }.bind(this));
4011 return ob;
4012 }
4013 function loadAssets(assets, cb) {
4014 this.imagesLoadedCb = cb;
4015 var i;
4016 var len = assets.length;
4017 for (i = 0; i < len; i += 1) {
4018 if (!assets[i].layers) {
4019 if (!assets[i].t || assets[i].t === 'seq') {
4020 this.totalImages += 1;
4021 this.images.push(this._createImageData(assets[i]));
4022 } else if (assets[i].t === 3) {
4023 this.totalFootages += 1;
4024 this.images.push(this.createFootageData(assets[i]));
4025 }
4026 }
4027 }
4028 }
4029 function setPath(path) {
4030 this.path = path || '';
4031 }
4032 function setAssetsPath(path) {
4033 this.assetsPath = path || '';
4034 }
4035 function getAsset(assetData) {
4036 var i = 0;
4037 var len = this.images.length;
4038 while (i < len) {
4039 if (this.images[i].assetData === assetData) {
4040 return this.images[i].img;
4041 }
4042 i += 1;
4043 }
4044 return null;
4045 }
4046 function destroy() {
4047 this.imagesLoadedCb = null;
4048 this.images.length = 0;
4049 }
4050 function loadedImages() {
4051 return this.totalImages === this.loadedAssets;
4052 }
4053 function loadedFootages() {
4054 return this.totalFootages === this.loadedFootagesCount;
4055 }
4056 function setCacheType(type, elementHelper) {
4057 if (type === 'svg') {
4058 this._elementHelper = elementHelper;
4059 this._createImageData = this.createImageData.bind(this);
4060 } else {
4061 this._createImageData = this.createImgData.bind(this);
4062 }
4063 }
4064 function ImagePreloaderFactory() {
4065 this._imageLoaded = imageLoaded.bind(this);
4066 this._footageLoaded = footageLoaded.bind(this);
4067 this.testImageLoaded = testImageLoaded.bind(this);
4068 this.createFootageData = createFootageData.bind(this);
4069 this.assetsPath = '';
4070 this.path = '';
4071 this.totalImages = 0;
4072 this.totalFootages = 0;
4073 this.loadedAssets = 0;
4074 this.loadedFootagesCount = 0;
4075 this.imagesLoadedCb = null;
4076 this.images = [];
4077 }
4078 ImagePreloaderFactory.prototype = {
4079 loadAssets: loadAssets,
4080 setAssetsPath: setAssetsPath,
4081 setPath: setPath,
4082 loadedImages: loadedImages,
4083 loadedFootages: loadedFootages,
4084 destroy: destroy,
4085 getAsset: getAsset,
4086 createImgData: createImgData,
4087 createImageData: createImageData,
4088 imageLoaded: imageLoaded,
4089 footageLoaded: footageLoaded,
4090 setCacheType: setCacheType
4091 };
4092 return ImagePreloaderFactory;
4093 }();
4094
4095 function BaseEvent() {}
4096 BaseEvent.prototype = {
4097 triggerEvent: function triggerEvent(eventName, args) {
4098 if (this._cbs[eventName]) {
4099 var callbacks = this._cbs[eventName];
4100 for (var i = 0; i < callbacks.length; i += 1) {
4101 callbacks[i](args);
4102 }
4103 }
4104 },
4105 addEventListener: function addEventListener(eventName, callback) {
4106 if (!this._cbs[eventName]) {
4107 this._cbs[eventName] = [];
4108 }
4109 this._cbs[eventName].push(callback);
4110 return function () {
4111 this.removeEventListener(eventName, callback);
4112 }.bind(this);
4113 },
4114 removeEventListener: function removeEventListener(eventName, callback) {
4115 if (!callback) {
4116 this._cbs[eventName] = null;
4117 } else if (this._cbs[eventName]) {
4118 var i = 0;
4119 var len = this._cbs[eventName].length;
4120 while (i < len) {
4121 if (this._cbs[eventName][i] === callback) {
4122 this._cbs[eventName].splice(i, 1);
4123 i -= 1;
4124 len -= 1;
4125 }
4126 i += 1;
4127 }
4128 if (!this._cbs[eventName].length) {
4129 this._cbs[eventName] = null;
4130 }
4131 }
4132 }
4133 };
4134
4135 var markerParser = function () {
4136 function parsePayloadLines(payload) {
4137 var lines = payload.split('\r\n');
4138 var keys = {};
4139 var line;
4140 var keysCount = 0;
4141 for (var i = 0; i < lines.length; i += 1) {
4142 line = lines[i].split(':');
4143 if (line.length === 2) {
4144 keys[line[0]] = line[1].trim();
4145 keysCount += 1;
4146 }
4147 }
4148 if (keysCount === 0) {
4149 throw new Error();
4150 }
4151 return keys;
4152 }
4153 return function (_markers) {
4154 var markers = [];
4155 for (var i = 0; i < _markers.length; i += 1) {
4156 var _marker = _markers[i];
4157 var markerData = {
4158 time: _marker.tm,
4159 duration: _marker.dr
4160 };
4161 try {
4162 markerData.payload = JSON.parse(_markers[i].cm);
4163 } catch (_) {
4164 try {
4165 markerData.payload = parsePayloadLines(_markers[i].cm);
4166 } catch (__) {
4167 markerData.payload = {
4168 name: _markers[i].cm
4169 };
4170 }
4171 }
4172 markers.push(markerData);
4173 }
4174 return markers;
4175 };
4176 }();
4177
4178 var ProjectInterface = function () {
4179 function registerComposition(comp) {
4180 this.compositions.push(comp);
4181 }
4182 return function () {
4183 function _thisProjectFunction(name) {
4184 var i = 0;
4185 var len = this.compositions.length;
4186 while (i < len) {
4187 if (this.compositions[i].data && this.compositions[i].data.nm === name) {
4188 if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {
4189 this.compositions[i].prepareFrame(this.currentFrame);
4190 }
4191 return this.compositions[i].compInterface;
4192 }
4193 i += 1;
4194 }
4195 return null;
4196 }
4197 _thisProjectFunction.compositions = [];
4198 _thisProjectFunction.currentFrame = 0;
4199 _thisProjectFunction.registerComposition = registerComposition;
4200 return _thisProjectFunction;
4201 };
4202 }();
4203
4204 var renderers = {};
4205 var registerRenderer = function registerRenderer(key, value) {
4206 renderers[key] = value;
4207 };
4208 function getRenderer(key) {
4209 return renderers[key];
4210 }
4211 function getRegisteredRenderer() {
4212 // Returns canvas by default for compatibility
4213 if (renderers.canvas) {
4214 return 'canvas';
4215 }
4216 // Returns any renderer that is registered
4217 for (var key in renderers) {
4218 if (renderers[key]) {
4219 return key;
4220 }
4221 }
4222 return '';
4223 }
4224
4225 function _typeof$4(o) { "@babel/helpers - typeof"; return _typeof$4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$4(o); }
4226 var AnimationItem = function AnimationItem() {
4227 this._cbs = [];
4228 this.name = '';
4229 this.path = '';
4230 this.isLoaded = false;
4231 this.currentFrame = 0;
4232 this.currentRawFrame = 0;
4233 this.firstFrame = 0;
4234 this.totalFrames = 0;
4235 this.frameRate = 0;
4236 this.frameMult = 0;
4237 this.playSpeed = 1;
4238 this.playDirection = 1;
4239 this.playCount = 0;
4240 this.animationData = {};
4241 this.assets = [];
4242 this.isPaused = true;
4243 this.autoplay = false;
4244 this.loop = true;
4245 this.renderer = null;
4246 this.animationID = createElementID();
4247 this.assetsPath = '';
4248 this.timeCompleted = 0;
4249 this.segmentPos = 0;
4250 this.isSubframeEnabled = getSubframeEnabled();
4251 this.segments = [];
4252 this._idle = true;
4253 this._completedLoop = false;
4254 this.projectInterface = ProjectInterface();
4255 this.imagePreloader = new ImagePreloader();
4256 this.audioController = audioControllerFactory();
4257 this.markers = [];
4258 this.configAnimation = this.configAnimation.bind(this);
4259 this.onSetupError = this.onSetupError.bind(this);
4260 this.onSegmentComplete = this.onSegmentComplete.bind(this);
4261 this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);
4262 this.expressionsPlugin = getExpressionsPlugin();
4263 };
4264 extendPrototype([BaseEvent], AnimationItem);
4265 AnimationItem.prototype.setParams = function (params) {
4266 if (params.wrapper || params.container) {
4267 this.wrapper = params.wrapper || params.container;
4268 }
4269 var animType = 'svg';
4270 if (params.animType) {
4271 animType = params.animType;
4272 } else if (params.renderer) {
4273 animType = params.renderer;
4274 }
4275 var RendererClass = getRenderer(animType);
4276 this.renderer = new RendererClass(this, params.rendererSettings);
4277 this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);
4278 this.renderer.setProjectInterface(this.projectInterface);
4279 this.animType = animType;
4280 if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {
4281 this.loop = true;
4282 } else if (params.loop === false) {
4283 this.loop = false;
4284 } else {
4285 this.loop = parseInt(params.loop, 10);
4286 }
4287 this.autoplay = 'autoplay' in params ? params.autoplay : true;
4288 this.name = params.name ? params.name : '';
4289 this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;
4290 this.assetsPath = params.assetsPath;
4291 this.initialSegment = params.initialSegment;
4292 if (params.audioFactory) {
4293 this.audioController.setAudioFactory(params.audioFactory);
4294 }
4295 if (params.animationData) {
4296 this.setupAnimation(params.animationData);
4297 } else if (params.path) {
4298 if (params.path.lastIndexOf('\\') !== -1) {
4299 this.path = params.path.substr(0, params.path.lastIndexOf('\\') + 1);
4300 } else {
4301 this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);
4302 }
4303 this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);
4304 this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));
4305 dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);
4306 }
4307 };
4308 AnimationItem.prototype.onSetupError = function () {
4309 this.trigger('data_failed');
4310 };
4311 AnimationItem.prototype.setupAnimation = function (data) {
4312 dataManager.completeAnimation(data, this.configAnimation);
4313 };
4314 AnimationItem.prototype.setData = function (wrapper, animationData) {
4315 if (animationData) {
4316 if (_typeof$4(animationData) !== 'object') {
4317 animationData = JSON.parse(animationData);
4318 }
4319 }
4320 var params = {
4321 wrapper: wrapper,
4322 animationData: animationData
4323 };
4324 var wrapperAttributes = wrapper.attributes;
4325 params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary
4326 ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary
4327 ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';
4328 params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary
4329 ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary
4330 ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary
4331 ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary
4332 ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';
4333 var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary
4334 ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary
4335 ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';
4336 if (loop === 'false') {
4337 params.loop = false;
4338 } else if (loop === 'true') {
4339 params.loop = true;
4340 } else if (loop !== '') {
4341 params.loop = parseInt(loop, 10);
4342 }
4343 var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary
4344 ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary
4345 ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;
4346 params.autoplay = autoplay !== 'false';
4347 params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary
4348 ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary
4349 ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';
4350 var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary
4351 ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary
4352 ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';
4353 if (prerender === 'false') {
4354 params.prerender = false;
4355 }
4356 if (!params.path) {
4357 this.trigger('destroy');
4358 } else {
4359 this.setParams(params);
4360 }
4361 };
4362 AnimationItem.prototype.includeLayers = function (data) {
4363 if (data.op > this.animationData.op) {
4364 this.animationData.op = data.op;
4365 this.totalFrames = Math.floor(data.op - this.animationData.ip);
4366 }
4367 var layers = this.animationData.layers;
4368 var i;
4369 var len = layers.length;
4370 var newLayers = data.layers;
4371 var j;
4372 var jLen = newLayers.length;
4373 for (j = 0; j < jLen; j += 1) {
4374 i = 0;
4375 while (i < len) {
4376 if (layers[i].id === newLayers[j].id) {
4377 layers[i] = newLayers[j];
4378 break;
4379 }
4380 i += 1;
4381 }
4382 }
4383 if (data.chars || data.fonts) {
4384 this.renderer.globalData.fontManager.addChars(data.chars);
4385 this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);
4386 }
4387 if (data.assets) {
4388 len = data.assets.length;
4389 for (i = 0; i < len; i += 1) {
4390 this.animationData.assets.push(data.assets[i]);
4391 }
4392 }
4393 this.animationData.__complete = false;
4394 dataManager.completeAnimation(this.animationData, this.onSegmentComplete);
4395 };
4396 AnimationItem.prototype.onSegmentComplete = function (data) {
4397 this.animationData = data;
4398 var expressionsPlugin = getExpressionsPlugin();
4399 if (expressionsPlugin) {
4400 expressionsPlugin.initExpressions(this);
4401 }
4402 this.loadNextSegment();
4403 };
4404 AnimationItem.prototype.loadNextSegment = function () {
4405 var segments = this.animationData.segments;
4406 if (!segments || segments.length === 0 || !this.autoloadSegments) {
4407 this.trigger('data_ready');
4408 this.timeCompleted = this.totalFrames;
4409 return;
4410 }
4411 var segment = segments.shift();
4412 this.timeCompleted = segment.time * this.frameRate;
4413 var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';
4414 this.segmentPos += 1;
4415 dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {
4416 this.trigger('data_failed');
4417 }.bind(this));
4418 };
4419 AnimationItem.prototype.loadSegments = function () {
4420 var segments = this.animationData.segments;
4421 if (!segments) {
4422 this.timeCompleted = this.totalFrames;
4423 }
4424 this.loadNextSegment();
4425 };
4426 AnimationItem.prototype.imagesLoaded = function () {
4427 this.trigger('loaded_images');
4428 this.checkLoaded();
4429 };
4430 AnimationItem.prototype.preloadImages = function () {
4431 this.imagePreloader.setAssetsPath(this.assetsPath);
4432 this.imagePreloader.setPath(this.path);
4433 this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));
4434 };
4435 AnimationItem.prototype.configAnimation = function (animData) {
4436 if (!this.renderer) {
4437 return;
4438 }
4439 try {
4440 this.animationData = animData;
4441 if (this.initialSegment) {
4442 this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);
4443 this.firstFrame = Math.round(this.initialSegment[0]);
4444 } else {
4445 this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);
4446 this.firstFrame = Math.round(this.animationData.ip);
4447 }
4448 this.renderer.configAnimation(animData);
4449 if (!animData.assets) {
4450 animData.assets = [];
4451 }
4452 this.assets = this.animationData.assets;
4453 this.frameRate = this.animationData.fr;
4454 this.frameMult = this.animationData.fr / 1000;
4455 this.renderer.searchExtraCompositions(animData.assets);
4456 this.markers = markerParser(animData.markers || []);
4457 this.trigger('config_ready');
4458 this.preloadImages();
4459 this.loadSegments();
4460 this.updaFrameModifier();
4461 this.waitForFontsLoaded();
4462 if (this.isPaused) {
4463 this.audioController.pause();
4464 }
4465 } catch (error) {
4466 this.triggerConfigError(error);
4467 }
4468 };
4469 AnimationItem.prototype.waitForFontsLoaded = function () {
4470 if (!this.renderer) {
4471 return;
4472 }
4473 if (this.renderer.globalData.fontManager.isLoaded) {
4474 this.checkLoaded();
4475 } else {
4476 setTimeout(this.waitForFontsLoaded.bind(this), 20);
4477 }
4478 };
4479 AnimationItem.prototype.checkLoaded = function () {
4480 if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {
4481 this.isLoaded = true;
4482 var expressionsPlugin = getExpressionsPlugin();
4483 if (expressionsPlugin) {
4484 expressionsPlugin.initExpressions(this);
4485 }
4486 this.renderer.initItems();
4487 setTimeout(function () {
4488 this.trigger('DOMLoaded');
4489 }.bind(this), 0);
4490 this.gotoFrame();
4491 if (this.autoplay) {
4492 this.play();
4493 }
4494 }
4495 };
4496 AnimationItem.prototype.resize = function (width, height) {
4497 // Adding this validation for backwards compatibility in case an event object was being passed down
4498 var _width = typeof width === 'number' ? width : undefined;
4499 var _height = typeof height === 'number' ? height : undefined;
4500 this.renderer.updateContainerSize(_width, _height);
4501 };
4502 AnimationItem.prototype.setSubframe = function (flag) {
4503 this.isSubframeEnabled = !!flag;
4504 };
4505 AnimationItem.prototype.gotoFrame = function () {
4506 this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise
4507
4508 if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {
4509 this.currentFrame = this.timeCompleted;
4510 }
4511 this.trigger('enterFrame');
4512 this.renderFrame();
4513 this.trigger('drawnFrame');
4514 };
4515 AnimationItem.prototype.renderFrame = function () {
4516 if (this.isLoaded === false || !this.renderer) {
4517 return;
4518 }
4519 try {
4520 if (this.expressionsPlugin) {
4521 this.expressionsPlugin.resetFrame();
4522 }
4523 this.renderer.renderFrame(this.currentFrame + this.firstFrame);
4524 } catch (error) {
4525 this.triggerRenderFrameError(error);
4526 }
4527 };
4528 AnimationItem.prototype.play = function (name) {
4529 if (name && this.name !== name) {
4530 return;
4531 }
4532 if (this.isPaused === true) {
4533 this.isPaused = false;
4534 this.trigger('_play');
4535 this.audioController.resume();
4536 if (this._idle) {
4537 this._idle = false;
4538 this.trigger('_active');
4539 }
4540 }
4541 };
4542 AnimationItem.prototype.pause = function (name) {
4543 if (name && this.name !== name) {
4544 return;
4545 }
4546 if (this.isPaused === false) {
4547 this.isPaused = true;
4548 this.trigger('_pause');
4549 this._idle = true;
4550 this.trigger('_idle');
4551 this.audioController.pause();
4552 }
4553 };
4554 AnimationItem.prototype.togglePause = function (name) {
4555 if (name && this.name !== name) {
4556 return;
4557 }
4558 if (this.isPaused === true) {
4559 this.play();
4560 } else {
4561 this.pause();
4562 }
4563 };
4564 AnimationItem.prototype.stop = function (name) {
4565 if (name && this.name !== name) {
4566 return;
4567 }
4568 this.pause();
4569 this.playCount = 0;
4570 this._completedLoop = false;
4571 this.setCurrentRawFrameValue(0);
4572 };
4573 AnimationItem.prototype.getMarkerData = function (markerName) {
4574 var marker;
4575 for (var i = 0; i < this.markers.length; i += 1) {
4576 marker = this.markers[i];
4577 if (marker.payload && marker.payload.name === markerName) {
4578 return marker;
4579 }
4580 }
4581 return null;
4582 };
4583 AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {
4584 if (name && this.name !== name) {
4585 return;
4586 }
4587 var numValue = Number(value);
4588 if (isNaN(numValue)) {
4589 var marker = this.getMarkerData(value);
4590 if (marker) {
4591 this.goToAndStop(marker.time, true);
4592 }
4593 } else if (isFrame) {
4594 this.setCurrentRawFrameValue(value);
4595 } else {
4596 this.setCurrentRawFrameValue(value * this.frameModifier);
4597 }
4598 this.pause();
4599 };
4600 AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {
4601 if (name && this.name !== name) {
4602 return;
4603 }
4604 var numValue = Number(value);
4605 if (isNaN(numValue)) {
4606 var marker = this.getMarkerData(value);
4607 if (marker) {
4608 if (!marker.duration) {
4609 this.goToAndStop(marker.time, true);
4610 } else {
4611 this.playSegments([marker.time, marker.time + marker.duration], true);
4612 }
4613 }
4614 } else {
4615 this.goToAndStop(numValue, isFrame, name);
4616 }
4617 this.play();
4618 };
4619 AnimationItem.prototype.advanceTime = function (value) {
4620 if (this.isPaused === true || this.isLoaded === false) {
4621 return;
4622 }
4623 var nextValue = this.currentRawFrame + value * this.frameModifier;
4624 var _isComplete = false;
4625 // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.
4626 // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.
4627 if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {
4628 if (!this.loop || this.playCount === this.loop) {
4629 if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {
4630 _isComplete = true;
4631 nextValue = this.totalFrames - 1;
4632 }
4633 } else if (nextValue >= this.totalFrames) {
4634 this.playCount += 1;
4635 if (!this.checkSegments(nextValue % this.totalFrames)) {
4636 this.setCurrentRawFrameValue(nextValue % this.totalFrames);
4637 this._completedLoop = true;
4638 this.trigger('loopComplete');
4639 }
4640 } else {
4641 this.setCurrentRawFrameValue(nextValue);
4642 }
4643 } else if (nextValue < 0) {
4644 if (!this.checkSegments(nextValue % this.totalFrames)) {
4645 if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {
4646 // eslint-disable-line no-plusplus
4647 this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);
4648 if (!this._completedLoop) {
4649 this._completedLoop = true;
4650 } else {
4651 this.trigger('loopComplete');
4652 }
4653 } else {
4654 _isComplete = true;
4655 nextValue = 0;
4656 }
4657 }
4658 } else {
4659 this.setCurrentRawFrameValue(nextValue);
4660 }
4661 if (_isComplete) {
4662 this.setCurrentRawFrameValue(nextValue);
4663 this.pause();
4664 this.trigger('complete');
4665 }
4666 };
4667 AnimationItem.prototype.adjustSegment = function (arr, offset) {
4668 this.playCount = 0;
4669 if (arr[1] < arr[0]) {
4670 if (this.frameModifier > 0) {
4671 if (this.playSpeed < 0) {
4672 this.setSpeed(-this.playSpeed);
4673 } else {
4674 this.setDirection(-1);
4675 }
4676 }
4677 this.totalFrames = arr[0] - arr[1];
4678 this.timeCompleted = this.totalFrames;
4679 this.firstFrame = arr[1];
4680 this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);
4681 } else if (arr[1] > arr[0]) {
4682 if (this.frameModifier < 0) {
4683 if (this.playSpeed < 0) {
4684 this.setSpeed(-this.playSpeed);
4685 } else {
4686 this.setDirection(1);
4687 }
4688 }
4689 this.totalFrames = arr[1] - arr[0];
4690 this.timeCompleted = this.totalFrames;
4691 this.firstFrame = arr[0];
4692 this.setCurrentRawFrameValue(0.001 + offset);
4693 }
4694 this.trigger('segmentStart');
4695 };
4696 AnimationItem.prototype.setSegment = function (init, end) {
4697 var pendingFrame = -1;
4698 if (this.isPaused) {
4699 if (this.currentRawFrame + this.firstFrame < init) {
4700 pendingFrame = init;
4701 } else if (this.currentRawFrame + this.firstFrame > end) {
4702 pendingFrame = end - init;
4703 }
4704 }
4705 this.firstFrame = init;
4706 this.totalFrames = end - init;
4707 this.timeCompleted = this.totalFrames;
4708 if (pendingFrame !== -1) {
4709 this.goToAndStop(pendingFrame, true);
4710 }
4711 };
4712 AnimationItem.prototype.playSegments = function (arr, forceFlag) {
4713 if (forceFlag) {
4714 this.segments.length = 0;
4715 }
4716 if (_typeof$4(arr[0]) === 'object') {
4717 var i;
4718 var len = arr.length;
4719 for (i = 0; i < len; i += 1) {
4720 this.segments.push(arr[i]);
4721 }
4722 } else {
4723 this.segments.push(arr);
4724 }
4725 if (this.segments.length && forceFlag) {
4726 this.adjustSegment(this.segments.shift(), 0);
4727 }
4728 if (this.isPaused) {
4729 this.play();
4730 }
4731 };
4732 AnimationItem.prototype.resetSegments = function (forceFlag) {
4733 this.segments.length = 0;
4734 this.segments.push([this.animationData.ip, this.animationData.op]);
4735 if (forceFlag) {
4736 this.checkSegments(0);
4737 }
4738 };
4739 AnimationItem.prototype.checkSegments = function (offset) {
4740 if (this.segments.length) {
4741 this.adjustSegment(this.segments.shift(), offset);
4742 return true;
4743 }
4744 return false;
4745 };
4746 AnimationItem.prototype.destroy = function (name) {
4747 if (name && this.name !== name || !this.renderer) {
4748 return;
4749 }
4750 this.renderer.destroy();
4751 this.imagePreloader.destroy();
4752 this.trigger('destroy');
4753 this._cbs = null;
4754 this.onEnterFrame = null;
4755 this.onLoopComplete = null;
4756 this.onComplete = null;
4757 this.onSegmentStart = null;
4758 this.onDestroy = null;
4759 this.renderer = null;
4760 this.expressionsPlugin = null;
4761 this.imagePreloader = null;
4762 this.projectInterface = null;
4763 };
4764 AnimationItem.prototype.setCurrentRawFrameValue = function (value) {
4765 this.currentRawFrame = value;
4766 this.gotoFrame();
4767 };
4768 AnimationItem.prototype.setSpeed = function (val) {
4769 this.playSpeed = val;
4770 this.updaFrameModifier();
4771 };
4772 AnimationItem.prototype.setDirection = function (val) {
4773 this.playDirection = val < 0 ? -1 : 1;
4774 this.updaFrameModifier();
4775 };
4776 AnimationItem.prototype.setLoop = function (isLooping) {
4777 this.loop = isLooping;
4778 };
4779 AnimationItem.prototype.setVolume = function (val, name) {
4780 if (name && this.name !== name) {
4781 return;
4782 }
4783 this.audioController.setVolume(val);
4784 };
4785 AnimationItem.prototype.getVolume = function () {
4786 return this.audioController.getVolume();
4787 };
4788 AnimationItem.prototype.mute = function (name) {
4789 if (name && this.name !== name) {
4790 return;
4791 }
4792 this.audioController.mute();
4793 };
4794 AnimationItem.prototype.unmute = function (name) {
4795 if (name && this.name !== name) {
4796 return;
4797 }
4798 this.audioController.unmute();
4799 };
4800 AnimationItem.prototype.updaFrameModifier = function () {
4801 this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;
4802 this.audioController.setRate(this.playSpeed * this.playDirection);
4803 };
4804 AnimationItem.prototype.getPath = function () {
4805 return this.path;
4806 };
4807 AnimationItem.prototype.getAssetsPath = function (assetData) {
4808 var path = '';
4809 if (assetData.e) {
4810 path = assetData.p;
4811 } else if (this.assetsPath) {
4812 var imagePath = assetData.p;
4813 if (imagePath.indexOf('images/') !== -1) {
4814 imagePath = imagePath.split('/')[1];
4815 }
4816 path = this.assetsPath + imagePath;
4817 } else {
4818 path = this.path;
4819 path += assetData.u ? assetData.u : '';
4820 path += assetData.p;
4821 }
4822 return path;
4823 };
4824 AnimationItem.prototype.getAssetData = function (id) {
4825 var i = 0;
4826 var len = this.assets.length;
4827 while (i < len) {
4828 if (id === this.assets[i].id) {
4829 return this.assets[i];
4830 }
4831 i += 1;
4832 }
4833 return null;
4834 };
4835 AnimationItem.prototype.hide = function () {
4836 this.renderer.hide();
4837 };
4838 AnimationItem.prototype.show = function () {
4839 this.renderer.show();
4840 };
4841 AnimationItem.prototype.getDuration = function (isFrame) {
4842 return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;
4843 };
4844 AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {
4845 try {
4846 var element = this.renderer.getElementByPath(path);
4847 element.updateDocumentData(documentData, index);
4848 } catch (error) {
4849 // TODO: decide how to handle catch case
4850 }
4851 };
4852 AnimationItem.prototype.trigger = function (name) {
4853 if (this._cbs && this._cbs[name]) {
4854 switch (name) {
4855 case 'enterFrame':
4856 this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));
4857 break;
4858 case 'drawnFrame':
4859 this.drawnFrameEvent.currentTime = this.currentFrame;
4860 this.drawnFrameEvent.totalTime = this.totalFrames;
4861 this.drawnFrameEvent.direction = this.frameModifier;
4862 this.triggerEvent(name, this.drawnFrameEvent);
4863 break;
4864 case 'loopComplete':
4865 this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));
4866 break;
4867 case 'complete':
4868 this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));
4869 break;
4870 case 'segmentStart':
4871 this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));
4872 break;
4873 case 'destroy':
4874 this.triggerEvent(name, new BMDestroyEvent(name, this));
4875 break;
4876 default:
4877 this.triggerEvent(name);
4878 }
4879 }
4880 if (name === 'enterFrame' && this.onEnterFrame) {
4881 this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));
4882 }
4883 if (name === 'loopComplete' && this.onLoopComplete) {
4884 this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));
4885 }
4886 if (name === 'complete' && this.onComplete) {
4887 this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));
4888 }
4889 if (name === 'segmentStart' && this.onSegmentStart) {
4890 this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));
4891 }
4892 if (name === 'destroy' && this.onDestroy) {
4893 this.onDestroy.call(this, new BMDestroyEvent(name, this));
4894 }
4895 };
4896 AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {
4897 var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);
4898 this.triggerEvent('error', error);
4899 if (this.onError) {
4900 this.onError.call(this, error);
4901 }
4902 };
4903 AnimationItem.prototype.triggerConfigError = function (nativeError) {
4904 var error = new BMConfigErrorEvent(nativeError, this.currentFrame);
4905 this.triggerEvent('error', error);
4906 if (this.onError) {
4907 this.onError.call(this, error);
4908 }
4909 };
4910
4911 var animationManager = function () {
4912 var moduleOb = {};
4913 var registeredAnimations = [];
4914 var initTime = 0;
4915 var len = 0;
4916 var playingAnimationsNum = 0;
4917 var _stopped = true;
4918 var _isFrozen = false;
4919 function removeElement(ev) {
4920 var i = 0;
4921 var animItem = ev.target;
4922 while (i < len) {
4923 if (registeredAnimations[i].animation === animItem) {
4924 registeredAnimations.splice(i, 1);
4925 i -= 1;
4926 len -= 1;
4927 if (!animItem.isPaused) {
4928 subtractPlayingCount();
4929 }
4930 }
4931 i += 1;
4932 }
4933 }
4934 function registerAnimation(element, animationData) {
4935 if (!element) {
4936 return null;
4937 }
4938 var i = 0;
4939 while (i < len) {
4940 if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {
4941 return registeredAnimations[i].animation;
4942 }
4943 i += 1;
4944 }
4945 var animItem = new AnimationItem();
4946 setupAnimation(animItem, element);
4947 animItem.setData(element, animationData);
4948 return animItem;
4949 }
4950 function getRegisteredAnimations() {
4951 var i;
4952 var lenAnims = registeredAnimations.length;
4953 var animations = [];
4954 for (i = 0; i < lenAnims; i += 1) {
4955 animations.push(registeredAnimations[i].animation);
4956 }
4957 return animations;
4958 }
4959 function addPlayingCount() {
4960 playingAnimationsNum += 1;
4961 activate();
4962 }
4963 function subtractPlayingCount() {
4964 playingAnimationsNum -= 1;
4965 }
4966 function setupAnimation(animItem, element) {
4967 animItem.addEventListener('destroy', removeElement);
4968 animItem.addEventListener('_active', addPlayingCount);
4969 animItem.addEventListener('_idle', subtractPlayingCount);
4970 registeredAnimations.push({
4971 elem: element,
4972 animation: animItem
4973 });
4974 len += 1;
4975 }
4976 function loadAnimation(params) {
4977 var animItem = new AnimationItem();
4978 setupAnimation(animItem, null);
4979 animItem.setParams(params);
4980 return animItem;
4981 }
4982 function setSpeed(val, animation) {
4983 var i;
4984 for (i = 0; i < len; i += 1) {
4985 registeredAnimations[i].animation.setSpeed(val, animation);
4986 }
4987 }
4988 function setDirection(val, animation) {
4989 var i;
4990 for (i = 0; i < len; i += 1) {
4991 registeredAnimations[i].animation.setDirection(val, animation);
4992 }
4993 }
4994 function play(animation) {
4995 var i;
4996 for (i = 0; i < len; i += 1) {
4997 registeredAnimations[i].animation.play(animation);
4998 }
4999 }
5000 function resume(nowTime) {
5001 var elapsedTime = nowTime - initTime;
5002 var i;
5003 for (i = 0; i < len; i += 1) {
5004 registeredAnimations[i].animation.advanceTime(elapsedTime);
5005 }
5006 initTime = nowTime;
5007 if (playingAnimationsNum && !_isFrozen) {
5008 window.requestAnimationFrame(resume);
5009 } else {
5010 _stopped = true;
5011 }
5012 }
5013 function first(nowTime) {
5014 initTime = nowTime;
5015 window.requestAnimationFrame(resume);
5016 }
5017 function pause(animation) {
5018 var i;
5019 for (i = 0; i < len; i += 1) {
5020 registeredAnimations[i].animation.pause(animation);
5021 }
5022 }
5023 function goToAndStop(value, isFrame, animation) {
5024 var i;
5025 for (i = 0; i < len; i += 1) {
5026 registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);
5027 }
5028 }
5029 function stop(animation) {
5030 var i;
5031 for (i = 0; i < len; i += 1) {
5032 registeredAnimations[i].animation.stop(animation);
5033 }
5034 }
5035 function togglePause(animation) {
5036 var i;
5037 for (i = 0; i < len; i += 1) {
5038 registeredAnimations[i].animation.togglePause(animation);
5039 }
5040 }
5041 function destroy(animation) {
5042 var i;
5043 for (i = len - 1; i >= 0; i -= 1) {
5044 registeredAnimations[i].animation.destroy(animation);
5045 }
5046 }
5047 function searchAnimations(animationData, standalone, renderer) {
5048 var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));
5049 var i;
5050 var lenAnims = animElements.length;
5051 for (i = 0; i < lenAnims; i += 1) {
5052 if (renderer) {
5053 animElements[i].setAttribute('data-bm-type', renderer);
5054 }
5055 registerAnimation(animElements[i], animationData);
5056 }
5057 if (standalone && lenAnims === 0) {
5058 if (!renderer) {
5059 renderer = 'svg';
5060 }
5061 var body = document.getElementsByTagName('body')[0];
5062 body.innerText = '';
5063 var div = createTag('div');
5064 div.style.width = '100%';
5065 div.style.height = '100%';
5066 div.setAttribute('data-bm-type', renderer);
5067 body.appendChild(div);
5068 registerAnimation(div, animationData);
5069 }
5070 }
5071 function resize() {
5072 var i;
5073 for (i = 0; i < len; i += 1) {
5074 registeredAnimations[i].animation.resize();
5075 }
5076 }
5077 function activate() {
5078 if (!_isFrozen && playingAnimationsNum) {
5079 if (_stopped) {
5080 window.requestAnimationFrame(first);
5081 _stopped = false;
5082 }
5083 }
5084 }
5085 function freeze() {
5086 _isFrozen = true;
5087 }
5088 function unfreeze() {
5089 _isFrozen = false;
5090 activate();
5091 }
5092 function setVolume(val, animation) {
5093 var i;
5094 for (i = 0; i < len; i += 1) {
5095 registeredAnimations[i].animation.setVolume(val, animation);
5096 }
5097 }
5098 function mute(animation) {
5099 var i;
5100 for (i = 0; i < len; i += 1) {
5101 registeredAnimations[i].animation.mute(animation);
5102 }
5103 }
5104 function unmute(animation) {
5105 var i;
5106 for (i = 0; i < len; i += 1) {
5107 registeredAnimations[i].animation.unmute(animation);
5108 }
5109 }
5110 moduleOb.registerAnimation = registerAnimation;
5111 moduleOb.loadAnimation = loadAnimation;
5112 moduleOb.setSpeed = setSpeed;
5113 moduleOb.setDirection = setDirection;
5114 moduleOb.play = play;
5115 moduleOb.pause = pause;
5116 moduleOb.stop = stop;
5117 moduleOb.togglePause = togglePause;
5118 moduleOb.searchAnimations = searchAnimations;
5119 moduleOb.resize = resize;
5120 // moduleOb.start = start;
5121 moduleOb.goToAndStop = goToAndStop;
5122 moduleOb.destroy = destroy;
5123 moduleOb.freeze = freeze;
5124 moduleOb.unfreeze = unfreeze;
5125 moduleOb.setVolume = setVolume;
5126 moduleOb.mute = mute;
5127 moduleOb.unmute = unmute;
5128 moduleOb.getRegisteredAnimations = getRegisteredAnimations;
5129 return moduleOb;
5130 }();
5131
5132 /* eslint-disable */
5133 var BezierFactory = function () {
5134 /**
5135 * BezierEasing - use bezier curve for transition easing function
5136 * by Gaëtan Renaudeau 2014 - 2015 – MIT License
5137 *
5138 * Credits: is based on Firefox's nsSMILKeySpline.cpp
5139 * Usage:
5140 * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])
5141 * spline.get(x) => returns the easing value | x must be in [0, 1] range
5142 *
5143 */
5144
5145 var ob = {};
5146 ob.getBezierEasing = getBezierEasing;
5147 var beziers = {};
5148 function getBezierEasing(a, b, c, d, nm) {
5149 var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\./g, 'p');
5150 if (beziers[str]) {
5151 return beziers[str];
5152 }
5153 var bezEasing = new BezierEasing([a, b, c, d]);
5154 beziers[str] = bezEasing;
5155 return bezEasing;
5156 }
5157
5158 // These values are established by empiricism with tests (tradeoff: performance VS precision)
5159 var NEWTON_ITERATIONS = 4;
5160 var NEWTON_MIN_SLOPE = 0.001;
5161 var SUBDIVISION_PRECISION = 0.0000001;
5162 var SUBDIVISION_MAX_ITERATIONS = 10;
5163 var kSplineTableSize = 11;
5164 var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
5165 var float32ArraySupported = typeof Float32Array === 'function';
5166 function A(aA1, aA2) {
5167 return 1.0 - 3.0 * aA2 + 3.0 * aA1;
5168 }
5169 function B(aA1, aA2) {
5170 return 3.0 * aA2 - 6.0 * aA1;
5171 }
5172 function C(aA1) {
5173 return 3.0 * aA1;
5174 }
5175
5176 // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
5177 function calcBezier(aT, aA1, aA2) {
5178 return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
5179 }
5180
5181 // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
5182 function getSlope(aT, aA1, aA2) {
5183 return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);
5184 }
5185 function binarySubdivide(aX, aA, aB, mX1, mX2) {
5186 var currentX,
5187 currentT,
5188 i = 0;
5189 do {
5190 currentT = aA + (aB - aA) / 2.0;
5191 currentX = calcBezier(currentT, mX1, mX2) - aX;
5192 if (currentX > 0.0) {
5193 aB = currentT;
5194 } else {
5195 aA = currentT;
5196 }
5197 } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
5198 return currentT;
5199 }
5200 function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {
5201 for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
5202 var currentSlope = getSlope(aGuessT, mX1, mX2);
5203 if (currentSlope === 0.0) return aGuessT;
5204 var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
5205 aGuessT -= currentX / currentSlope;
5206 }
5207 return aGuessT;
5208 }
5209
5210 /**
5211 * points is an array of [ mX1, mY1, mX2, mY2 ]
5212 */
5213 function BezierEasing(points) {
5214 this._p = points;
5215 this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
5216 this._precomputed = false;
5217 this.get = this.get.bind(this);
5218 }
5219 BezierEasing.prototype = {
5220 get: function get(x) {
5221 var mX1 = this._p[0],
5222 mY1 = this._p[1],
5223 mX2 = this._p[2],
5224 mY2 = this._p[3];
5225 if (!this._precomputed) this._precompute();
5226 if (mX1 === mY1 && mX2 === mY2) return x; // linear
5227 // Because JavaScript number are imprecise, we should guarantee the extremes are right.
5228 if (x === 0) return 0;
5229 if (x === 1) return 1;
5230 return calcBezier(this._getTForX(x), mY1, mY2);
5231 },
5232 // Private part
5233
5234 _precompute: function _precompute() {
5235 var mX1 = this._p[0],
5236 mY1 = this._p[1],
5237 mX2 = this._p[2],
5238 mY2 = this._p[3];
5239 this._precomputed = true;
5240 if (mX1 !== mY1 || mX2 !== mY2) {
5241 this._calcSampleValues();
5242 }
5243 },
5244 _calcSampleValues: function _calcSampleValues() {
5245 var mX1 = this._p[0],
5246 mX2 = this._p[2];
5247 for (var i = 0; i < kSplineTableSize; ++i) {
5248 this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
5249 }
5250 },
5251 /**
5252 * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.
5253 */
5254 _getTForX: function _getTForX(aX) {
5255 var mX1 = this._p[0],
5256 mX2 = this._p[2],
5257 mSampleValues = this._mSampleValues;
5258 var intervalStart = 0.0;
5259 var currentSample = 1;
5260 var lastSample = kSplineTableSize - 1;
5261 for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {
5262 intervalStart += kSampleStepSize;
5263 }
5264 --currentSample;
5265
5266 // Interpolate to provide an initial guess for t
5267 var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);
5268 var guessForT = intervalStart + dist * kSampleStepSize;
5269 var initialSlope = getSlope(guessForT, mX1, mX2);
5270 if (initialSlope >= NEWTON_MIN_SLOPE) {
5271 return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
5272 }
5273 if (initialSlope === 0.0) {
5274 return guessForT;
5275 }
5276 return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
5277 }
5278 };
5279 return ob;
5280 }();
5281
5282 var pooling = function () {
5283 function _double(arr) {
5284 return arr.concat(createSizedArray(arr.length));
5285 }
5286 return {
5287 "double": _double
5288 };
5289 }();
5290
5291 var poolFactory = function () {
5292 return function (initialLength, _create, _release) {
5293 var _length = 0;
5294 var _maxLength = initialLength;
5295 var pool = createSizedArray(_maxLength);
5296 var ob = {
5297 newElement: newElement,
5298 release: release
5299 };
5300 function newElement() {
5301 var element;
5302 if (_length) {
5303 _length -= 1;
5304 element = pool[_length];
5305 } else {
5306 element = _create();
5307 }
5308 return element;
5309 }
5310 function release(element) {
5311 if (_length === _maxLength) {
5312 pool = pooling["double"](pool);
5313 _maxLength *= 2;
5314 }
5315 if (_release) {
5316 _release(element);
5317 }
5318 pool[_length] = element;
5319 _length += 1;
5320 }
5321 return ob;
5322 };
5323 }();
5324
5325 var bezierLengthPool = function () {
5326 function create() {
5327 return {
5328 addedLength: 0,
5329 percents: createTypedArray('float32', getDefaultCurveSegments()),
5330 lengths: createTypedArray('float32', getDefaultCurveSegments())
5331 };
5332 }
5333 return poolFactory(8, create);
5334 }();
5335
5336 var segmentsLengthPool = function () {
5337 function create() {
5338 return {
5339 lengths: [],
5340 totalLength: 0
5341 };
5342 }
5343 function release(element) {
5344 var i;
5345 var len = element.lengths.length;
5346 for (i = 0; i < len; i += 1) {
5347 bezierLengthPool.release(element.lengths[i]);
5348 }
5349 element.lengths.length = 0;
5350 }
5351 return poolFactory(8, create, release);
5352 }();
5353
5354 function bezFunction() {
5355 var math = Math;
5356 function pointOnLine2D(x1, y1, x2, y2, x3, y3) {
5357 var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;
5358 return det1 > -0.001 && det1 < 0.001;
5359 }
5360 function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {
5361 if (z1 === 0 && z2 === 0 && z3 === 0) {
5362 return pointOnLine2D(x1, y1, x2, y2, x3, y3);
5363 }
5364 var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));
5365 var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));
5366 var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));
5367 var diffDist;
5368 if (dist1 > dist2) {
5369 if (dist1 > dist3) {
5370 diffDist = dist1 - dist2 - dist3;
5371 } else {
5372 diffDist = dist3 - dist2 - dist1;
5373 }
5374 } else if (dist3 > dist2) {
5375 diffDist = dist3 - dist2 - dist1;
5376 } else {
5377 diffDist = dist2 - dist1 - dist3;
5378 }
5379 return diffDist > -0.0001 && diffDist < 0.0001;
5380 }
5381 var getBezierLength = function () {
5382 return function (pt1, pt2, pt3, pt4) {
5383 var curveSegments = getDefaultCurveSegments();
5384 var k;
5385 var i;
5386 var len;
5387 var ptCoord;
5388 var perc;
5389 var addedLength = 0;
5390 var ptDistance;
5391 var point = [];
5392 var lastPoint = [];
5393 var lengthData = bezierLengthPool.newElement();
5394 len = pt3.length;
5395 for (k = 0; k < curveSegments; k += 1) {
5396 perc = k / (curveSegments - 1);
5397 ptDistance = 0;
5398 for (i = 0; i < len; i += 1) {
5399 ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];
5400 point[i] = ptCoord;
5401 if (lastPoint[i] !== null) {
5402 ptDistance += bmPow(point[i] - lastPoint[i], 2);
5403 }
5404 lastPoint[i] = point[i];
5405 }
5406 if (ptDistance) {
5407 ptDistance = bmSqrt(ptDistance);
5408 addedLength += ptDistance;
5409 }
5410 lengthData.percents[k] = perc;
5411 lengthData.lengths[k] = addedLength;
5412 }
5413 lengthData.addedLength = addedLength;
5414 return lengthData;
5415 };
5416 }();
5417 function getSegmentsLength(shapeData) {
5418 var segmentsLength = segmentsLengthPool.newElement();
5419 var closed = shapeData.c;
5420 var pathV = shapeData.v;
5421 var pathO = shapeData.o;
5422 var pathI = shapeData.i;
5423 var i;
5424 var len = shapeData._length;
5425 var lengths = segmentsLength.lengths;
5426 var totalLength = 0;
5427 for (i = 0; i < len - 1; i += 1) {
5428 lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);
5429 totalLength += lengths[i].addedLength;
5430 }
5431 if (closed && len) {
5432 lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);
5433 totalLength += lengths[i].addedLength;
5434 }
5435 segmentsLength.totalLength = totalLength;
5436 return segmentsLength;
5437 }
5438 function BezierData(length) {
5439 this.segmentLength = 0;
5440 this.points = new Array(length);
5441 }
5442 function PointData(partial, point) {
5443 this.partialLength = partial;
5444 this.point = point;
5445 }
5446 var buildBezierData = function () {
5447 var storedData = {};
5448 return function (pt1, pt2, pt3, pt4) {
5449 var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\./g, 'p');
5450 if (!storedData[bezierName]) {
5451 var curveSegments = getDefaultCurveSegments();
5452 var k;
5453 var i;
5454 var len;
5455 var ptCoord;
5456 var perc;
5457 var addedLength = 0;
5458 var ptDistance;
5459 var point;
5460 var lastPoint = null;
5461 if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {
5462 curveSegments = 2;
5463 }
5464 var bezierData = new BezierData(curveSegments);
5465 len = pt3.length;
5466 for (k = 0; k < curveSegments; k += 1) {
5467 point = createSizedArray(len);
5468 perc = k / (curveSegments - 1);
5469 ptDistance = 0;
5470 for (i = 0; i < len; i += 1) {
5471 ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];
5472 point[i] = ptCoord;
5473 if (lastPoint !== null) {
5474 ptDistance += bmPow(point[i] - lastPoint[i], 2);
5475 }
5476 }
5477 ptDistance = bmSqrt(ptDistance);
5478 addedLength += ptDistance;
5479 bezierData.points[k] = new PointData(ptDistance, point);
5480 lastPoint = point;
5481 }
5482 bezierData.segmentLength = addedLength;
5483 storedData[bezierName] = bezierData;
5484 }
5485 return storedData[bezierName];
5486 };
5487 }();
5488 function getDistancePerc(perc, bezierData) {
5489 var percents = bezierData.percents;
5490 var lengths = bezierData.lengths;
5491 var len = percents.length;
5492 var initPos = bmFloor((len - 1) * perc);
5493 var lengthPos = perc * bezierData.addedLength;
5494 var lPerc = 0;
5495 if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {
5496 return percents[initPos];
5497 }
5498 var dir = lengths[initPos] > lengthPos ? -1 : 1;
5499 var flag = true;
5500 while (flag) {
5501 if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {
5502 lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);
5503 flag = false;
5504 } else {
5505 initPos += dir;
5506 }
5507 if (initPos < 0 || initPos >= len - 1) {
5508 // FIX for TypedArrays that don't store floating point values with enough accuracy
5509 if (initPos === len - 1) {
5510 return percents[initPos];
5511 }
5512 flag = false;
5513 }
5514 }
5515 return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;
5516 }
5517 function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {
5518 var t1 = getDistancePerc(percent, bezierData);
5519 var u1 = 1 - t1;
5520 var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;
5521 var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;
5522 return [ptX, ptY];
5523 }
5524 var bezierSegmentPoints = createTypedArray('float32', 8);
5525 function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {
5526 if (startPerc < 0) {
5527 startPerc = 0;
5528 } else if (startPerc > 1) {
5529 startPerc = 1;
5530 }
5531 var t0 = getDistancePerc(startPerc, bezierData);
5532 endPerc = endPerc > 1 ? 1 : endPerc;
5533 var t1 = getDistancePerc(endPerc, bezierData);
5534 var i;
5535 var len = pt1.length;
5536 var u0 = 1 - t0;
5537 var u1 = 1 - t1;
5538 var u0u0u0 = u0 * u0 * u0;
5539 var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase
5540 var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase
5541 var t0t0t0 = t0 * t0 * t0;
5542 //
5543 var u0u0u1 = u0 * u0 * u1;
5544 var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase
5545 var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase
5546 var t0t0t1 = t0 * t0 * t1;
5547 //
5548 var u0u1u1 = u0 * u1 * u1;
5549 var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase
5550 var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase
5551 var t0t1t1 = t0 * t1 * t1;
5552 //
5553 var u1u1u1 = u1 * u1 * u1;
5554 var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase
5555 var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase
5556 var t1t1t1 = t1 * t1 * t1;
5557 for (i = 0; i < len; i += 1) {
5558 bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
5559 bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
5560 bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
5561 bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
5562 }
5563 return bezierSegmentPoints;
5564 }
5565 return {
5566 getSegmentsLength: getSegmentsLength,
5567 getNewSegment: getNewSegment,
5568 getPointInSegment: getPointInSegment,
5569 buildBezierData: buildBezierData,
5570 pointOnLine2D: pointOnLine2D,
5571 pointOnLine3D: pointOnLine3D
5572 };
5573 }
5574 var bez = bezFunction();
5575
5576 var initFrame = initialDefaultFrame;
5577 var mathAbs = Math.abs;
5578 function interpolateValue(frameNum, caching) {
5579 var offsetTime = this.offsetTime;
5580 var newValue;
5581 if (this.propType === 'multidimensional') {
5582 newValue = createTypedArray('float32', this.pv.length);
5583 }
5584 var iterationIndex = caching.lastIndex;
5585 var i = iterationIndex;
5586 var len = this.keyframes.length - 1;
5587 var flag = true;
5588 var keyData;
5589 var nextKeyData;
5590 var keyframeMetadata;
5591 while (flag) {
5592 keyData = this.keyframes[i];
5593 nextKeyData = this.keyframes[i + 1];
5594 if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {
5595 if (keyData.h) {
5596 keyData = nextKeyData;
5597 }
5598 iterationIndex = 0;
5599 break;
5600 }
5601 if (nextKeyData.t - offsetTime > frameNum) {
5602 iterationIndex = i;
5603 break;
5604 }
5605 if (i < len - 1) {
5606 i += 1;
5607 } else {
5608 iterationIndex = 0;
5609 flag = false;
5610 }
5611 }
5612 keyframeMetadata = this.keyframesMetadata[i] || {};
5613 var k;
5614 var kLen;
5615 var perc;
5616 var jLen;
5617 var j;
5618 var fnc;
5619 var nextKeyTime = nextKeyData.t - offsetTime;
5620 var keyTime = keyData.t - offsetTime;
5621 var endValue;
5622 if (keyData.to) {
5623 if (!keyframeMetadata.bezierData) {
5624 keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);
5625 }
5626 var bezierData = keyframeMetadata.bezierData;
5627 if (frameNum >= nextKeyTime || frameNum < keyTime) {
5628 var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;
5629 kLen = bezierData.points[ind].point.length;
5630 for (k = 0; k < kLen; k += 1) {
5631 newValue[k] = bezierData.points[ind].point[k];
5632 }
5633 // caching._lastKeyframeIndex = -1;
5634 } else {
5635 if (keyframeMetadata.__fnct) {
5636 fnc = keyframeMetadata.__fnct;
5637 } else {
5638 fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;
5639 keyframeMetadata.__fnct = fnc;
5640 }
5641 perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));
5642 var distanceInLine = bezierData.segmentLength * perc;
5643 var segmentPerc;
5644 var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;
5645 j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;
5646 flag = true;
5647 jLen = bezierData.points.length;
5648 while (flag) {
5649 addedLength += bezierData.points[j].partialLength;
5650 if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {
5651 kLen = bezierData.points[j].point.length;
5652 for (k = 0; k < kLen; k += 1) {
5653 newValue[k] = bezierData.points[j].point[k];
5654 }
5655 break;
5656 } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {
5657 segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;
5658 kLen = bezierData.points[j].point.length;
5659 for (k = 0; k < kLen; k += 1) {
5660 newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;
5661 }
5662 break;
5663 }
5664 if (j < jLen - 1) {
5665 j += 1;
5666 } else {
5667 flag = false;
5668 }
5669 }
5670 caching._lastPoint = j;
5671 caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;
5672 caching._lastKeyframeIndex = i;
5673 }
5674 } else {
5675 var outX;
5676 var outY;
5677 var inX;
5678 var inY;
5679 var keyValue;
5680 len = keyData.s.length;
5681 endValue = nextKeyData.s || keyData.e;
5682 if (this.sh && keyData.h !== 1) {
5683 if (frameNum >= nextKeyTime) {
5684 newValue[0] = endValue[0];
5685 newValue[1] = endValue[1];
5686 newValue[2] = endValue[2];
5687 } else if (frameNum <= keyTime) {
5688 newValue[0] = keyData.s[0];
5689 newValue[1] = keyData.s[1];
5690 newValue[2] = keyData.s[2];
5691 } else {
5692 var quatStart = createQuaternion(keyData.s);
5693 var quatEnd = createQuaternion(endValue);
5694 var time = (frameNum - keyTime) / (nextKeyTime - keyTime);
5695 quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));
5696 }
5697 } else {
5698 for (i = 0; i < len; i += 1) {
5699 if (keyData.h !== 1) {
5700 if (frameNum >= nextKeyTime) {
5701 perc = 1;
5702 } else if (frameNum < keyTime) {
5703 perc = 0;
5704 } else {
5705 if (keyData.o.x.constructor === Array) {
5706 if (!keyframeMetadata.__fnct) {
5707 keyframeMetadata.__fnct = [];
5708 }
5709 if (!keyframeMetadata.__fnct[i]) {
5710 outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];
5711 outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];
5712 inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];
5713 inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];
5714 fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;
5715 keyframeMetadata.__fnct[i] = fnc;
5716 } else {
5717 fnc = keyframeMetadata.__fnct[i];
5718 }
5719 } else if (!keyframeMetadata.__fnct) {
5720 outX = keyData.o.x;
5721 outY = keyData.o.y;
5722 inX = keyData.i.x;
5723 inY = keyData.i.y;
5724 fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;
5725 keyData.keyframeMetadata = fnc;
5726 } else {
5727 fnc = keyframeMetadata.__fnct;
5728 }
5729 perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));
5730 }
5731 }
5732 endValue = nextKeyData.s || keyData.e;
5733 keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;
5734 if (this.propType === 'multidimensional') {
5735 newValue[i] = keyValue;
5736 } else {
5737 newValue = keyValue;
5738 }
5739 }
5740 }
5741 }
5742 caching.lastIndex = iterationIndex;
5743 return newValue;
5744 }
5745
5746 // based on @Toji's https://github.com/toji/gl-matrix/
5747 function slerp(a, b, t) {
5748 var out = [];
5749 var ax = a[0];
5750 var ay = a[1];
5751 var az = a[2];
5752 var aw = a[3];
5753 var bx = b[0];
5754 var by = b[1];
5755 var bz = b[2];
5756 var bw = b[3];
5757 var omega;
5758 var cosom;
5759 var sinom;
5760 var scale0;
5761 var scale1;
5762 cosom = ax * bx + ay * by + az * bz + aw * bw;
5763 if (cosom < 0.0) {
5764 cosom = -cosom;
5765 bx = -bx;
5766 by = -by;
5767 bz = -bz;
5768 bw = -bw;
5769 }
5770 if (1.0 - cosom > 0.000001) {
5771 omega = Math.acos(cosom);
5772 sinom = Math.sin(omega);
5773 scale0 = Math.sin((1.0 - t) * omega) / sinom;
5774 scale1 = Math.sin(t * omega) / sinom;
5775 } else {
5776 scale0 = 1.0 - t;
5777 scale1 = t;
5778 }
5779 out[0] = scale0 * ax + scale1 * bx;
5780 out[1] = scale0 * ay + scale1 * by;
5781 out[2] = scale0 * az + scale1 * bz;
5782 out[3] = scale0 * aw + scale1 * bw;
5783 return out;
5784 }
5785 function quaternionToEuler(out, quat) {
5786 var qx = quat[0];
5787 var qy = quat[1];
5788 var qz = quat[2];
5789 var qw = quat[3];
5790 var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);
5791 var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);
5792 var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);
5793 out[0] = heading / degToRads;
5794 out[1] = attitude / degToRads;
5795 out[2] = bank / degToRads;
5796 }
5797 function createQuaternion(values) {
5798 var heading = values[0] * degToRads;
5799 var attitude = values[1] * degToRads;
5800 var bank = values[2] * degToRads;
5801 var c1 = Math.cos(heading / 2);
5802 var c2 = Math.cos(attitude / 2);
5803 var c3 = Math.cos(bank / 2);
5804 var s1 = Math.sin(heading / 2);
5805 var s2 = Math.sin(attitude / 2);
5806 var s3 = Math.sin(bank / 2);
5807 var w = c1 * c2 * c3 - s1 * s2 * s3;
5808 var x = s1 * s2 * c3 + c1 * c2 * s3;
5809 var y = s1 * c2 * c3 + c1 * s2 * s3;
5810 var z = c1 * s2 * c3 - s1 * c2 * s3;
5811 return [x, y, z, w];
5812 }
5813 function getValueAtCurrentTime() {
5814 var frameNum = this.comp.renderedFrame - this.offsetTime;
5815 var initTime = this.keyframes[0].t - this.offsetTime;
5816 var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;
5817 if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {
5818 if (this._caching.lastFrame >= frameNum) {
5819 this._caching._lastKeyframeIndex = -1;
5820 this._caching.lastIndex = 0;
5821 }
5822 var renderResult = this.interpolateValue(frameNum, this._caching);
5823 this.pv = renderResult;
5824 }
5825 this._caching.lastFrame = frameNum;
5826 return this.pv;
5827 }
5828 function setVValue(val) {
5829 var multipliedValue;
5830 if (this.propType === 'unidimensional') {
5831 multipliedValue = val * this.mult;
5832 if (mathAbs(this.v - multipliedValue) > 0.00001) {
5833 this.v = multipliedValue;
5834 this._mdf = true;
5835 }
5836 } else {
5837 var i = 0;
5838 var len = this.v.length;
5839 while (i < len) {
5840 multipliedValue = val[i] * this.mult;
5841 if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {
5842 this.v[i] = multipliedValue;
5843 this._mdf = true;
5844 }
5845 i += 1;
5846 }
5847 }
5848 }
5849 function processEffectsSequence() {
5850 if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {
5851 return;
5852 }
5853 if (this.lock) {
5854 this.setVValue(this.pv);
5855 return;
5856 }
5857 this.lock = true;
5858 this._mdf = this._isFirstFrame;
5859 var i;
5860 var len = this.effectsSequence.length;
5861 var finalValue = this.kf ? this.pv : this.data.k;
5862 for (i = 0; i < len; i += 1) {
5863 finalValue = this.effectsSequence[i](finalValue);
5864 }
5865 this.setVValue(finalValue);
5866 this._isFirstFrame = false;
5867 this.lock = false;
5868 this.frameId = this.elem.globalData.frameId;
5869 }
5870 function addEffect(effectFunction) {
5871 this.effectsSequence.push(effectFunction);
5872 this.container.addDynamicProperty(this);
5873 }
5874 function ValueProperty(elem, data, mult, container) {
5875 this.propType = 'unidimensional';
5876 this.mult = mult || 1;
5877 this.data = data;
5878 this.v = mult ? data.k * mult : data.k;
5879 this.pv = data.k;
5880 this._mdf = false;
5881 this.elem = elem;
5882 this.container = container;
5883 this.comp = elem.comp;
5884 this.k = false;
5885 this.kf = false;
5886 this.vel = 0;
5887 this.effectsSequence = [];
5888 this._isFirstFrame = true;
5889 this.getValue = processEffectsSequence;
5890 this.setVValue = setVValue;
5891 this.addEffect = addEffect;
5892 }
5893 function MultiDimensionalProperty(elem, data, mult, container) {
5894 this.propType = 'multidimensional';
5895 this.mult = mult || 1;
5896 this.data = data;
5897 this._mdf = false;
5898 this.elem = elem;
5899 this.container = container;
5900 this.comp = elem.comp;
5901 this.k = false;
5902 this.kf = false;
5903 this.frameId = -1;
5904 var i;
5905 var len = data.k.length;
5906 this.v = createTypedArray('float32', len);
5907 this.pv = createTypedArray('float32', len);
5908 this.vel = createTypedArray('float32', len);
5909 for (i = 0; i < len; i += 1) {
5910 this.v[i] = data.k[i] * this.mult;
5911 this.pv[i] = data.k[i];
5912 }
5913 this._isFirstFrame = true;
5914 this.effectsSequence = [];
5915 this.getValue = processEffectsSequence;
5916 this.setVValue = setVValue;
5917 this.addEffect = addEffect;
5918 }
5919 function KeyframedValueProperty(elem, data, mult, container) {
5920 this.propType = 'unidimensional';
5921 this.keyframes = data.k;
5922 this.keyframesMetadata = [];
5923 this.offsetTime = elem.data.st;
5924 this.frameId = -1;
5925 this._caching = {
5926 lastFrame: initFrame,
5927 lastIndex: 0,
5928 value: 0,
5929 _lastKeyframeIndex: -1
5930 };
5931 this.k = true;
5932 this.kf = true;
5933 this.data = data;
5934 this.mult = mult || 1;
5935 this.elem = elem;
5936 this.container = container;
5937 this.comp = elem.comp;
5938 this.v = initFrame;
5939 this.pv = initFrame;
5940 this._isFirstFrame = true;
5941 this.getValue = processEffectsSequence;
5942 this.setVValue = setVValue;
5943 this.interpolateValue = interpolateValue;
5944 this.effectsSequence = [getValueAtCurrentTime.bind(this)];
5945 this.addEffect = addEffect;
5946 }
5947 function KeyframedMultidimensionalProperty(elem, data, mult, container) {
5948 this.propType = 'multidimensional';
5949 var i;
5950 var len = data.k.length;
5951 var s;
5952 var e;
5953 var to;
5954 var ti;
5955 for (i = 0; i < len - 1; i += 1) {
5956 if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {
5957 s = data.k[i].s;
5958 e = data.k[i + 1].s;
5959 to = data.k[i].to;
5960 ti = data.k[i].ti;
5961 if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {
5962 data.k[i].to = null;
5963 data.k[i].ti = null;
5964 }
5965 if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {
5966 if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {
5967 data.k[i].to = null;
5968 data.k[i].ti = null;
5969 }
5970 }
5971 }
5972 }
5973 this.effectsSequence = [getValueAtCurrentTime.bind(this)];
5974 this.data = data;
5975 this.keyframes = data.k;
5976 this.keyframesMetadata = [];
5977 this.offsetTime = elem.data.st;
5978 this.k = true;
5979 this.kf = true;
5980 this._isFirstFrame = true;
5981 this.mult = mult || 1;
5982 this.elem = elem;
5983 this.container = container;
5984 this.comp = elem.comp;
5985 this.getValue = processEffectsSequence;
5986 this.setVValue = setVValue;
5987 this.interpolateValue = interpolateValue;
5988 this.frameId = -1;
5989 var arrLen = data.k[0].s.length;
5990 this.v = createTypedArray('float32', arrLen);
5991 this.pv = createTypedArray('float32', arrLen);
5992 for (i = 0; i < arrLen; i += 1) {
5993 this.v[i] = initFrame;
5994 this.pv[i] = initFrame;
5995 }
5996 this._caching = {
5997 lastFrame: initFrame,
5998 lastIndex: 0,
5999 value: createTypedArray('float32', arrLen)
6000 };
6001 this.addEffect = addEffect;
6002 }
6003 var PropertyFactory = function () {
6004 function getProp(elem, data, type, mult, container) {
6005 if (data.sid) {
6006 data = elem.globalData.slotManager.getProp(data);
6007 }
6008 var p;
6009 if (!data.k.length) {
6010 p = new ValueProperty(elem, data, mult, container);
6011 } else if (typeof data.k[0] === 'number') {
6012 p = new MultiDimensionalProperty(elem, data, mult, container);
6013 } else {
6014 switch (type) {
6015 case 0:
6016 p = new KeyframedValueProperty(elem, data, mult, container);
6017 break;
6018 case 1:
6019 p = new KeyframedMultidimensionalProperty(elem, data, mult, container);
6020 break;
6021 default:
6022 break;
6023 }
6024 }
6025 if (p.effectsSequence.length) {
6026 container.addDynamicProperty(p);
6027 }
6028 return p;
6029 }
6030 var ob = {
6031 getProp: getProp
6032 };
6033 return ob;
6034 }();
6035
6036 function DynamicPropertyContainer() {}
6037 DynamicPropertyContainer.prototype = {
6038 addDynamicProperty: function addDynamicProperty(prop) {
6039 if (this.dynamicProperties.indexOf(prop) === -1) {
6040 this.dynamicProperties.push(prop);
6041 this.container.addDynamicProperty(this);
6042 this._isAnimated = true;
6043 }
6044 },
6045 iterateDynamicProperties: function iterateDynamicProperties() {
6046 this._mdf = false;
6047 var i;
6048 var len = this.dynamicProperties.length;
6049 for (i = 0; i < len; i += 1) {
6050 this.dynamicProperties[i].getValue();
6051 if (this.dynamicProperties[i]._mdf) {
6052 this._mdf = true;
6053 }
6054 }
6055 },
6056 initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {
6057 this.container = container;
6058 this.dynamicProperties = [];
6059 this._mdf = false;
6060 this._isAnimated = false;
6061 }
6062 };
6063
6064 var pointPool = function () {
6065 function create() {
6066 return createTypedArray('float32', 2);
6067 }
6068 return poolFactory(8, create);
6069 }();
6070
6071 function ShapePath() {
6072 this.c = false;
6073 this._length = 0;
6074 this._maxLength = 8;
6075 this.v = createSizedArray(this._maxLength);
6076 this.o = createSizedArray(this._maxLength);
6077 this.i = createSizedArray(this._maxLength);
6078 }
6079 ShapePath.prototype.setPathData = function (closed, len) {
6080 this.c = closed;
6081 this.setLength(len);
6082 var i = 0;
6083 while (i < len) {
6084 this.v[i] = pointPool.newElement();
6085 this.o[i] = pointPool.newElement();
6086 this.i[i] = pointPool.newElement();
6087 i += 1;
6088 }
6089 };
6090 ShapePath.prototype.setLength = function (len) {
6091 while (this._maxLength < len) {
6092 this.doubleArrayLength();
6093 }
6094 this._length = len;
6095 };
6096 ShapePath.prototype.doubleArrayLength = function () {
6097 this.v = this.v.concat(createSizedArray(this._maxLength));
6098 this.i = this.i.concat(createSizedArray(this._maxLength));
6099 this.o = this.o.concat(createSizedArray(this._maxLength));
6100 this._maxLength *= 2;
6101 };
6102 ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {
6103 var arr;
6104 this._length = Math.max(this._length, pos + 1);
6105 if (this._length >= this._maxLength) {
6106 this.doubleArrayLength();
6107 }
6108 switch (type) {
6109 case 'v':
6110 arr = this.v;
6111 break;
6112 case 'i':
6113 arr = this.i;
6114 break;
6115 case 'o':
6116 arr = this.o;
6117 break;
6118 default:
6119 arr = [];
6120 break;
6121 }
6122 if (!arr[pos] || arr[pos] && !replace) {
6123 arr[pos] = pointPool.newElement();
6124 }
6125 arr[pos][0] = x;
6126 arr[pos][1] = y;
6127 };
6128 ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {
6129 this.setXYAt(vX, vY, 'v', pos, replace);
6130 this.setXYAt(oX, oY, 'o', pos, replace);
6131 this.setXYAt(iX, iY, 'i', pos, replace);
6132 };
6133 ShapePath.prototype.reverse = function () {
6134 var newPath = new ShapePath();
6135 newPath.setPathData(this.c, this._length);
6136 var vertices = this.v;
6137 var outPoints = this.o;
6138 var inPoints = this.i;
6139 var init = 0;
6140 if (this.c) {
6141 newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);
6142 init = 1;
6143 }
6144 var cnt = this._length - 1;
6145 var len = this._length;
6146 var i;
6147 for (i = init; i < len; i += 1) {
6148 newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);
6149 cnt -= 1;
6150 }
6151 return newPath;
6152 };
6153 ShapePath.prototype.length = function () {
6154 return this._length;
6155 };
6156
6157 var shapePool = function () {
6158 function create() {
6159 return new ShapePath();
6160 }
6161 function release(shapePath) {
6162 var len = shapePath._length;
6163 var i;
6164 for (i = 0; i < len; i += 1) {
6165 pointPool.release(shapePath.v[i]);
6166 pointPool.release(shapePath.i[i]);
6167 pointPool.release(shapePath.o[i]);
6168 shapePath.v[i] = null;
6169 shapePath.i[i] = null;
6170 shapePath.o[i] = null;
6171 }
6172 shapePath._length = 0;
6173 shapePath.c = false;
6174 }
6175 function clone(shape) {
6176 var cloned = factory.newElement();
6177 var i;
6178 var len = shape._length === undefined ? shape.v.length : shape._length;
6179 cloned.setLength(len);
6180 cloned.c = shape.c;
6181 for (i = 0; i < len; i += 1) {
6182 cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);
6183 }
6184 return cloned;
6185 }
6186 var factory = poolFactory(4, create, release);
6187 factory.clone = clone;
6188 return factory;
6189 }();
6190
6191 function ShapeCollection() {
6192 this._length = 0;
6193 this._maxLength = 4;
6194 this.shapes = createSizedArray(this._maxLength);
6195 }
6196 ShapeCollection.prototype.addShape = function (shapeData) {
6197 if (this._length === this._maxLength) {
6198 this.shapes = this.shapes.concat(createSizedArray(this._maxLength));
6199 this._maxLength *= 2;
6200 }
6201 this.shapes[this._length] = shapeData;
6202 this._length += 1;
6203 };
6204 ShapeCollection.prototype.releaseShapes = function () {
6205 var i;
6206 for (i = 0; i < this._length; i += 1) {
6207 shapePool.release(this.shapes[i]);
6208 }
6209 this._length = 0;
6210 };
6211
6212 var shapeCollectionPool = function () {
6213 var ob = {
6214 newShapeCollection: newShapeCollection,
6215 release: release
6216 };
6217 var _length = 0;
6218 var _maxLength = 4;
6219 var pool = createSizedArray(_maxLength);
6220 function newShapeCollection() {
6221 var shapeCollection;
6222 if (_length) {
6223 _length -= 1;
6224 shapeCollection = pool[_length];
6225 } else {
6226 shapeCollection = new ShapeCollection();
6227 }
6228 return shapeCollection;
6229 }
6230 function release(shapeCollection) {
6231 var i;
6232 var len = shapeCollection._length;
6233 for (i = 0; i < len; i += 1) {
6234 shapePool.release(shapeCollection.shapes[i]);
6235 }
6236 shapeCollection._length = 0;
6237 if (_length === _maxLength) {
6238 pool = pooling["double"](pool);
6239 _maxLength *= 2;
6240 }
6241 pool[_length] = shapeCollection;
6242 _length += 1;
6243 }
6244 return ob;
6245 }();
6246
6247 var ShapePropertyFactory = function () {
6248 var initFrame = -999999;
6249 function interpolateShape(frameNum, previousValue, caching) {
6250 var iterationIndex = caching.lastIndex;
6251 var keyPropS;
6252 var keyPropE;
6253 var isHold;
6254 var j;
6255 var k;
6256 var jLen;
6257 var kLen;
6258 var perc;
6259 var vertexValue;
6260 var kf = this.keyframes;
6261 if (frameNum < kf[0].t - this.offsetTime) {
6262 keyPropS = kf[0].s[0];
6263 isHold = true;
6264 iterationIndex = 0;
6265 } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {
6266 keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];
6267 /* if(kf[kf.length - 1].s){
6268 keyPropS = kf[kf.length - 1].s[0];
6269 }else{
6270 keyPropS = kf[kf.length - 2].e[0];
6271 } */
6272 isHold = true;
6273 } else {
6274 var i = iterationIndex;
6275 var len = kf.length - 1;
6276 var flag = true;
6277 var keyData;
6278 var nextKeyData;
6279 var keyframeMetadata;
6280 while (flag) {
6281 keyData = kf[i];
6282 nextKeyData = kf[i + 1];
6283 if (nextKeyData.t - this.offsetTime > frameNum) {
6284 break;
6285 }
6286 if (i < len - 1) {
6287 i += 1;
6288 } else {
6289 flag = false;
6290 }
6291 }
6292 keyframeMetadata = this.keyframesMetadata[i] || {};
6293 isHold = keyData.h === 1;
6294 iterationIndex = i;
6295 if (!isHold) {
6296 if (frameNum >= nextKeyData.t - this.offsetTime) {
6297 perc = 1;
6298 } else if (frameNum < keyData.t - this.offsetTime) {
6299 perc = 0;
6300 } else {
6301 var fnc;
6302 if (keyframeMetadata.__fnct) {
6303 fnc = keyframeMetadata.__fnct;
6304 } else {
6305 fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;
6306 keyframeMetadata.__fnct = fnc;
6307 }
6308 perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));
6309 }
6310 keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];
6311 }
6312 keyPropS = keyData.s[0];
6313 }
6314 jLen = previousValue._length;
6315 kLen = keyPropS.i[0].length;
6316 caching.lastIndex = iterationIndex;
6317 for (j = 0; j < jLen; j += 1) {
6318 for (k = 0; k < kLen; k += 1) {
6319 vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;
6320 previousValue.i[j][k] = vertexValue;
6321 vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;
6322 previousValue.o[j][k] = vertexValue;
6323 vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;
6324 previousValue.v[j][k] = vertexValue;
6325 }
6326 }
6327 }
6328 function interpolateShapeCurrentTime() {
6329 var frameNum = this.comp.renderedFrame - this.offsetTime;
6330 var initTime = this.keyframes[0].t - this.offsetTime;
6331 var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;
6332 var lastFrame = this._caching.lastFrame;
6333 if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {
6334 /// /
6335 this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;
6336 this.interpolateShape(frameNum, this.pv, this._caching);
6337 /// /
6338 }
6339 this._caching.lastFrame = frameNum;
6340 return this.pv;
6341 }
6342 function resetShape() {
6343 this.paths = this.localShapeCollection;
6344 }
6345 function shapesEqual(shape1, shape2) {
6346 if (shape1._length !== shape2._length || shape1.c !== shape2.c) {
6347 return false;
6348 }
6349 var i;
6350 var len = shape1._length;
6351 for (i = 0; i < len; i += 1) {
6352 if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {
6353 return false;
6354 }
6355 }
6356 return true;
6357 }
6358 function setVValue(newPath) {
6359 if (!shapesEqual(this.v, newPath)) {
6360 this.v = shapePool.clone(newPath);
6361 this.localShapeCollection.releaseShapes();
6362 this.localShapeCollection.addShape(this.v);
6363 this._mdf = true;
6364 this.paths = this.localShapeCollection;
6365 }
6366 }
6367 function processEffectsSequence() {
6368 if (this.elem.globalData.frameId === this.frameId) {
6369 return;
6370 }
6371 if (!this.effectsSequence.length) {
6372 this._mdf = false;
6373 return;
6374 }
6375 if (this.lock) {
6376 this.setVValue(this.pv);
6377 return;
6378 }
6379 this.lock = true;
6380 this._mdf = false;
6381 var finalValue;
6382 if (this.kf) {
6383 finalValue = this.pv;
6384 } else if (this.data.ks) {
6385 finalValue = this.data.ks.k;
6386 } else {
6387 finalValue = this.data.pt.k;
6388 }
6389 var i;
6390 var len = this.effectsSequence.length;
6391 for (i = 0; i < len; i += 1) {
6392 finalValue = this.effectsSequence[i](finalValue);
6393 }
6394 this.setVValue(finalValue);
6395 this.lock = false;
6396 this.frameId = this.elem.globalData.frameId;
6397 }
6398 function ShapeProperty(elem, data, type) {
6399 this.propType = 'shape';
6400 this.comp = elem.comp;
6401 this.container = elem;
6402 this.elem = elem;
6403 this.data = data;
6404 this.k = false;
6405 this.kf = false;
6406 this._mdf = false;
6407 var pathData = type === 3 ? data.pt.k : data.ks.k;
6408 this.v = shapePool.clone(pathData);
6409 this.pv = shapePool.clone(this.v);
6410 this.localShapeCollection = shapeCollectionPool.newShapeCollection();
6411 this.paths = this.localShapeCollection;
6412 this.paths.addShape(this.v);
6413 this.reset = resetShape;
6414 this.effectsSequence = [];
6415 }
6416 function addEffect(effectFunction) {
6417 this.effectsSequence.push(effectFunction);
6418 this.container.addDynamicProperty(this);
6419 }
6420 ShapeProperty.prototype.interpolateShape = interpolateShape;
6421 ShapeProperty.prototype.getValue = processEffectsSequence;
6422 ShapeProperty.prototype.setVValue = setVValue;
6423 ShapeProperty.prototype.addEffect = addEffect;
6424 function KeyframedShapeProperty(elem, data, type) {
6425 this.propType = 'shape';
6426 this.comp = elem.comp;
6427 this.elem = elem;
6428 this.container = elem;
6429 this.offsetTime = elem.data.st;
6430 this.keyframes = type === 3 ? data.pt.k : data.ks.k;
6431 this.keyframesMetadata = [];
6432 this.k = true;
6433 this.kf = true;
6434 var len = this.keyframes[0].s[0].i.length;
6435 this.v = shapePool.newElement();
6436 this.v.setPathData(this.keyframes[0].s[0].c, len);
6437 this.pv = shapePool.clone(this.v);
6438 this.localShapeCollection = shapeCollectionPool.newShapeCollection();
6439 this.paths = this.localShapeCollection;
6440 this.paths.addShape(this.v);
6441 this.lastFrame = initFrame;
6442 this.reset = resetShape;
6443 this._caching = {
6444 lastFrame: initFrame,
6445 lastIndex: 0
6446 };
6447 this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];
6448 }
6449 KeyframedShapeProperty.prototype.getValue = processEffectsSequence;
6450 KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;
6451 KeyframedShapeProperty.prototype.setVValue = setVValue;
6452 KeyframedShapeProperty.prototype.addEffect = addEffect;
6453 var EllShapeProperty = function () {
6454 var cPoint = roundCorner;
6455 function EllShapePropertyFactory(elem, data) {
6456 this.v = shapePool.newElement();
6457 this.v.setPathData(true, 4);
6458 this.localShapeCollection = shapeCollectionPool.newShapeCollection();
6459 this.paths = this.localShapeCollection;
6460 this.localShapeCollection.addShape(this.v);
6461 this.d = data.d;
6462 this.elem = elem;
6463 this.comp = elem.comp;
6464 this.frameId = -1;
6465 this.initDynamicPropertyContainer(elem);
6466 this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);
6467 this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);
6468 if (this.dynamicProperties.length) {
6469 this.k = true;
6470 } else {
6471 this.k = false;
6472 this.convertEllToPath();
6473 }
6474 }
6475 EllShapePropertyFactory.prototype = {
6476 reset: resetShape,
6477 getValue: function getValue() {
6478 if (this.elem.globalData.frameId === this.frameId) {
6479 return;
6480 }
6481 this.frameId = this.elem.globalData.frameId;
6482 this.iterateDynamicProperties();
6483 if (this._mdf) {
6484 this.convertEllToPath();
6485 }
6486 },
6487 convertEllToPath: function convertEllToPath() {
6488 var p0 = this.p.v[0];
6489 var p1 = this.p.v[1];
6490 var s0 = this.s.v[0] / 2;
6491 var s1 = this.s.v[1] / 2;
6492 var _cw = this.d !== 3;
6493 var _v = this.v;
6494 _v.v[0][0] = p0;
6495 _v.v[0][1] = p1 - s1;
6496 _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;
6497 _v.v[1][1] = p1;
6498 _v.v[2][0] = p0;
6499 _v.v[2][1] = p1 + s1;
6500 _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;
6501 _v.v[3][1] = p1;
6502 _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;
6503 _v.i[0][1] = p1 - s1;
6504 _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;
6505 _v.i[1][1] = p1 - s1 * cPoint;
6506 _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;
6507 _v.i[2][1] = p1 + s1;
6508 _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;
6509 _v.i[3][1] = p1 + s1 * cPoint;
6510 _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;
6511 _v.o[0][1] = p1 - s1;
6512 _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;
6513 _v.o[1][1] = p1 + s1 * cPoint;
6514 _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;
6515 _v.o[2][1] = p1 + s1;
6516 _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;
6517 _v.o[3][1] = p1 - s1 * cPoint;
6518 }
6519 };
6520 extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);
6521 return EllShapePropertyFactory;
6522 }();
6523 var StarShapeProperty = function () {
6524 function StarShapePropertyFactory(elem, data) {
6525 this.v = shapePool.newElement();
6526 this.v.setPathData(true, 0);
6527 this.elem = elem;
6528 this.comp = elem.comp;
6529 this.data = data;
6530 this.frameId = -1;
6531 this.d = data.d;
6532 this.initDynamicPropertyContainer(elem);
6533 if (data.sy === 1) {
6534 this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);
6535 this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);
6536 this.convertToPath = this.convertStarToPath;
6537 } else {
6538 this.convertToPath = this.convertPolygonToPath;
6539 }
6540 this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);
6541 this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);
6542 this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);
6543 this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);
6544 this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);
6545 this.localShapeCollection = shapeCollectionPool.newShapeCollection();
6546 this.localShapeCollection.addShape(this.v);
6547 this.paths = this.localShapeCollection;
6548 if (this.dynamicProperties.length) {
6549 this.k = true;
6550 } else {
6551 this.k = false;
6552 this.convertToPath();
6553 }
6554 }
6555 StarShapePropertyFactory.prototype = {
6556 reset: resetShape,
6557 getValue: function getValue() {
6558 if (this.elem.globalData.frameId === this.frameId) {
6559 return;
6560 }
6561 this.frameId = this.elem.globalData.frameId;
6562 this.iterateDynamicProperties();
6563 if (this._mdf) {
6564 this.convertToPath();
6565 }
6566 },
6567 convertStarToPath: function convertStarToPath() {
6568 var numPts = Math.floor(this.pt.v) * 2;
6569 var angle = Math.PI * 2 / numPts;
6570 /* this.v.v.length = numPts;
6571 this.v.i.length = numPts;
6572 this.v.o.length = numPts; */
6573 var longFlag = true;
6574 var longRad = this.or.v;
6575 var shortRad = this.ir.v;
6576 var longRound = this.os.v;
6577 var shortRound = this.is.v;
6578 var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);
6579 var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);
6580 var i;
6581 var rad;
6582 var roundness;
6583 var perimSegment;
6584 var currentAng = -Math.PI / 2;
6585 currentAng += this.r.v;
6586 var dir = this.data.d === 3 ? -1 : 1;
6587 this.v._length = 0;
6588 for (i = 0; i < numPts; i += 1) {
6589 rad = longFlag ? longRad : shortRad;
6590 roundness = longFlag ? longRound : shortRound;
6591 perimSegment = longFlag ? longPerimSegment : shortPerimSegment;
6592 var x = rad * Math.cos(currentAng);
6593 var y = rad * Math.sin(currentAng);
6594 var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);
6595 var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);
6596 x += +this.p.v[0];
6597 y += +this.p.v[1];
6598 this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);
6599
6600 /* this.v.v[i] = [x,y];
6601 this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];
6602 this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];
6603 this.v._length = numPts; */
6604 longFlag = !longFlag;
6605 currentAng += angle * dir;
6606 }
6607 },
6608 convertPolygonToPath: function convertPolygonToPath() {
6609 var numPts = Math.floor(this.pt.v);
6610 var angle = Math.PI * 2 / numPts;
6611 var rad = this.or.v;
6612 var roundness = this.os.v;
6613 var perimSegment = 2 * Math.PI * rad / (numPts * 4);
6614 var i;
6615 var currentAng = -Math.PI * 0.5;
6616 var dir = this.data.d === 3 ? -1 : 1;
6617 currentAng += this.r.v;
6618 this.v._length = 0;
6619 for (i = 0; i < numPts; i += 1) {
6620 var x = rad * Math.cos(currentAng);
6621 var y = rad * Math.sin(currentAng);
6622 var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);
6623 var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);
6624 x += +this.p.v[0];
6625 y += +this.p.v[1];
6626 this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);
6627 currentAng += angle * dir;
6628 }
6629 this.paths.length = 0;
6630 this.paths[0] = this.v;
6631 }
6632 };
6633 extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);
6634 return StarShapePropertyFactory;
6635 }();
6636 var RectShapeProperty = function () {
6637 function RectShapePropertyFactory(elem, data) {
6638 this.v = shapePool.newElement();
6639 this.v.c = true;
6640 this.localShapeCollection = shapeCollectionPool.newShapeCollection();
6641 this.localShapeCollection.addShape(this.v);
6642 this.paths = this.localShapeCollection;
6643 this.elem = elem;
6644 this.comp = elem.comp;
6645 this.frameId = -1;
6646 this.d = data.d;
6647 this.initDynamicPropertyContainer(elem);
6648 this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);
6649 this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);
6650 this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);
6651 if (this.dynamicProperties.length) {
6652 this.k = true;
6653 } else {
6654 this.k = false;
6655 this.convertRectToPath();
6656 }
6657 }
6658 RectShapePropertyFactory.prototype = {
6659 convertRectToPath: function convertRectToPath() {
6660 var p0 = this.p.v[0];
6661 var p1 = this.p.v[1];
6662 var v0 = this.s.v[0] / 2;
6663 var v1 = this.s.v[1] / 2;
6664 var round = bmMin(v0, v1, this.r.v);
6665 var cPoint = round * (1 - roundCorner);
6666 this.v._length = 0;
6667 if (this.d === 2 || this.d === 1) {
6668 this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);
6669 this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);
6670 if (round !== 0) {
6671 this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);
6672 this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);
6673 this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);
6674 this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);
6675 this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);
6676 this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);
6677 } else {
6678 this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);
6679 this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);
6680 }
6681 } else {
6682 this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);
6683 if (round !== 0) {
6684 this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);
6685 this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);
6686 this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);
6687 this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);
6688 this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);
6689 this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);
6690 this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);
6691 } else {
6692 this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);
6693 this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);
6694 this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);
6695 }
6696 }
6697 },
6698 getValue: function getValue() {
6699 if (this.elem.globalData.frameId === this.frameId) {
6700 return;
6701 }
6702 this.frameId = this.elem.globalData.frameId;
6703 this.iterateDynamicProperties();
6704 if (this._mdf) {
6705 this.convertRectToPath();
6706 }
6707 },
6708 reset: resetShape
6709 };
6710 extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);
6711 return RectShapePropertyFactory;
6712 }();
6713 function getShapeProp(elem, data, type) {
6714 var prop;
6715 if (type === 3 || type === 4) {
6716 var dataProp = type === 3 ? data.pt : data.ks;
6717 var keys = dataProp.k;
6718 if (keys.length) {
6719 prop = new KeyframedShapeProperty(elem, data, type);
6720 } else {
6721 prop = new ShapeProperty(elem, data, type);
6722 }
6723 } else if (type === 5) {
6724 prop = new RectShapeProperty(elem, data);
6725 } else if (type === 6) {
6726 prop = new EllShapeProperty(elem, data);
6727 } else if (type === 7) {
6728 prop = new StarShapeProperty(elem, data);
6729 }
6730 if (prop.k) {
6731 elem.addDynamicProperty(prop);
6732 }
6733 return prop;
6734 }
6735 function getConstructorFunction() {
6736 return ShapeProperty;
6737 }
6738 function getKeyframedConstructorFunction() {
6739 return KeyframedShapeProperty;
6740 }
6741 var ob = {};
6742 ob.getShapeProp = getShapeProp;
6743 ob.getConstructorFunction = getConstructorFunction;
6744 ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;
6745 return ob;
6746 }();
6747
6748 /*!
6749 Transformation Matrix v2.0
6750 (c) Epistemex 2014-2015
6751 www.epistemex.com
6752 By Ken Fyrstenberg
6753 Contributions by leeoniya.
6754 License: MIT, header required.
6755 */
6756
6757 /**
6758 * 2D transformation matrix object initialized with identity matrix.
6759 *
6760 * The matrix can synchronize a canvas context by supplying the context
6761 * as an argument, or later apply current absolute transform to an
6762 * existing context.
6763 *
6764 * All values are handled as floating point values.
6765 *
6766 * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix
6767 * @prop {number} a - scale x
6768 * @prop {number} b - shear y
6769 * @prop {number} c - shear x
6770 * @prop {number} d - scale y
6771 * @prop {number} e - translate x
6772 * @prop {number} f - translate y
6773 * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context
6774 * @constructor
6775 */
6776
6777 var Matrix = function () {
6778 var _cos = Math.cos;
6779 var _sin = Math.sin;
6780 var _tan = Math.tan;
6781 var _rnd = Math.round;
6782 function reset() {
6783 this.props[0] = 1;
6784 this.props[1] = 0;
6785 this.props[2] = 0;
6786 this.props[3] = 0;
6787 this.props[4] = 0;
6788 this.props[5] = 1;
6789 this.props[6] = 0;
6790 this.props[7] = 0;
6791 this.props[8] = 0;
6792 this.props[9] = 0;
6793 this.props[10] = 1;
6794 this.props[11] = 0;
6795 this.props[12] = 0;
6796 this.props[13] = 0;
6797 this.props[14] = 0;
6798 this.props[15] = 1;
6799 return this;
6800 }
6801 function rotate(angle) {
6802 if (angle === 0) {
6803 return this;
6804 }
6805 var mCos = _cos(angle);
6806 var mSin = _sin(angle);
6807 return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
6808 }
6809 function rotateX(angle) {
6810 if (angle === 0) {
6811 return this;
6812 }
6813 var mCos = _cos(angle);
6814 var mSin = _sin(angle);
6815 return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);
6816 }
6817 function rotateY(angle) {
6818 if (angle === 0) {
6819 return this;
6820 }
6821 var mCos = _cos(angle);
6822 var mSin = _sin(angle);
6823 return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);
6824 }
6825 function rotateZ(angle) {
6826 if (angle === 0) {
6827 return this;
6828 }
6829 var mCos = _cos(angle);
6830 var mSin = _sin(angle);
6831 return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
6832 }
6833 function shear(sx, sy) {
6834 return this._t(1, sy, sx, 1, 0, 0);
6835 }
6836 function skew(ax, ay) {
6837 return this.shear(_tan(ax), _tan(ay));
6838 }
6839 function skewFromAxis(ax, angle) {
6840 var mCos = _cos(angle);
6841 var mSin = _sin(angle);
6842 return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
6843 // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);
6844 }
6845 function scale(sx, sy, sz) {
6846 if (!sz && sz !== 0) {
6847 sz = 1;
6848 }
6849 if (sx === 1 && sy === 1 && sz === 1) {
6850 return this;
6851 }
6852 return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);
6853 }
6854 function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {
6855 this.props[0] = a;
6856 this.props[1] = b;
6857 this.props[2] = c;
6858 this.props[3] = d;
6859 this.props[4] = e;
6860 this.props[5] = f;
6861 this.props[6] = g;
6862 this.props[7] = h;
6863 this.props[8] = i;
6864 this.props[9] = j;
6865 this.props[10] = k;
6866 this.props[11] = l;
6867 this.props[12] = m;
6868 this.props[13] = n;
6869 this.props[14] = o;
6870 this.props[15] = p;
6871 return this;
6872 }
6873 function translate(tx, ty, tz) {
6874 tz = tz || 0;
6875 if (tx !== 0 || ty !== 0 || tz !== 0) {
6876 return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);
6877 }
6878 return this;
6879 }
6880 function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {
6881 var _p = this.props;
6882 if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {
6883 // NOTE: commenting this condition because TurboFan deoptimizes code when present
6884 // if(m2 !== 0 || n2 !== 0 || o2 !== 0){
6885 _p[12] = _p[12] * a2 + _p[15] * m2;
6886 _p[13] = _p[13] * f2 + _p[15] * n2;
6887 _p[14] = _p[14] * k2 + _p[15] * o2;
6888 _p[15] *= p2;
6889 // }
6890 this._identityCalculated = false;
6891 return this;
6892 }
6893 var a1 = _p[0];
6894 var b1 = _p[1];
6895 var c1 = _p[2];
6896 var d1 = _p[3];
6897 var e1 = _p[4];
6898 var f1 = _p[5];
6899 var g1 = _p[6];
6900 var h1 = _p[7];
6901 var i1 = _p[8];
6902 var j1 = _p[9];
6903 var k1 = _p[10];
6904 var l1 = _p[11];
6905 var m1 = _p[12];
6906 var n1 = _p[13];
6907 var o1 = _p[14];
6908 var p1 = _p[15];
6909
6910 /* matrix order (canvas compatible):
6911 * ace
6912 * bdf
6913 * 001
6914 */
6915 _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;
6916 _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;
6917 _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;
6918 _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;
6919 _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;
6920 _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;
6921 _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;
6922 _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;
6923 _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;
6924 _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;
6925 _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;
6926 _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;
6927 _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;
6928 _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;
6929 _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;
6930 _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;
6931 this._identityCalculated = false;
6932 return this;
6933 }
6934 function multiply(matrix) {
6935 var matrixProps = matrix.props;
6936 return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);
6937 }
6938 function isIdentity() {
6939 if (!this._identityCalculated) {
6940 this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);
6941 this._identityCalculated = true;
6942 }
6943 return this._identity;
6944 }
6945 function equals(matr) {
6946 var i = 0;
6947 while (i < 16) {
6948 if (matr.props[i] !== this.props[i]) {
6949 return false;
6950 }
6951 i += 1;
6952 }
6953 return true;
6954 }
6955 function clone(matr) {
6956 var i;
6957 for (i = 0; i < 16; i += 1) {
6958 matr.props[i] = this.props[i];
6959 }
6960 return matr;
6961 }
6962 function cloneFromProps(props) {
6963 var i;
6964 for (i = 0; i < 16; i += 1) {
6965 this.props[i] = props[i];
6966 }
6967 }
6968 function applyToPoint(x, y, z) {
6969 return {
6970 x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],
6971 y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],
6972 z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]
6973 };
6974 /* return {
6975 x: x * me.a + y * me.c + me.e,
6976 y: x * me.b + y * me.d + me.f
6977 }; */
6978 }
6979 function applyToX(x, y, z) {
6980 return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];
6981 }
6982 function applyToY(x, y, z) {
6983 return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];
6984 }
6985 function applyToZ(x, y, z) {
6986 return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];
6987 }
6988 function getInverseMatrix() {
6989 var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];
6990 var a = this.props[5] / determinant;
6991 var b = -this.props[1] / determinant;
6992 var c = -this.props[4] / determinant;
6993 var d = this.props[0] / determinant;
6994 var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;
6995 var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;
6996 var inverseMatrix = new Matrix();
6997 inverseMatrix.props[0] = a;
6998 inverseMatrix.props[1] = b;
6999 inverseMatrix.props[4] = c;
7000 inverseMatrix.props[5] = d;
7001 inverseMatrix.props[12] = e;
7002 inverseMatrix.props[13] = f;
7003 return inverseMatrix;
7004 }
7005 function inversePoint(pt) {
7006 var inverseMatrix = this.getInverseMatrix();
7007 return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);
7008 }
7009 function inversePoints(pts) {
7010 var i;
7011 var len = pts.length;
7012 var retPts = [];
7013 for (i = 0; i < len; i += 1) {
7014 retPts[i] = inversePoint(pts[i]);
7015 }
7016 return retPts;
7017 }
7018 function applyToTriplePoints(pt1, pt2, pt3) {
7019 var arr = createTypedArray('float32', 6);
7020 if (this.isIdentity()) {
7021 arr[0] = pt1[0];
7022 arr[1] = pt1[1];
7023 arr[2] = pt2[0];
7024 arr[3] = pt2[1];
7025 arr[4] = pt3[0];
7026 arr[5] = pt3[1];
7027 } else {
7028 var p0 = this.props[0];
7029 var p1 = this.props[1];
7030 var p4 = this.props[4];
7031 var p5 = this.props[5];
7032 var p12 = this.props[12];
7033 var p13 = this.props[13];
7034 arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;
7035 arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;
7036 arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;
7037 arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;
7038 arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;
7039 arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;
7040 }
7041 return arr;
7042 }
7043 function applyToPointArray(x, y, z) {
7044 var arr;
7045 if (this.isIdentity()) {
7046 arr = [x, y, z];
7047 } else {
7048 arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];
7049 }
7050 return arr;
7051 }
7052 function applyToPointStringified(x, y) {
7053 if (this.isIdentity()) {
7054 return x + ',' + y;
7055 }
7056 var _p = this.props;
7057 return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;
7058 }
7059 function toCSS() {
7060 // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.
7061 /* if(this.isIdentity()) {
7062 return '';
7063 } */
7064 var i = 0;
7065 var props = this.props;
7066 var cssValue = 'matrix3d(';
7067 var v = 10000;
7068 while (i < 16) {
7069 cssValue += _rnd(props[i] * v) / v;
7070 cssValue += i === 15 ? ')' : ',';
7071 i += 1;
7072 }
7073 return cssValue;
7074 }
7075 function roundMatrixProperty(val) {
7076 var v = 10000;
7077 if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {
7078 return _rnd(val * v) / v;
7079 }
7080 return val;
7081 }
7082 function to2dCSS() {
7083 // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.
7084 /* if(this.isIdentity()) {
7085 return '';
7086 } */
7087 var props = this.props;
7088 var _a = roundMatrixProperty(props[0]);
7089 var _b = roundMatrixProperty(props[1]);
7090 var _c = roundMatrixProperty(props[4]);
7091 var _d = roundMatrixProperty(props[5]);
7092 var _e = roundMatrixProperty(props[12]);
7093 var _f = roundMatrixProperty(props[13]);
7094 return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';
7095 }
7096 return function () {
7097 this.reset = reset;
7098 this.rotate = rotate;
7099 this.rotateX = rotateX;
7100 this.rotateY = rotateY;
7101 this.rotateZ = rotateZ;
7102 this.skew = skew;
7103 this.skewFromAxis = skewFromAxis;
7104 this.shear = shear;
7105 this.scale = scale;
7106 this.setTransform = setTransform;
7107 this.translate = translate;
7108 this.transform = transform;
7109 this.multiply = multiply;
7110 this.applyToPoint = applyToPoint;
7111 this.applyToX = applyToX;
7112 this.applyToY = applyToY;
7113 this.applyToZ = applyToZ;
7114 this.applyToPointArray = applyToPointArray;
7115 this.applyToTriplePoints = applyToTriplePoints;
7116 this.applyToPointStringified = applyToPointStringified;
7117 this.toCSS = toCSS;
7118 this.to2dCSS = to2dCSS;
7119 this.clone = clone;
7120 this.cloneFromProps = cloneFromProps;
7121 this.equals = equals;
7122 this.inversePoints = inversePoints;
7123 this.inversePoint = inversePoint;
7124 this.getInverseMatrix = getInverseMatrix;
7125 this._t = this.transform;
7126 this.isIdentity = isIdentity;
7127 this._identity = true;
7128 this._identityCalculated = false;
7129 this.props = createTypedArray('float32', 16);
7130 this.reset();
7131 };
7132 }();
7133
7134 function _typeof$3(o) { "@babel/helpers - typeof"; return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$3(o); }
7135 var lottie = {};
7136 var standalone = '__[STANDALONE]__';
7137 var animationData = '__[ANIMATIONDATA]__';
7138 var renderer = '';
7139 function setLocation(href) {
7140 setLocationHref(href);
7141 }
7142 function searchAnimations() {
7143 if (standalone === true) {
7144 animationManager.searchAnimations(animationData, standalone, renderer);
7145 } else {
7146 animationManager.searchAnimations();
7147 }
7148 }
7149 function setSubframeRendering(flag) {
7150 setSubframeEnabled(flag);
7151 }
7152 function setPrefix(prefix) {
7153 setIdPrefix(prefix);
7154 }
7155 function loadAnimation(params) {
7156 if (standalone === true) {
7157 params.animationData = JSON.parse(animationData);
7158 }
7159 return animationManager.loadAnimation(params);
7160 }
7161 function setQuality(value) {
7162 if (typeof value === 'string') {
7163 switch (value) {
7164 case 'high':
7165 setDefaultCurveSegments(200);
7166 break;
7167 default:
7168 case 'medium':
7169 setDefaultCurveSegments(50);
7170 break;
7171 case 'low':
7172 setDefaultCurveSegments(10);
7173 break;
7174 }
7175 } else if (!isNaN(value) && value > 1) {
7176 setDefaultCurveSegments(value);
7177 }
7178 if (getDefaultCurveSegments() >= 50) {
7179 roundValues(false);
7180 } else {
7181 roundValues(true);
7182 }
7183 }
7184 function inBrowser() {
7185 return typeof navigator !== 'undefined';
7186 }
7187 function installPlugin(type, plugin) {
7188 if (type === 'expressions') {
7189 setExpressionsPlugin(plugin);
7190 }
7191 }
7192 function getFactory(name) {
7193 switch (name) {
7194 case 'propertyFactory':
7195 return PropertyFactory;
7196 case 'shapePropertyFactory':
7197 return ShapePropertyFactory;
7198 case 'matrix':
7199 return Matrix;
7200 default:
7201 return null;
7202 }
7203 }
7204 lottie.play = animationManager.play;
7205 lottie.pause = animationManager.pause;
7206 lottie.setLocationHref = setLocation;
7207 lottie.togglePause = animationManager.togglePause;
7208 lottie.setSpeed = animationManager.setSpeed;
7209 lottie.setDirection = animationManager.setDirection;
7210 lottie.stop = animationManager.stop;
7211 lottie.searchAnimations = searchAnimations;
7212 lottie.registerAnimation = animationManager.registerAnimation;
7213 lottie.loadAnimation = loadAnimation;
7214 lottie.setSubframeRendering = setSubframeRendering;
7215 lottie.resize = animationManager.resize;
7216 // lottie.start = start;
7217 lottie.goToAndStop = animationManager.goToAndStop;
7218 lottie.destroy = animationManager.destroy;
7219 lottie.setQuality = setQuality;
7220 lottie.inBrowser = inBrowser;
7221 lottie.installPlugin = installPlugin;
7222 lottie.freeze = animationManager.freeze;
7223 lottie.unfreeze = animationManager.unfreeze;
7224 lottie.setVolume = animationManager.setVolume;
7225 lottie.mute = animationManager.mute;
7226 lottie.unmute = animationManager.unmute;
7227 lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;
7228 lottie.useWebWorker = setWebWorker;
7229 lottie.setIDPrefix = setPrefix;
7230 lottie.__getFactory = getFactory;
7231 lottie.version = '5.13.0';
7232 function checkReady() {
7233 if (document.readyState === 'complete') {
7234 clearInterval(readyStateCheckInterval);
7235 searchAnimations();
7236 }
7237 }
7238 function getQueryVariable(variable) {
7239 var vars = queryString.split('&');
7240 for (var i = 0; i < vars.length; i += 1) {
7241 var pair = vars[i].split('=');
7242 if (decodeURIComponent(pair[0]) == variable) {
7243 // eslint-disable-line eqeqeq
7244 return decodeURIComponent(pair[1]);
7245 }
7246 }
7247 return null;
7248 }
7249 var queryString = '';
7250 if (standalone) {
7251 var scripts = document.getElementsByTagName('script');
7252 var index = scripts.length - 1;
7253 var myScript = scripts[index] || {
7254 src: ''
7255 };
7256 queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, '') : ''; // eslint-disable-line no-useless-escape
7257 renderer = getQueryVariable('renderer');
7258 }
7259 var readyStateCheckInterval = setInterval(checkReady, 100);
7260
7261 // this adds bodymovin to the window object for backwards compatibility
7262 try {
7263 if (!(( false ? 0 : _typeof$3(exports)) === 'object' && "object" !== 'undefined') && !( true && __webpack_require__.amdO) // eslint-disable-line no-undef
7264 ) // removed by dead control flow
7265 {}
7266 } catch (err) {
7267 //
7268 }
7269
7270 var ShapeModifiers = function () {
7271 var ob = {};
7272 var modifiers = {};
7273 ob.registerModifier = registerModifier;
7274 ob.getModifier = getModifier;
7275 function registerModifier(nm, factory) {
7276 if (!modifiers[nm]) {
7277 modifiers[nm] = factory;
7278 }
7279 }
7280 function getModifier(nm, elem, data) {
7281 return new modifiers[nm](elem, data);
7282 }
7283 return ob;
7284 }();
7285 function ShapeModifier() {}
7286 ShapeModifier.prototype.initModifierProperties = function () {};
7287 ShapeModifier.prototype.addShapeToModifier = function () {};
7288 ShapeModifier.prototype.addShape = function (data) {
7289 if (!this.closed) {
7290 // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.
7291 data.sh.container.addDynamicProperty(data.sh);
7292 var shapeData = {
7293 shape: data.sh,
7294 data: data,
7295 localShapeCollection: shapeCollectionPool.newShapeCollection()
7296 };
7297 this.shapes.push(shapeData);
7298 this.addShapeToModifier(shapeData);
7299 if (this._isAnimated) {
7300 data.setAsAnimated();
7301 }
7302 }
7303 };
7304 ShapeModifier.prototype.init = function (elem, data) {
7305 this.shapes = [];
7306 this.elem = elem;
7307 this.initDynamicPropertyContainer(elem);
7308 this.initModifierProperties(elem, data);
7309 this.frameId = initialDefaultFrame;
7310 this.closed = false;
7311 this.k = false;
7312 if (this.dynamicProperties.length) {
7313 this.k = true;
7314 } else {
7315 this.getValue(true);
7316 }
7317 };
7318 ShapeModifier.prototype.processKeys = function () {
7319 if (this.elem.globalData.frameId === this.frameId) {
7320 return;
7321 }
7322 this.frameId = this.elem.globalData.frameId;
7323 this.iterateDynamicProperties();
7324 };
7325 extendPrototype([DynamicPropertyContainer], ShapeModifier);
7326
7327 function TrimModifier() {}
7328 extendPrototype([ShapeModifier], TrimModifier);
7329 TrimModifier.prototype.initModifierProperties = function (elem, data) {
7330 this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);
7331 this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);
7332 this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);
7333 this.sValue = 0;
7334 this.eValue = 0;
7335 this.getValue = this.processKeys;
7336 this.m = data.m;
7337 this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;
7338 };
7339 TrimModifier.prototype.addShapeToModifier = function (shapeData) {
7340 shapeData.pathsData = [];
7341 };
7342 TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {
7343 var segments = [];
7344 if (e <= 1) {
7345 segments.push({
7346 s: s,
7347 e: e
7348 });
7349 } else if (s >= 1) {
7350 segments.push({
7351 s: s - 1,
7352 e: e - 1
7353 });
7354 } else {
7355 segments.push({
7356 s: s,
7357 e: 1
7358 });
7359 segments.push({
7360 s: 0,
7361 e: e - 1
7362 });
7363 }
7364 var shapeSegments = [];
7365 var i;
7366 var len = segments.length;
7367 var segmentOb;
7368 for (i = 0; i < len; i += 1) {
7369 segmentOb = segments[i];
7370 if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {
7371 var shapeS;
7372 var shapeE;
7373 if (segmentOb.s * totalModifierLength <= addedLength) {
7374 shapeS = 0;
7375 } else {
7376 shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;
7377 }
7378 if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {
7379 shapeE = 1;
7380 } else {
7381 shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;
7382 }
7383 shapeSegments.push([shapeS, shapeE]);
7384 }
7385 }
7386 if (!shapeSegments.length) {
7387 shapeSegments.push([0, 0]);
7388 }
7389 return shapeSegments;
7390 };
7391 TrimModifier.prototype.releasePathsData = function (pathsData) {
7392 var i;
7393 var len = pathsData.length;
7394 for (i = 0; i < len; i += 1) {
7395 segmentsLengthPool.release(pathsData[i]);
7396 }
7397 pathsData.length = 0;
7398 return pathsData;
7399 };
7400 TrimModifier.prototype.processShapes = function (_isFirstFrame) {
7401 var s;
7402 var e;
7403 if (this._mdf || _isFirstFrame) {
7404 var o = this.o.v % 360 / 360;
7405 if (o < 0) {
7406 o += 1;
7407 }
7408 if (this.s.v > 1) {
7409 s = 1 + o;
7410 } else if (this.s.v < 0) {
7411 s = 0 + o;
7412 } else {
7413 s = this.s.v + o;
7414 }
7415 if (this.e.v > 1) {
7416 e = 1 + o;
7417 } else if (this.e.v < 0) {
7418 e = 0 + o;
7419 } else {
7420 e = this.e.v + o;
7421 }
7422 if (s > e) {
7423 var _s = s;
7424 s = e;
7425 e = _s;
7426 }
7427 s = Math.round(s * 10000) * 0.0001;
7428 e = Math.round(e * 10000) * 0.0001;
7429 this.sValue = s;
7430 this.eValue = e;
7431 } else {
7432 s = this.sValue;
7433 e = this.eValue;
7434 }
7435 var shapePaths;
7436 var i;
7437 var len = this.shapes.length;
7438 var j;
7439 var jLen;
7440 var pathsData;
7441 var pathData;
7442 var totalShapeLength;
7443 var totalModifierLength = 0;
7444 if (e === s) {
7445 for (i = 0; i < len; i += 1) {
7446 this.shapes[i].localShapeCollection.releaseShapes();
7447 this.shapes[i].shape._mdf = true;
7448 this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;
7449 if (this._mdf) {
7450 this.shapes[i].pathsData.length = 0;
7451 }
7452 }
7453 } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {
7454 var segments = [];
7455 var shapeData;
7456 var localShapeCollection;
7457 for (i = 0; i < len; i += 1) {
7458 shapeData = this.shapes[i];
7459 // if shape hasn't changed and trim properties haven't changed, cached previous path can be used
7460 if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {
7461 shapeData.shape.paths = shapeData.localShapeCollection;
7462 } else {
7463 shapePaths = shapeData.shape.paths;
7464 jLen = shapePaths._length;
7465 totalShapeLength = 0;
7466 if (!shapeData.shape._mdf && shapeData.pathsData.length) {
7467 totalShapeLength = shapeData.totalShapeLength;
7468 } else {
7469 pathsData = this.releasePathsData(shapeData.pathsData);
7470 for (j = 0; j < jLen; j += 1) {
7471 pathData = bez.getSegmentsLength(shapePaths.shapes[j]);
7472 pathsData.push(pathData);
7473 totalShapeLength += pathData.totalLength;
7474 }
7475 shapeData.totalShapeLength = totalShapeLength;
7476 shapeData.pathsData = pathsData;
7477 }
7478 totalModifierLength += totalShapeLength;
7479 shapeData.shape._mdf = true;
7480 }
7481 }
7482 var shapeS = s;
7483 var shapeE = e;
7484 var addedLength = 0;
7485 var edges;
7486 for (i = len - 1; i >= 0; i -= 1) {
7487 shapeData = this.shapes[i];
7488 if (shapeData.shape._mdf) {
7489 localShapeCollection = shapeData.localShapeCollection;
7490 localShapeCollection.releaseShapes();
7491 // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group
7492 if (this.m === 2 && len > 1) {
7493 edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);
7494 addedLength += shapeData.totalShapeLength;
7495 } else {
7496 edges = [[shapeS, shapeE]];
7497 }
7498 jLen = edges.length;
7499 for (j = 0; j < jLen; j += 1) {
7500 shapeS = edges[j][0];
7501 shapeE = edges[j][1];
7502 segments.length = 0;
7503 if (shapeE <= 1) {
7504 segments.push({
7505 s: shapeData.totalShapeLength * shapeS,
7506 e: shapeData.totalShapeLength * shapeE
7507 });
7508 } else if (shapeS >= 1) {
7509 segments.push({
7510 s: shapeData.totalShapeLength * (shapeS - 1),
7511 e: shapeData.totalShapeLength * (shapeE - 1)
7512 });
7513 } else {
7514 segments.push({
7515 s: shapeData.totalShapeLength * shapeS,
7516 e: shapeData.totalShapeLength
7517 });
7518 segments.push({
7519 s: 0,
7520 e: shapeData.totalShapeLength * (shapeE - 1)
7521 });
7522 }
7523 var newShapesData = this.addShapes(shapeData, segments[0]);
7524 if (segments[0].s !== segments[0].e) {
7525 if (segments.length > 1) {
7526 var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];
7527 if (lastShapeInCollection.c) {
7528 var lastShape = newShapesData.pop();
7529 this.addPaths(newShapesData, localShapeCollection);
7530 newShapesData = this.addShapes(shapeData, segments[1], lastShape);
7531 } else {
7532 this.addPaths(newShapesData, localShapeCollection);
7533 newShapesData = this.addShapes(shapeData, segments[1]);
7534 }
7535 }
7536 this.addPaths(newShapesData, localShapeCollection);
7537 }
7538 }
7539 shapeData.shape.paths = localShapeCollection;
7540 }
7541 }
7542 } else if (this._mdf) {
7543 for (i = 0; i < len; i += 1) {
7544 // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.
7545 // Don't remove this even if it's losing cached info.
7546 this.shapes[i].pathsData.length = 0;
7547 this.shapes[i].shape._mdf = true;
7548 }
7549 }
7550 };
7551 TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {
7552 var i;
7553 var len = newPaths.length;
7554 for (i = 0; i < len; i += 1) {
7555 localShapeCollection.addShape(newPaths[i]);
7556 }
7557 };
7558 TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {
7559 shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);
7560 shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);
7561 if (newShape) {
7562 shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);
7563 }
7564 shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);
7565 };
7566 TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {
7567 shapePath.setXYAt(points[1], points[5], 'o', pos);
7568 shapePath.setXYAt(points[2], points[6], 'i', pos + 1);
7569 if (newShape) {
7570 shapePath.setXYAt(points[0], points[4], 'v', pos);
7571 }
7572 shapePath.setXYAt(points[3], points[7], 'v', pos + 1);
7573 };
7574 TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {
7575 var pathsData = shapeData.pathsData;
7576 var shapePaths = shapeData.shape.paths.shapes;
7577 var i;
7578 var len = shapeData.shape.paths._length;
7579 var j;
7580 var jLen;
7581 var addedLength = 0;
7582 var currentLengthData;
7583 var segmentCount;
7584 var lengths;
7585 var segment;
7586 var shapes = [];
7587 var initPos;
7588 var newShape = true;
7589 if (!shapePath) {
7590 shapePath = shapePool.newElement();
7591 segmentCount = 0;
7592 initPos = 0;
7593 } else {
7594 segmentCount = shapePath._length;
7595 initPos = shapePath._length;
7596 }
7597 shapes.push(shapePath);
7598 for (i = 0; i < len; i += 1) {
7599 lengths = pathsData[i].lengths;
7600 shapePath.c = shapePaths[i].c;
7601 jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;
7602 for (j = 1; j < jLen; j += 1) {
7603 currentLengthData = lengths[j - 1];
7604 if (addedLength + currentLengthData.addedLength < shapeSegment.s) {
7605 addedLength += currentLengthData.addedLength;
7606 shapePath.c = false;
7607 } else if (addedLength > shapeSegment.e) {
7608 shapePath.c = false;
7609 break;
7610 } else {
7611 if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {
7612 this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);
7613 newShape = false;
7614 } else {
7615 segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);
7616 this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);
7617 // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);
7618 newShape = false;
7619 shapePath.c = false;
7620 }
7621 addedLength += currentLengthData.addedLength;
7622 segmentCount += 1;
7623 }
7624 }
7625 if (shapePaths[i].c && lengths.length) {
7626 currentLengthData = lengths[j - 1];
7627 if (addedLength <= shapeSegment.e) {
7628 var segmentLength = lengths[j - 1].addedLength;
7629 if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {
7630 this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);
7631 newShape = false;
7632 } else {
7633 segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);
7634 this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);
7635 // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);
7636 newShape = false;
7637 shapePath.c = false;
7638 }
7639 } else {
7640 shapePath.c = false;
7641 }
7642 addedLength += currentLengthData.addedLength;
7643 segmentCount += 1;
7644 }
7645 if (shapePath._length) {
7646 shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);
7647 shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);
7648 }
7649 if (addedLength > shapeSegment.e) {
7650 break;
7651 }
7652 if (i < len - 1) {
7653 shapePath = shapePool.newElement();
7654 newShape = true;
7655 shapes.push(shapePath);
7656 segmentCount = 0;
7657 }
7658 }
7659 return shapes;
7660 };
7661
7662 function PuckerAndBloatModifier() {}
7663 extendPrototype([ShapeModifier], PuckerAndBloatModifier);
7664 PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {
7665 this.getValue = this.processKeys;
7666 this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);
7667 this._isAnimated = !!this.amount.effectsSequence.length;
7668 };
7669 PuckerAndBloatModifier.prototype.processPath = function (path, amount) {
7670 var percent = amount / 100;
7671 var centerPoint = [0, 0];
7672 var pathLength = path._length;
7673 var i = 0;
7674 for (i = 0; i < pathLength; i += 1) {
7675 centerPoint[0] += path.v[i][0];
7676 centerPoint[1] += path.v[i][1];
7677 }
7678 centerPoint[0] /= pathLength;
7679 centerPoint[1] /= pathLength;
7680 var clonedPath = shapePool.newElement();
7681 clonedPath.c = path.c;
7682 var vX;
7683 var vY;
7684 var oX;
7685 var oY;
7686 var iX;
7687 var iY;
7688 for (i = 0; i < pathLength; i += 1) {
7689 vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;
7690 vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;
7691 oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;
7692 oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;
7693 iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;
7694 iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;
7695 clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);
7696 }
7697 return clonedPath;
7698 };
7699 PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {
7700 var shapePaths;
7701 var i;
7702 var len = this.shapes.length;
7703 var j;
7704 var jLen;
7705 var amount = this.amount.v;
7706 if (amount !== 0) {
7707 var shapeData;
7708 var localShapeCollection;
7709 for (i = 0; i < len; i += 1) {
7710 shapeData = this.shapes[i];
7711 localShapeCollection = shapeData.localShapeCollection;
7712 if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {
7713 localShapeCollection.releaseShapes();
7714 shapeData.shape._mdf = true;
7715 shapePaths = shapeData.shape.paths.shapes;
7716 jLen = shapeData.shape.paths._length;
7717 for (j = 0; j < jLen; j += 1) {
7718 localShapeCollection.addShape(this.processPath(shapePaths[j], amount));
7719 }
7720 }
7721 shapeData.shape.paths = shapeData.localShapeCollection;
7722 }
7723 }
7724 if (!this.dynamicProperties.length) {
7725 this._mdf = false;
7726 }
7727 };
7728
7729 var TransformPropertyFactory = function () {
7730 var defaultVector = [0, 0];
7731 function applyToMatrix(mat) {
7732 var _mdf = this._mdf;
7733 this.iterateDynamicProperties();
7734 this._mdf = this._mdf || _mdf;
7735 if (this.a) {
7736 mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
7737 }
7738 if (this.s) {
7739 mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
7740 }
7741 if (this.sk) {
7742 mat.skewFromAxis(-this.sk.v, this.sa.v);
7743 }
7744 if (this.r) {
7745 mat.rotate(-this.r.v);
7746 } else {
7747 mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
7748 }
7749 if (this.data.p.s) {
7750 if (this.data.p.z) {
7751 mat.translate(this.px.v, this.py.v, -this.pz.v);
7752 } else {
7753 mat.translate(this.px.v, this.py.v, 0);
7754 }
7755 } else {
7756 mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);
7757 }
7758 }
7759 function processKeys(forceRender) {
7760 if (this.elem.globalData.frameId === this.frameId) {
7761 return;
7762 }
7763 if (this._isDirty) {
7764 this.precalculateMatrix();
7765 this._isDirty = false;
7766 }
7767 this.iterateDynamicProperties();
7768 if (this._mdf || forceRender) {
7769 var frameRate;
7770 this.v.cloneFromProps(this.pre.props);
7771 if (this.appliedTransformations < 1) {
7772 this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
7773 }
7774 if (this.appliedTransformations < 2) {
7775 this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
7776 }
7777 if (this.sk && this.appliedTransformations < 3) {
7778 this.v.skewFromAxis(-this.sk.v, this.sa.v);
7779 }
7780 if (this.r && this.appliedTransformations < 4) {
7781 this.v.rotate(-this.r.v);
7782 } else if (!this.r && this.appliedTransformations < 4) {
7783 this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
7784 }
7785 if (this.autoOriented) {
7786 var v1;
7787 var v2;
7788 frameRate = this.elem.globalData.frameRate;
7789 if (this.p && this.p.keyframes && this.p.getValueAtTime) {
7790 if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {
7791 v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);
7792 v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);
7793 } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {
7794 v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);
7795 v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);
7796 } else {
7797 v1 = this.p.pv;
7798 v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);
7799 }
7800 } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {
7801 v1 = [];
7802 v2 = [];
7803 var px = this.px;
7804 var py = this.py;
7805 if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {
7806 v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);
7807 v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);
7808 v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);
7809 v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);
7810 } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {
7811 v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);
7812 v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);
7813 v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);
7814 v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);
7815 } else {
7816 v1 = [px.pv, py.pv];
7817 v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);
7818 v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);
7819 }
7820 } else {
7821 v2 = defaultVector;
7822 v1 = v2;
7823 }
7824 this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));
7825 }
7826 if (this.data.p && this.data.p.s) {
7827 if (this.data.p.z) {
7828 this.v.translate(this.px.v, this.py.v, -this.pz.v);
7829 } else {
7830 this.v.translate(this.px.v, this.py.v, 0);
7831 }
7832 } else {
7833 this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);
7834 }
7835 }
7836 this.frameId = this.elem.globalData.frameId;
7837 }
7838 function precalculateMatrix() {
7839 this.appliedTransformations = 0;
7840 this.pre.reset();
7841 if (!this.a.effectsSequence.length) {
7842 this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
7843 this.appliedTransformations = 1;
7844 } else {
7845 return;
7846 }
7847 if (!this.s.effectsSequence.length) {
7848 this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
7849 this.appliedTransformations = 2;
7850 } else {
7851 return;
7852 }
7853 if (this.sk) {
7854 if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {
7855 this.pre.skewFromAxis(-this.sk.v, this.sa.v);
7856 this.appliedTransformations = 3;
7857 } else {
7858 return;
7859 }
7860 }
7861 if (this.r) {
7862 if (!this.r.effectsSequence.length) {
7863 this.pre.rotate(-this.r.v);
7864 this.appliedTransformations = 4;
7865 }
7866 } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {
7867 this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);
7868 this.appliedTransformations = 4;
7869 }
7870 }
7871 function autoOrient() {
7872 //
7873 // var prevP = this.getValueAtTime();
7874 }
7875 function addDynamicProperty(prop) {
7876 this._addDynamicProperty(prop);
7877 this.elem.addDynamicProperty(prop);
7878 this._isDirty = true;
7879 }
7880 function TransformProperty(elem, data, container) {
7881 this.elem = elem;
7882 this.frameId = -1;
7883 this.propType = 'transform';
7884 this.data = data;
7885 this.v = new Matrix();
7886 // Precalculated matrix with non animated properties
7887 this.pre = new Matrix();
7888 this.appliedTransformations = 0;
7889 this.initDynamicPropertyContainer(container || elem);
7890 if (data.p && data.p.s) {
7891 this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);
7892 this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);
7893 if (data.p.z) {
7894 this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);
7895 }
7896 } else {
7897 this.p = PropertyFactory.getProp(elem, data.p || {
7898 k: [0, 0, 0]
7899 }, 1, 0, this);
7900 }
7901 if (data.rx) {
7902 this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);
7903 this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);
7904 this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);
7905 if (data.or.k[0].ti) {
7906 var i;
7907 var len = data.or.k.length;
7908 for (i = 0; i < len; i += 1) {
7909 data.or.k[i].to = null;
7910 data.or.k[i].ti = null;
7911 }
7912 }
7913 this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);
7914 // sh Indicates it needs to be capped between -180 and 180
7915 this.or.sh = true;
7916 } else {
7917 this.r = PropertyFactory.getProp(elem, data.r || {
7918 k: 0
7919 }, 0, degToRads, this);
7920 }
7921 if (data.sk) {
7922 this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);
7923 this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);
7924 }
7925 this.a = PropertyFactory.getProp(elem, data.a || {
7926 k: [0, 0, 0]
7927 }, 1, 0, this);
7928 this.s = PropertyFactory.getProp(elem, data.s || {
7929 k: [100, 100, 100]
7930 }, 1, 0.01, this);
7931 // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.
7932 if (data.o) {
7933 this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);
7934 } else {
7935 this.o = {
7936 _mdf: false,
7937 v: 1
7938 };
7939 }
7940 this._isDirty = true;
7941 if (!this.dynamicProperties.length) {
7942 this.getValue(true);
7943 }
7944 }
7945 TransformProperty.prototype = {
7946 applyToMatrix: applyToMatrix,
7947 getValue: processKeys,
7948 precalculateMatrix: precalculateMatrix,
7949 autoOrient: autoOrient
7950 };
7951 extendPrototype([DynamicPropertyContainer], TransformProperty);
7952 TransformProperty.prototype.addDynamicProperty = addDynamicProperty;
7953 TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;
7954 function getTransformProperty(elem, data, container) {
7955 return new TransformProperty(elem, data, container);
7956 }
7957 return {
7958 getTransformProperty: getTransformProperty
7959 };
7960 }();
7961
7962 function RepeaterModifier() {}
7963 extendPrototype([ShapeModifier], RepeaterModifier);
7964 RepeaterModifier.prototype.initModifierProperties = function (elem, data) {
7965 this.getValue = this.processKeys;
7966 this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);
7967 this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);
7968 this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);
7969 this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);
7970 this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);
7971 this.data = data;
7972 if (!this.dynamicProperties.length) {
7973 this.getValue(true);
7974 }
7975 this._isAnimated = !!this.dynamicProperties.length;
7976 this.pMatrix = new Matrix();
7977 this.rMatrix = new Matrix();
7978 this.sMatrix = new Matrix();
7979 this.tMatrix = new Matrix();
7980 this.matrix = new Matrix();
7981 };
7982 RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {
7983 var dir = inv ? -1 : 1;
7984 var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);
7985 var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);
7986 pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);
7987 rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);
7988 rMatrix.rotate(-transform.r.v * dir * perc);
7989 rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);
7990 sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);
7991 sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);
7992 sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);
7993 };
7994 RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {
7995 this.elem = elem;
7996 this.arr = arr;
7997 this.pos = pos;
7998 this.elemsData = elemsData;
7999 this._currentCopies = 0;
8000 this._elements = [];
8001 this._groups = [];
8002 this.frameId = -1;
8003 this.initDynamicPropertyContainer(elem);
8004 this.initModifierProperties(elem, arr[pos]);
8005 while (pos > 0) {
8006 pos -= 1;
8007 // this._elements.unshift(arr.splice(pos,1)[0]);
8008 this._elements.unshift(arr[pos]);
8009 }
8010 if (this.dynamicProperties.length) {
8011 this.k = true;
8012 } else {
8013 this.getValue(true);
8014 }
8015 };
8016 RepeaterModifier.prototype.resetElements = function (elements) {
8017 var i;
8018 var len = elements.length;
8019 for (i = 0; i < len; i += 1) {
8020 elements[i]._processed = false;
8021 if (elements[i].ty === 'gr') {
8022 this.resetElements(elements[i].it);
8023 }
8024 }
8025 };
8026 RepeaterModifier.prototype.cloneElements = function (elements) {
8027 var newElements = JSON.parse(JSON.stringify(elements));
8028 this.resetElements(newElements);
8029 return newElements;
8030 };
8031 RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {
8032 var i;
8033 var len = elements.length;
8034 for (i = 0; i < len; i += 1) {
8035 elements[i]._render = renderFlag;
8036 if (elements[i].ty === 'gr') {
8037 this.changeGroupRender(elements[i].it, renderFlag);
8038 }
8039 }
8040 };
8041 RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {
8042 var items;
8043 var itemsTransform;
8044 var i;
8045 var dir;
8046 var cont;
8047 var hasReloaded = false;
8048 if (this._mdf || _isFirstFrame) {
8049 var copies = Math.ceil(this.c.v);
8050 if (this._groups.length < copies) {
8051 while (this._groups.length < copies) {
8052 var group = {
8053 it: this.cloneElements(this._elements),
8054 ty: 'gr'
8055 };
8056 group.it.push({
8057 a: {
8058 a: 0,
8059 ix: 1,
8060 k: [0, 0]
8061 },
8062 nm: 'Transform',
8063 o: {
8064 a: 0,
8065 ix: 7,
8066 k: 100
8067 },
8068 p: {
8069 a: 0,
8070 ix: 2,
8071 k: [0, 0]
8072 },
8073 r: {
8074 a: 1,
8075 ix: 6,
8076 k: [{
8077 s: 0,
8078 e: 0,
8079 t: 0
8080 }, {
8081 s: 0,
8082 e: 0,
8083 t: 1
8084 }]
8085 },
8086 s: {
8087 a: 0,
8088 ix: 3,
8089 k: [100, 100]
8090 },
8091 sa: {
8092 a: 0,
8093 ix: 5,
8094 k: 0
8095 },
8096 sk: {
8097 a: 0,
8098 ix: 4,
8099 k: 0
8100 },
8101 ty: 'tr'
8102 });
8103 this.arr.splice(0, 0, group);
8104 this._groups.splice(0, 0, group);
8105 this._currentCopies += 1;
8106 }
8107 this.elem.reloadShapes();
8108 hasReloaded = true;
8109 }
8110 cont = 0;
8111 var renderFlag;
8112 for (i = 0; i <= this._groups.length - 1; i += 1) {
8113 renderFlag = cont < copies;
8114 this._groups[i]._render = renderFlag;
8115 this.changeGroupRender(this._groups[i].it, renderFlag);
8116 if (!renderFlag) {
8117 var elems = this.elemsData[i].it;
8118 var transformData = elems[elems.length - 1];
8119 if (transformData.transform.op.v !== 0) {
8120 transformData.transform.op._mdf = true;
8121 transformData.transform.op.v = 0;
8122 } else {
8123 transformData.transform.op._mdf = false;
8124 }
8125 }
8126 cont += 1;
8127 }
8128 this._currentCopies = copies;
8129 /// /
8130
8131 var offset = this.o.v;
8132 var offsetModulo = offset % 1;
8133 var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);
8134 var pProps = this.pMatrix.props;
8135 var rProps = this.rMatrix.props;
8136 var sProps = this.sMatrix.props;
8137 this.pMatrix.reset();
8138 this.rMatrix.reset();
8139 this.sMatrix.reset();
8140 this.tMatrix.reset();
8141 this.matrix.reset();
8142 var iteration = 0;
8143 if (offset > 0) {
8144 while (iteration < roundOffset) {
8145 this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);
8146 iteration += 1;
8147 }
8148 if (offsetModulo) {
8149 this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);
8150 iteration += offsetModulo;
8151 }
8152 } else if (offset < 0) {
8153 while (iteration > roundOffset) {
8154 this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);
8155 iteration -= 1;
8156 }
8157 if (offsetModulo) {
8158 this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);
8159 iteration -= offsetModulo;
8160 }
8161 }
8162 i = this.data.m === 1 ? 0 : this._currentCopies - 1;
8163 dir = this.data.m === 1 ? 1 : -1;
8164 cont = this._currentCopies;
8165 var j;
8166 var jLen;
8167 while (cont) {
8168 items = this.elemsData[i].it;
8169 itemsTransform = items[items.length - 1].transform.mProps.v.props;
8170 jLen = itemsTransform.length;
8171 items[items.length - 1].transform.mProps._mdf = true;
8172 items[items.length - 1].transform.op._mdf = true;
8173 items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));
8174 if (iteration !== 0) {
8175 if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {
8176 this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);
8177 }
8178 this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);
8179 this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);
8180 this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);
8181 for (j = 0; j < jLen; j += 1) {
8182 itemsTransform[j] = this.matrix.props[j];
8183 }
8184 this.matrix.reset();
8185 } else {
8186 this.matrix.reset();
8187 for (j = 0; j < jLen; j += 1) {
8188 itemsTransform[j] = this.matrix.props[j];
8189 }
8190 }
8191 iteration += 1;
8192 cont -= 1;
8193 i += dir;
8194 }
8195 } else {
8196 cont = this._currentCopies;
8197 i = 0;
8198 dir = 1;
8199 while (cont) {
8200 items = this.elemsData[i].it;
8201 itemsTransform = items[items.length - 1].transform.mProps.v.props;
8202 items[items.length - 1].transform.mProps._mdf = false;
8203 items[items.length - 1].transform.op._mdf = false;
8204 cont -= 1;
8205 i += dir;
8206 }
8207 }
8208 return hasReloaded;
8209 };
8210 RepeaterModifier.prototype.addShape = function () {};
8211
8212 function RoundCornersModifier() {}
8213 extendPrototype([ShapeModifier], RoundCornersModifier);
8214 RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {
8215 this.getValue = this.processKeys;
8216 this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);
8217 this._isAnimated = !!this.rd.effectsSequence.length;
8218 };
8219 RoundCornersModifier.prototype.processPath = function (path, round) {
8220 var clonedPath = shapePool.newElement();
8221 clonedPath.c = path.c;
8222 var i;
8223 var len = path._length;
8224 var currentV;
8225 var currentI;
8226 var currentO;
8227 var closerV;
8228 var distance;
8229 var newPosPerc;
8230 var index = 0;
8231 var vX;
8232 var vY;
8233 var oX;
8234 var oY;
8235 var iX;
8236 var iY;
8237 for (i = 0; i < len; i += 1) {
8238 currentV = path.v[i];
8239 currentO = path.o[i];
8240 currentI = path.i[i];
8241 if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {
8242 if ((i === 0 || i === len - 1) && !path.c) {
8243 clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);
8244 /* clonedPath.v[index] = currentV;
8245 clonedPath.o[index] = currentO;
8246 clonedPath.i[index] = currentI; */
8247 index += 1;
8248 } else {
8249 if (i === 0) {
8250 closerV = path.v[len - 1];
8251 } else {
8252 closerV = path.v[i - 1];
8253 }
8254 distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));
8255 newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;
8256 iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;
8257 vX = iX;
8258 iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;
8259 vY = iY;
8260 oX = vX - (vX - currentV[0]) * roundCorner;
8261 oY = vY - (vY - currentV[1]) * roundCorner;
8262 clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);
8263 index += 1;
8264 if (i === len - 1) {
8265 closerV = path.v[0];
8266 } else {
8267 closerV = path.v[i + 1];
8268 }
8269 distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));
8270 newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;
8271 oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;
8272 vX = oX;
8273 oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;
8274 vY = oY;
8275 iX = vX - (vX - currentV[0]) * roundCorner;
8276 iY = vY - (vY - currentV[1]) * roundCorner;
8277 clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);
8278 index += 1;
8279 }
8280 } else {
8281 clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);
8282 index += 1;
8283 }
8284 }
8285 return clonedPath;
8286 };
8287 RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {
8288 var shapePaths;
8289 var i;
8290 var len = this.shapes.length;
8291 var j;
8292 var jLen;
8293 var rd = this.rd.v;
8294 if (rd !== 0) {
8295 var shapeData;
8296 var localShapeCollection;
8297 for (i = 0; i < len; i += 1) {
8298 shapeData = this.shapes[i];
8299 localShapeCollection = shapeData.localShapeCollection;
8300 if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {
8301 localShapeCollection.releaseShapes();
8302 shapeData.shape._mdf = true;
8303 shapePaths = shapeData.shape.paths.shapes;
8304 jLen = shapeData.shape.paths._length;
8305 for (j = 0; j < jLen; j += 1) {
8306 localShapeCollection.addShape(this.processPath(shapePaths[j], rd));
8307 }
8308 }
8309 shapeData.shape.paths = shapeData.localShapeCollection;
8310 }
8311 }
8312 if (!this.dynamicProperties.length) {
8313 this._mdf = false;
8314 }
8315 };
8316
8317 function floatEqual(a, b) {
8318 return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));
8319 }
8320 function floatZero(f) {
8321 return Math.abs(f) <= 0.00001;
8322 }
8323 function lerp(p0, p1, amount) {
8324 return p0 * (1 - amount) + p1 * amount;
8325 }
8326 function lerpPoint(p0, p1, amount) {
8327 return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];
8328 }
8329 function quadRoots(a, b, c) {
8330 // no root
8331 if (a === 0) return [];
8332 var s = b * b - 4 * a * c;
8333 // Complex roots
8334 if (s < 0) return [];
8335 var singleRoot = -b / (2 * a);
8336 // 1 root
8337 if (s === 0) return [singleRoot];
8338 var delta = Math.sqrt(s) / (2 * a);
8339 // 2 roots
8340 return [singleRoot - delta, singleRoot + delta];
8341 }
8342 function polynomialCoefficients(p0, p1, p2, p3) {
8343 return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];
8344 }
8345 function singlePoint(p) {
8346 return new PolynomialBezier(p, p, p, p, false);
8347 }
8348 function PolynomialBezier(p0, p1, p2, p3, linearize) {
8349 if (linearize && pointEqual(p0, p1)) {
8350 p1 = lerpPoint(p0, p3, 1 / 3);
8351 }
8352 if (linearize && pointEqual(p2, p3)) {
8353 p2 = lerpPoint(p0, p3, 2 / 3);
8354 }
8355 var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);
8356 var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);
8357 this.a = [coeffx[0], coeffy[0]];
8358 this.b = [coeffx[1], coeffy[1]];
8359 this.c = [coeffx[2], coeffy[2]];
8360 this.d = [coeffx[3], coeffy[3]];
8361 this.points = [p0, p1, p2, p3];
8362 }
8363 PolynomialBezier.prototype.point = function (t) {
8364 return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];
8365 };
8366 PolynomialBezier.prototype.derivative = function (t) {
8367 return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];
8368 };
8369 PolynomialBezier.prototype.tangentAngle = function (t) {
8370 var p = this.derivative(t);
8371 return Math.atan2(p[1], p[0]);
8372 };
8373 PolynomialBezier.prototype.normalAngle = function (t) {
8374 var p = this.derivative(t);
8375 return Math.atan2(p[0], p[1]);
8376 };
8377 PolynomialBezier.prototype.inflectionPoints = function () {
8378 var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];
8379 if (floatZero(denom)) return [];
8380 var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;
8381 var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;
8382 if (square < 0) return [];
8383 var root = Math.sqrt(square);
8384 if (floatZero(root)) {
8385 if (root > 0 && root < 1) return [tcusp];
8386 return [];
8387 }
8388 return [tcusp - root, tcusp + root].filter(function (r) {
8389 return r > 0 && r < 1;
8390 });
8391 };
8392 PolynomialBezier.prototype.split = function (t) {
8393 if (t <= 0) return [singlePoint(this.points[0]), this];
8394 if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];
8395 var p10 = lerpPoint(this.points[0], this.points[1], t);
8396 var p11 = lerpPoint(this.points[1], this.points[2], t);
8397 var p12 = lerpPoint(this.points[2], this.points[3], t);
8398 var p20 = lerpPoint(p10, p11, t);
8399 var p21 = lerpPoint(p11, p12, t);
8400 var p3 = lerpPoint(p20, p21, t);
8401 return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];
8402 };
8403 function extrema(bez, comp) {
8404 var min = bez.points[0][comp];
8405 var max = bez.points[bez.points.length - 1][comp];
8406 if (min > max) {
8407 var e = max;
8408 max = min;
8409 min = e;
8410 }
8411 // Derivative roots to find min/max
8412 var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);
8413 for (var i = 0; i < f.length; i += 1) {
8414 if (f[i] > 0 && f[i] < 1) {
8415 var val = bez.point(f[i])[comp];
8416 if (val < min) min = val;else if (val > max) max = val;
8417 }
8418 }
8419 return {
8420 min: min,
8421 max: max
8422 };
8423 }
8424 PolynomialBezier.prototype.bounds = function () {
8425 return {
8426 x: extrema(this, 0),
8427 y: extrema(this, 1)
8428 };
8429 };
8430 PolynomialBezier.prototype.boundingBox = function () {
8431 var bounds = this.bounds();
8432 return {
8433 left: bounds.x.min,
8434 right: bounds.x.max,
8435 top: bounds.y.min,
8436 bottom: bounds.y.max,
8437 width: bounds.x.max - bounds.x.min,
8438 height: bounds.y.max - bounds.y.min,
8439 cx: (bounds.x.max + bounds.x.min) / 2,
8440 cy: (bounds.y.max + bounds.y.min) / 2
8441 };
8442 };
8443 function intersectData(bez, t1, t2) {
8444 var box = bez.boundingBox();
8445 return {
8446 cx: box.cx,
8447 cy: box.cy,
8448 width: box.width,
8449 height: box.height,
8450 bez: bez,
8451 t: (t1 + t2) / 2,
8452 t1: t1,
8453 t2: t2
8454 };
8455 }
8456 function splitData(data) {
8457 var split = data.bez.split(0.5);
8458 return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];
8459 }
8460 function boxIntersect(b1, b2) {
8461 return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;
8462 }
8463 function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {
8464 if (!boxIntersect(d1, d2)) return;
8465 if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {
8466 intersections.push([d1.t, d2.t]);
8467 return;
8468 }
8469 var d1s = splitData(d1);
8470 var d2s = splitData(d2);
8471 intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);
8472 intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);
8473 intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);
8474 intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);
8475 }
8476 PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {
8477 if (tolerance === undefined) tolerance = 2;
8478 if (maxRecursion === undefined) maxRecursion = 7;
8479 var intersections = [];
8480 intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);
8481 return intersections;
8482 };
8483 PolynomialBezier.shapeSegment = function (shapePath, index) {
8484 var nextIndex = (index + 1) % shapePath.length();
8485 return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);
8486 };
8487 PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {
8488 var nextIndex = (index + 1) % shapePath.length();
8489 return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);
8490 };
8491 function crossProduct(a, b) {
8492 return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
8493 }
8494 function lineIntersection(start1, end1, start2, end2) {
8495 var v1 = [start1[0], start1[1], 1];
8496 var v2 = [end1[0], end1[1], 1];
8497 var v3 = [start2[0], start2[1], 1];
8498 var v4 = [end2[0], end2[1], 1];
8499 var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));
8500 if (floatZero(r[2])) return null;
8501 return [r[0] / r[2], r[1] / r[2]];
8502 }
8503 function polarOffset(p, angle, length) {
8504 return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];
8505 }
8506 function pointDistance(p1, p2) {
8507 return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);
8508 }
8509 function pointEqual(p1, p2) {
8510 return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);
8511 }
8512
8513 function ZigZagModifier() {}
8514 extendPrototype([ShapeModifier], ZigZagModifier);
8515 ZigZagModifier.prototype.initModifierProperties = function (elem, data) {
8516 this.getValue = this.processKeys;
8517 this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);
8518 this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);
8519 this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);
8520 this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;
8521 };
8522 function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {
8523 var angO = angle - Math.PI / 2;
8524 var angI = angle + Math.PI / 2;
8525 var px = point[0] + Math.cos(angle) * direction * amplitude;
8526 var py = point[1] - Math.sin(angle) * direction * amplitude;
8527 outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());
8528 }
8529 function getPerpendicularVector(pt1, pt2) {
8530 var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];
8531 var rot = -Math.PI * 0.5;
8532 var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];
8533 return rotatedVector;
8534 }
8535 function getProjectingAngle(path, cur) {
8536 var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;
8537 var nextIndex = (cur + 1) % path.length();
8538 var prevPoint = path.v[prevIndex];
8539 var nextPoint = path.v[nextIndex];
8540 var pVector = getPerpendicularVector(prevPoint, nextPoint);
8541 return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);
8542 }
8543 function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {
8544 var angle = getProjectingAngle(path, cur);
8545 var point = path.v[cur % path._length];
8546 var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];
8547 var nextPoint = path.v[(cur + 1) % path._length];
8548 var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;
8549 var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;
8550 setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);
8551 }
8552 function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {
8553 for (var i = 0; i < frequency; i += 1) {
8554 var t = (i + 1) / (frequency + 1);
8555 var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;
8556 var angle = segment.normalAngle(t);
8557 var point = segment.point(t);
8558 setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);
8559 direction = -direction;
8560 }
8561 return direction;
8562 }
8563 ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {
8564 var count = path._length;
8565 var clonedPath = shapePool.newElement();
8566 clonedPath.c = path.c;
8567 if (!path.c) {
8568 count -= 1;
8569 }
8570 if (count === 0) return clonedPath;
8571 var direction = -1;
8572 var segment = PolynomialBezier.shapeSegment(path, 0);
8573 zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);
8574 for (var i = 0; i < count; i += 1) {
8575 direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);
8576 if (i === count - 1 && !path.c) {
8577 segment = null;
8578 } else {
8579 segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);
8580 }
8581 zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);
8582 }
8583 return clonedPath;
8584 };
8585 ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {
8586 var shapePaths;
8587 var i;
8588 var len = this.shapes.length;
8589 var j;
8590 var jLen;
8591 var amplitude = this.amplitude.v;
8592 var frequency = Math.max(0, Math.round(this.frequency.v));
8593 var pointType = this.pointsType.v;
8594 if (amplitude !== 0) {
8595 var shapeData;
8596 var localShapeCollection;
8597 for (i = 0; i < len; i += 1) {
8598 shapeData = this.shapes[i];
8599 localShapeCollection = shapeData.localShapeCollection;
8600 if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {
8601 localShapeCollection.releaseShapes();
8602 shapeData.shape._mdf = true;
8603 shapePaths = shapeData.shape.paths.shapes;
8604 jLen = shapeData.shape.paths._length;
8605 for (j = 0; j < jLen; j += 1) {
8606 localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));
8607 }
8608 }
8609 shapeData.shape.paths = shapeData.localShapeCollection;
8610 }
8611 }
8612 if (!this.dynamicProperties.length) {
8613 this._mdf = false;
8614 }
8615 };
8616
8617 function linearOffset(p1, p2, amount) {
8618 var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);
8619 return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];
8620 }
8621 function offsetSegment(segment, amount) {
8622 var p0;
8623 var p1a;
8624 var p1b;
8625 var p2b;
8626 var p2a;
8627 var p3;
8628 var e;
8629 e = linearOffset(segment.points[0], segment.points[1], amount);
8630 p0 = e[0];
8631 p1a = e[1];
8632 e = linearOffset(segment.points[1], segment.points[2], amount);
8633 p1b = e[0];
8634 p2b = e[1];
8635 e = linearOffset(segment.points[2], segment.points[3], amount);
8636 p2a = e[0];
8637 p3 = e[1];
8638 var p1 = lineIntersection(p0, p1a, p1b, p2b);
8639 if (p1 === null) p1 = p1a;
8640 var p2 = lineIntersection(p2a, p3, p1b, p2b);
8641 if (p2 === null) p2 = p2a;
8642 return new PolynomialBezier(p0, p1, p2, p3);
8643 }
8644 function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {
8645 var p0 = seg1.points[3];
8646 var p1 = seg2.points[0];
8647
8648 // Bevel
8649 if (lineJoin === 3) return p0;
8650
8651 // Connected, they don't need a joint
8652 if (pointEqual(p0, p1)) return p0;
8653
8654 // Round
8655 if (lineJoin === 2) {
8656 var angleOut = -seg1.tangentAngle(1);
8657 var angleIn = -seg2.tangentAngle(0) + Math.PI;
8658 var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));
8659 var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;
8660 var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);
8661 outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);
8662 tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);
8663 outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());
8664 return p1;
8665 }
8666
8667 // Miter
8668 var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];
8669 var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];
8670 var intersection = lineIntersection(t0, p0, p1, t1);
8671 if (intersection && pointDistance(intersection, p0) < miterLimit) {
8672 outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());
8673 return intersection;
8674 }
8675 return p0;
8676 }
8677 function getIntersection(a, b) {
8678 var intersect = a.intersections(b);
8679 if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();
8680 if (intersect.length) return intersect[0];
8681 return null;
8682 }
8683 function pruneSegmentIntersection(a, b) {
8684 var outa = a.slice();
8685 var outb = b.slice();
8686 var intersect = getIntersection(a[a.length - 1], b[0]);
8687 if (intersect) {
8688 outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];
8689 outb[0] = b[0].split(intersect[1])[1];
8690 }
8691 if (a.length > 1 && b.length > 1) {
8692 intersect = getIntersection(a[0], b[b.length - 1]);
8693 if (intersect) {
8694 return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];
8695 }
8696 }
8697 return [outa, outb];
8698 }
8699 function pruneIntersections(segments) {
8700 var e;
8701 for (var i = 1; i < segments.length; i += 1) {
8702 e = pruneSegmentIntersection(segments[i - 1], segments[i]);
8703 segments[i - 1] = e[0];
8704 segments[i] = e[1];
8705 }
8706 if (segments.length > 1) {
8707 e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);
8708 segments[segments.length - 1] = e[0];
8709 segments[0] = e[1];
8710 }
8711 return segments;
8712 }
8713 function offsetSegmentSplit(segment, amount) {
8714 /*
8715 We split each bezier segment into smaller pieces based
8716 on inflection points, this ensures the control point
8717 polygon is convex.
8718 (A cubic bezier can have none, one, or two inflection points)
8719 */
8720 var flex = segment.inflectionPoints();
8721 var left;
8722 var right;
8723 var split;
8724 var mid;
8725 if (flex.length === 0) {
8726 return [offsetSegment(segment, amount)];
8727 }
8728 if (flex.length === 1 || floatEqual(flex[1], 1)) {
8729 split = segment.split(flex[0]);
8730 left = split[0];
8731 right = split[1];
8732 return [offsetSegment(left, amount), offsetSegment(right, amount)];
8733 }
8734 split = segment.split(flex[0]);
8735 left = split[0];
8736 var t = (flex[1] - flex[0]) / (1 - flex[0]);
8737 split = split[1].split(t);
8738 mid = split[0];
8739 right = split[1];
8740 return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];
8741 }
8742 function OffsetPathModifier() {}
8743 extendPrototype([ShapeModifier], OffsetPathModifier);
8744 OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {
8745 this.getValue = this.processKeys;
8746 this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);
8747 this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);
8748 this.lineJoin = data.lj;
8749 this._isAnimated = this.amount.effectsSequence.length !== 0;
8750 };
8751 OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {
8752 var outputBezier = shapePool.newElement();
8753 outputBezier.c = inputBezier.c;
8754 var count = inputBezier.length();
8755 if (!inputBezier.c) {
8756 count -= 1;
8757 }
8758 var i;
8759 var j;
8760 var segment;
8761 var multiSegments = [];
8762 for (i = 0; i < count; i += 1) {
8763 segment = PolynomialBezier.shapeSegment(inputBezier, i);
8764 multiSegments.push(offsetSegmentSplit(segment, amount));
8765 }
8766 if (!inputBezier.c) {
8767 for (i = count - 1; i >= 0; i -= 1) {
8768 segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);
8769 multiSegments.push(offsetSegmentSplit(segment, amount));
8770 }
8771 }
8772 multiSegments = pruneIntersections(multiSegments);
8773
8774 // Add bezier segments to the output and apply line joints
8775 var lastPoint = null;
8776 var lastSeg = null;
8777 for (i = 0; i < multiSegments.length; i += 1) {
8778 var multiSegment = multiSegments[i];
8779 if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);
8780 lastSeg = multiSegment[multiSegment.length - 1];
8781 for (j = 0; j < multiSegment.length; j += 1) {
8782 segment = multiSegment[j];
8783 if (lastPoint && pointEqual(segment.points[0], lastPoint)) {
8784 outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);
8785 } else {
8786 outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());
8787 }
8788 outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());
8789 lastPoint = segment.points[3];
8790 }
8791 }
8792 if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);
8793 return outputBezier;
8794 };
8795 OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {
8796 var shapePaths;
8797 var i;
8798 var len = this.shapes.length;
8799 var j;
8800 var jLen;
8801 var amount = this.amount.v;
8802 var miterLimit = this.miterLimit.v;
8803 var lineJoin = this.lineJoin;
8804 if (amount !== 0) {
8805 var shapeData;
8806 var localShapeCollection;
8807 for (i = 0; i < len; i += 1) {
8808 shapeData = this.shapes[i];
8809 localShapeCollection = shapeData.localShapeCollection;
8810 if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {
8811 localShapeCollection.releaseShapes();
8812 shapeData.shape._mdf = true;
8813 shapePaths = shapeData.shape.paths.shapes;
8814 jLen = shapeData.shape.paths._length;
8815 for (j = 0; j < jLen; j += 1) {
8816 localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));
8817 }
8818 }
8819 shapeData.shape.paths = shapeData.localShapeCollection;
8820 }
8821 }
8822 if (!this.dynamicProperties.length) {
8823 this._mdf = false;
8824 }
8825 };
8826
8827 function getFontProperties(fontData) {
8828 var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];
8829 var fWeight = 'normal';
8830 var fStyle = 'normal';
8831 var len = styles.length;
8832 var styleName;
8833 for (var i = 0; i < len; i += 1) {
8834 styleName = styles[i].toLowerCase();
8835 switch (styleName) {
8836 case 'italic':
8837 fStyle = 'italic';
8838 break;
8839 case 'bold':
8840 fWeight = '700';
8841 break;
8842 case 'black':
8843 fWeight = '900';
8844 break;
8845 case 'medium':
8846 fWeight = '500';
8847 break;
8848 case 'regular':
8849 case 'normal':
8850 fWeight = '400';
8851 break;
8852 case 'light':
8853 case 'thin':
8854 fWeight = '200';
8855 break;
8856 default:
8857 break;
8858 }
8859 }
8860 return {
8861 style: fStyle,
8862 weight: fontData.fWeight || fWeight
8863 };
8864 }
8865
8866 var FontManager = function () {
8867 var maxWaitingTime = 5000;
8868 var emptyChar = {
8869 w: 0,
8870 size: 0,
8871 shapes: [],
8872 data: {
8873 shapes: []
8874 }
8875 };
8876 var combinedCharacters = [];
8877 // Hindi characters
8878 combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);
8879 var BLACK_FLAG_CODE_POINT = 127988;
8880 var CANCEL_TAG_CODE_POINT = 917631;
8881 var A_TAG_CODE_POINT = 917601;
8882 var Z_TAG_CODE_POINT = 917626;
8883 var VARIATION_SELECTOR_16_CODE_POINT = 65039;
8884 var ZERO_WIDTH_JOINER_CODE_POINT = 8205;
8885 var REGIONAL_CHARACTER_A_CODE_POINT = 127462;
8886 var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;
8887 var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];
8888 function trimFontOptions(font) {
8889 var familyArray = font.split(',');
8890 var i;
8891 var len = familyArray.length;
8892 var enabledFamilies = [];
8893 for (i = 0; i < len; i += 1) {
8894 if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {
8895 enabledFamilies.push(familyArray[i]);
8896 }
8897 }
8898 return enabledFamilies.join(',');
8899 }
8900 function setUpNode(font, family) {
8901 var parentNode = createTag('span');
8902 // Node is invisible to screen readers.
8903 parentNode.setAttribute('aria-hidden', true);
8904 parentNode.style.fontFamily = family;
8905 var node = createTag('span');
8906 // Characters that vary significantly among different fonts
8907 node.innerText = 'giItT1WQy@!-/#';
8908 // Visible - so we can measure it - but not on the screen
8909 parentNode.style.position = 'absolute';
8910 parentNode.style.left = '-10000px';
8911 parentNode.style.top = '-10000px';
8912 // Large font size makes even subtle changes obvious
8913 parentNode.style.fontSize = '300px';
8914 // Reset any font properties
8915 parentNode.style.fontVariant = 'normal';
8916 parentNode.style.fontStyle = 'normal';
8917 parentNode.style.fontWeight = 'normal';
8918 parentNode.style.letterSpacing = '0';
8919 parentNode.appendChild(node);
8920 document.body.appendChild(parentNode);
8921
8922 // Remember width with no applied web font
8923 var width = node.offsetWidth;
8924 node.style.fontFamily = trimFontOptions(font) + ', ' + family;
8925 return {
8926 node: node,
8927 w: width,
8928 parent: parentNode
8929 };
8930 }
8931 function checkLoadedFonts() {
8932 var i;
8933 var len = this.fonts.length;
8934 var node;
8935 var w;
8936 var loadedCount = len;
8937 for (i = 0; i < len; i += 1) {
8938 if (this.fonts[i].loaded) {
8939 loadedCount -= 1;
8940 } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {
8941 this.fonts[i].loaded = true;
8942 } else {
8943 node = this.fonts[i].monoCase.node;
8944 w = this.fonts[i].monoCase.w;
8945 if (node.offsetWidth !== w) {
8946 loadedCount -= 1;
8947 this.fonts[i].loaded = true;
8948 } else {
8949 node = this.fonts[i].sansCase.node;
8950 w = this.fonts[i].sansCase.w;
8951 if (node.offsetWidth !== w) {
8952 loadedCount -= 1;
8953 this.fonts[i].loaded = true;
8954 }
8955 }
8956 if (this.fonts[i].loaded) {
8957 this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);
8958 this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);
8959 }
8960 }
8961 }
8962 if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {
8963 setTimeout(this.checkLoadedFontsBinded, 20);
8964 } else {
8965 setTimeout(this.setIsLoadedBinded, 10);
8966 }
8967 }
8968 function createHelper(fontData, def) {
8969 var engine = document.body && def ? 'svg' : 'canvas';
8970 var helper;
8971 var fontProps = getFontProperties(fontData);
8972 if (engine === 'svg') {
8973 var tHelper = createNS('text');
8974 tHelper.style.fontSize = '100px';
8975 // tHelper.style.fontFamily = fontData.fFamily;
8976 tHelper.setAttribute('font-family', fontData.fFamily);
8977 tHelper.setAttribute('font-style', fontProps.style);
8978 tHelper.setAttribute('font-weight', fontProps.weight);
8979 tHelper.textContent = '1';
8980 if (fontData.fClass) {
8981 tHelper.style.fontFamily = 'inherit';
8982 tHelper.setAttribute('class', fontData.fClass);
8983 } else {
8984 tHelper.style.fontFamily = fontData.fFamily;
8985 }
8986 def.appendChild(tHelper);
8987 helper = tHelper;
8988 } else {
8989 var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');
8990 tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;
8991 helper = tCanvasHelper;
8992 }
8993 function measure(text) {
8994 if (engine === 'svg') {
8995 helper.textContent = text;
8996 return helper.getComputedTextLength();
8997 }
8998 return helper.measureText(text).width;
8999 }
9000 return {
9001 measureText: measure
9002 };
9003 }
9004 function addFonts(fontData, defs) {
9005 if (!fontData) {
9006 this.isLoaded = true;
9007 return;
9008 }
9009 if (this.chars) {
9010 this.isLoaded = true;
9011 this.fonts = fontData.list;
9012 return;
9013 }
9014 if (!document.body) {
9015 this.isLoaded = true;
9016 fontData.list.forEach(function (data) {
9017 data.helper = createHelper(data);
9018 data.cache = {};
9019 });
9020 this.fonts = fontData.list;
9021 return;
9022 }
9023 var fontArr = fontData.list;
9024 var i;
9025 var len = fontArr.length;
9026 var _pendingFonts = len;
9027 for (i = 0; i < len; i += 1) {
9028 var shouldLoadFont = true;
9029 var loadedSelector;
9030 var j;
9031 fontArr[i].loaded = false;
9032 fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');
9033 fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');
9034 if (!fontArr[i].fPath) {
9035 fontArr[i].loaded = true;
9036 _pendingFonts -= 1;
9037 } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {
9038 loadedSelector = document.querySelectorAll('style[f-forigin="p"][f-family="' + fontArr[i].fFamily + '"], style[f-origin="3"][f-family="' + fontArr[i].fFamily + '"]');
9039 if (loadedSelector.length > 0) {
9040 shouldLoadFont = false;
9041 }
9042 if (shouldLoadFont) {
9043 var s = createTag('style');
9044 s.setAttribute('f-forigin', fontArr[i].fOrigin);
9045 s.setAttribute('f-origin', fontArr[i].origin);
9046 s.setAttribute('f-family', fontArr[i].fFamily);
9047 s.type = 'text/css';
9048 s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}";
9049 defs.appendChild(s);
9050 }
9051 } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {
9052 loadedSelector = document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]');
9053 for (j = 0; j < loadedSelector.length; j += 1) {
9054 if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {
9055 // Font is already loaded
9056 shouldLoadFont = false;
9057 }
9058 }
9059 if (shouldLoadFont) {
9060 var l = createTag('link');
9061 l.setAttribute('f-forigin', fontArr[i].fOrigin);
9062 l.setAttribute('f-origin', fontArr[i].origin);
9063 l.type = 'text/css';
9064 l.rel = 'stylesheet';
9065 l.href = fontArr[i].fPath;
9066 document.body.appendChild(l);
9067 }
9068 } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {
9069 loadedSelector = document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]');
9070 for (j = 0; j < loadedSelector.length; j += 1) {
9071 if (fontArr[i].fPath === loadedSelector[j].src) {
9072 // Font is already loaded
9073 shouldLoadFont = false;
9074 }
9075 }
9076 if (shouldLoadFont) {
9077 var sc = createTag('link');
9078 sc.setAttribute('f-forigin', fontArr[i].fOrigin);
9079 sc.setAttribute('f-origin', fontArr[i].origin);
9080 sc.setAttribute('rel', 'stylesheet');
9081 sc.setAttribute('href', fontArr[i].fPath);
9082 defs.appendChild(sc);
9083 }
9084 }
9085 fontArr[i].helper = createHelper(fontArr[i], defs);
9086 fontArr[i].cache = {};
9087 this.fonts.push(fontArr[i]);
9088 }
9089 if (_pendingFonts === 0) {
9090 this.isLoaded = true;
9091 } else {
9092 // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.
9093 // Adding this timeout seems to fix it
9094 setTimeout(this.checkLoadedFonts.bind(this), 100);
9095 }
9096 }
9097 function addChars(chars) {
9098 if (!chars) {
9099 return;
9100 }
9101 if (!this.chars) {
9102 this.chars = [];
9103 }
9104 var i;
9105 var len = chars.length;
9106 var j;
9107 var jLen = this.chars.length;
9108 var found;
9109 for (i = 0; i < len; i += 1) {
9110 j = 0;
9111 found = false;
9112 while (j < jLen) {
9113 if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {
9114 found = true;
9115 }
9116 j += 1;
9117 }
9118 if (!found) {
9119 this.chars.push(chars[i]);
9120 jLen += 1;
9121 }
9122 }
9123 }
9124 function getCharData(_char, style, font) {
9125 var i = 0;
9126 var len = this.chars.length;
9127 while (i < len) {
9128 if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {
9129 return this.chars[i];
9130 }
9131 i += 1;
9132 }
9133 if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console
9134 && !this._warned) {
9135 this._warned = true;
9136 console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console
9137 }
9138 return emptyChar;
9139 }
9140 function measureText(_char2, fontName, size) {
9141 var fontData = this.getFontByName(fontName);
9142 // Using the char instead of char.charCodeAt(0)
9143 // to avoid collisions between equal chars
9144 var index = _char2;
9145 if (!fontData.cache[index]) {
9146 var tHelper = fontData.helper;
9147 if (_char2 === ' ') {
9148 var doubleSize = tHelper.measureText('|' + _char2 + '|');
9149 var singleSize = tHelper.measureText('||');
9150 fontData.cache[index] = (doubleSize - singleSize) / 100;
9151 } else {
9152 fontData.cache[index] = tHelper.measureText(_char2) / 100;
9153 }
9154 }
9155 return fontData.cache[index] * size;
9156 }
9157 function getFontByName(name) {
9158 var i = 0;
9159 var len = this.fonts.length;
9160 while (i < len) {
9161 if (this.fonts[i].fName === name) {
9162 return this.fonts[i];
9163 }
9164 i += 1;
9165 }
9166 return this.fonts[0];
9167 }
9168 function getCodePoint(string) {
9169 var codePoint = 0;
9170 var first = string.charCodeAt(0);
9171 if (first >= 0xD800 && first <= 0xDBFF) {
9172 var second = string.charCodeAt(1);
9173 if (second >= 0xDC00 && second <= 0xDFFF) {
9174 codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
9175 }
9176 }
9177 return codePoint;
9178 }
9179
9180 // Skin tone modifiers
9181 function isModifier(firstCharCode, secondCharCode) {
9182 var sum = firstCharCode.toString(16) + secondCharCode.toString(16);
9183 return surrogateModifiers.indexOf(sum) !== -1;
9184 }
9185 function isZeroWidthJoiner(charCode) {
9186 return charCode === ZERO_WIDTH_JOINER_CODE_POINT;
9187 }
9188
9189 // This codepoint may change the appearance of the preceding character.
9190 // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered
9191 // as a colorful image as compared to a monochrome text variant.
9192 function isVariationSelector(charCode) {
9193 return charCode === VARIATION_SELECTOR_16_CODE_POINT;
9194 }
9195
9196 // The regional indicator symbols are a set of 26 alphabetic Unicode
9197 /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2
9198 // two-letter country codes in a way that allows optional special treatment.
9199 function isRegionalCode(string) {
9200 var codePoint = getCodePoint(string);
9201 if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {
9202 return true;
9203 }
9204 return false;
9205 }
9206
9207 // Some Emoji implementations represent combinations of
9208 // two “regional indicator” letters as a single flag symbol.
9209 function isFlagEmoji(string) {
9210 return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));
9211 }
9212 function isCombinedCharacter(_char3) {
9213 return combinedCharacters.indexOf(_char3) !== -1;
9214 }
9215
9216 // Regional flags start with a BLACK_FLAG_CODE_POINT
9217 // folowed by 5 chars in the TAG range
9218 // and end with a CANCEL_TAG_CODE_POINT
9219 function isRegionalFlag(text, index) {
9220 var codePoint = getCodePoint(text.substr(index, 2));
9221 if (codePoint !== BLACK_FLAG_CODE_POINT) {
9222 return false;
9223 }
9224 var count = 0;
9225 index += 2;
9226 while (count < 5) {
9227 codePoint = getCodePoint(text.substr(index, 2));
9228 if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {
9229 return false;
9230 }
9231 count += 1;
9232 index += 2;
9233 }
9234 return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;
9235 }
9236 function setIsLoaded() {
9237 this.isLoaded = true;
9238 }
9239 var Font = function Font() {
9240 this.fonts = [];
9241 this.chars = null;
9242 this.typekitLoaded = 0;
9243 this.isLoaded = false;
9244 this._warned = false;
9245 this.initTime = Date.now();
9246 this.setIsLoadedBinded = this.setIsLoaded.bind(this);
9247 this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);
9248 };
9249 Font.isModifier = isModifier;
9250 Font.isZeroWidthJoiner = isZeroWidthJoiner;
9251 Font.isFlagEmoji = isFlagEmoji;
9252 Font.isRegionalCode = isRegionalCode;
9253 Font.isCombinedCharacter = isCombinedCharacter;
9254 Font.isRegionalFlag = isRegionalFlag;
9255 Font.isVariationSelector = isVariationSelector;
9256 Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;
9257 var fontPrototype = {
9258 addChars: addChars,
9259 addFonts: addFonts,
9260 getCharData: getCharData,
9261 getFontByName: getFontByName,
9262 measureText: measureText,
9263 checkLoadedFonts: checkLoadedFonts,
9264 setIsLoaded: setIsLoaded
9265 };
9266 Font.prototype = fontPrototype;
9267 return Font;
9268 }();
9269
9270 function SlotManager(animationData) {
9271 this.animationData = animationData;
9272 }
9273 SlotManager.prototype.getProp = function (data) {
9274 if (this.animationData.slots && this.animationData.slots[data.sid]) {
9275 return Object.assign(data, this.animationData.slots[data.sid].p);
9276 }
9277 return data;
9278 };
9279 function slotFactory(animationData) {
9280 return new SlotManager(animationData);
9281 }
9282
9283 function RenderableElement() {}
9284 RenderableElement.prototype = {
9285 initRenderable: function initRenderable() {
9286 // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange
9287 this.isInRange = false;
9288 // layer's display state
9289 this.hidden = false;
9290 // If layer's transparency equals 0, it can be hidden
9291 this.isTransparent = false;
9292 // list of animated components
9293 this.renderableComponents = [];
9294 },
9295 addRenderableComponent: function addRenderableComponent(component) {
9296 if (this.renderableComponents.indexOf(component) === -1) {
9297 this.renderableComponents.push(component);
9298 }
9299 },
9300 removeRenderableComponent: function removeRenderableComponent(component) {
9301 if (this.renderableComponents.indexOf(component) !== -1) {
9302 this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);
9303 }
9304 },
9305 prepareRenderableFrame: function prepareRenderableFrame(num) {
9306 this.checkLayerLimits(num);
9307 },
9308 checkTransparency: function checkTransparency() {
9309 if (this.finalTransform.mProp.o.v <= 0) {
9310 if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {
9311 this.isTransparent = true;
9312 this.hide();
9313 }
9314 } else if (this.isTransparent) {
9315 this.isTransparent = false;
9316 this.show();
9317 }
9318 },
9319 /**
9320 * @function
9321 * Initializes frame related properties.
9322 *
9323 * @param {number} num
9324 * current frame number in Layer's time
9325 *
9326 */
9327 checkLayerLimits: function checkLayerLimits(num) {
9328 if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {
9329 if (this.isInRange !== true) {
9330 this.globalData._mdf = true;
9331 this._mdf = true;
9332 this.isInRange = true;
9333 this.show();
9334 }
9335 } else if (this.isInRange !== false) {
9336 this.globalData._mdf = true;
9337 this.isInRange = false;
9338 this.hide();
9339 }
9340 },
9341 renderRenderable: function renderRenderable() {
9342 var i;
9343 var len = this.renderableComponents.length;
9344 for (i = 0; i < len; i += 1) {
9345 this.renderableComponents[i].renderFrame(this._isFirstFrame);
9346 }
9347 /* this.maskManager.renderFrame(this.finalTransform.mat);
9348 this.renderableEffectsManager.renderFrame(this._isFirstFrame); */
9349 },
9350 sourceRectAtTime: function sourceRectAtTime() {
9351 return {
9352 top: 0,
9353 left: 0,
9354 width: 100,
9355 height: 100
9356 };
9357 },
9358 getLayerSize: function getLayerSize() {
9359 if (this.data.ty === 5) {
9360 return {
9361 w: this.data.textData.width,
9362 h: this.data.textData.height
9363 };
9364 }
9365 return {
9366 w: this.data.width,
9367 h: this.data.height
9368 };
9369 }
9370 };
9371
9372 var getBlendMode = function () {
9373 var blendModeEnums = {
9374 0: 'source-over',
9375 1: 'multiply',
9376 2: 'screen',
9377 3: 'overlay',
9378 4: 'darken',
9379 5: 'lighten',
9380 6: 'color-dodge',
9381 7: 'color-burn',
9382 8: 'hard-light',
9383 9: 'soft-light',
9384 10: 'difference',
9385 11: 'exclusion',
9386 12: 'hue',
9387 13: 'saturation',
9388 14: 'color',
9389 15: 'luminosity'
9390 };
9391 return function (mode) {
9392 return blendModeEnums[mode] || '';
9393 };
9394 }();
9395
9396 function SliderEffect(data, elem, container) {
9397 this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);
9398 }
9399 function AngleEffect(data, elem, container) {
9400 this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);
9401 }
9402 function ColorEffect(data, elem, container) {
9403 this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);
9404 }
9405 function PointEffect(data, elem, container) {
9406 this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);
9407 }
9408 function LayerIndexEffect(data, elem, container) {
9409 this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);
9410 }
9411 function MaskIndexEffect(data, elem, container) {
9412 this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);
9413 }
9414 function CheckboxEffect(data, elem, container) {
9415 this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);
9416 }
9417 function NoValueEffect() {
9418 this.p = {};
9419 }
9420
9421 function EffectsManager(data, element) {
9422 var effects = data.ef || [];
9423 this.effectElements = [];
9424 var i;
9425 var len = effects.length;
9426 var effectItem;
9427 for (i = 0; i < len; i += 1) {
9428 effectItem = new GroupEffect(effects[i], element);
9429 this.effectElements.push(effectItem);
9430 }
9431 }
9432 function GroupEffect(data, element) {
9433 this.init(data, element);
9434 }
9435 extendPrototype([DynamicPropertyContainer], GroupEffect);
9436 GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;
9437 GroupEffect.prototype.init = function (data, element) {
9438 this.data = data;
9439 this.effectElements = [];
9440 this.initDynamicPropertyContainer(element);
9441 var i;
9442 var len = this.data.ef.length;
9443 var eff;
9444 var effects = this.data.ef;
9445 for (i = 0; i < len; i += 1) {
9446 eff = null;
9447 switch (effects[i].ty) {
9448 case 0:
9449 eff = new SliderEffect(effects[i], element, this);
9450 break;
9451 case 1:
9452 eff = new AngleEffect(effects[i], element, this);
9453 break;
9454 case 2:
9455 eff = new ColorEffect(effects[i], element, this);
9456 break;
9457 case 3:
9458 eff = new PointEffect(effects[i], element, this);
9459 break;
9460 case 4:
9461 case 7:
9462 eff = new CheckboxEffect(effects[i], element, this);
9463 break;
9464 case 10:
9465 eff = new LayerIndexEffect(effects[i], element, this);
9466 break;
9467 case 11:
9468 eff = new MaskIndexEffect(effects[i], element, this);
9469 break;
9470 case 5:
9471 eff = new EffectsManager(effects[i], element, this);
9472 break;
9473 // case 6:
9474 default:
9475 eff = new NoValueEffect(effects[i], element, this);
9476 break;
9477 }
9478 if (eff) {
9479 this.effectElements.push(eff);
9480 }
9481 }
9482 };
9483
9484 function BaseElement() {}
9485 BaseElement.prototype = {
9486 checkMasks: function checkMasks() {
9487 if (!this.data.hasMask) {
9488 return false;
9489 }
9490 var i = 0;
9491 var len = this.data.masksProperties.length;
9492 while (i < len) {
9493 if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {
9494 return true;
9495 }
9496 i += 1;
9497 }
9498 return false;
9499 },
9500 initExpressions: function initExpressions() {
9501 var expressionsInterfaces = getExpressionInterfaces();
9502 if (!expressionsInterfaces) {
9503 return;
9504 }
9505 var LayerExpressionInterface = expressionsInterfaces('layer');
9506 var EffectsExpressionInterface = expressionsInterfaces('effects');
9507 var ShapeExpressionInterface = expressionsInterfaces('shape');
9508 var TextExpressionInterface = expressionsInterfaces('text');
9509 var CompExpressionInterface = expressionsInterfaces('comp');
9510 this.layerInterface = LayerExpressionInterface(this);
9511 if (this.data.hasMask && this.maskManager) {
9512 this.layerInterface.registerMaskInterface(this.maskManager);
9513 }
9514 var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);
9515 this.layerInterface.registerEffectsInterface(effectsInterface);
9516 if (this.data.ty === 0 || this.data.xt) {
9517 this.compInterface = CompExpressionInterface(this);
9518 } else if (this.data.ty === 4) {
9519 this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);
9520 this.layerInterface.content = this.layerInterface.shapeInterface;
9521 } else if (this.data.ty === 5) {
9522 this.layerInterface.textInterface = TextExpressionInterface(this);
9523 this.layerInterface.text = this.layerInterface.textInterface;
9524 }
9525 },
9526 setBlendMode: function setBlendMode() {
9527 var blendModeValue = getBlendMode(this.data.bm);
9528 var elem = this.baseElement || this.layerElement;
9529 elem.style['mix-blend-mode'] = blendModeValue;
9530 },
9531 initBaseData: function initBaseData(data, globalData, comp) {
9532 this.globalData = globalData;
9533 this.comp = comp;
9534 this.data = data;
9535 this.layerId = createElementID();
9536
9537 // Stretch factor for old animations missing this property.
9538 if (!this.data.sr) {
9539 this.data.sr = 1;
9540 }
9541 // effects manager
9542 this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);
9543 },
9544 getType: function getType() {
9545 return this.type;
9546 },
9547 sourceRectAtTime: function sourceRectAtTime() {}
9548 };
9549
9550 /**
9551 * @file
9552 * Handles element's layer frame update.
9553 * Checks layer in point and out point
9554 *
9555 */
9556
9557 function FrameElement() {}
9558 FrameElement.prototype = {
9559 /**
9560 * @function
9561 * Initializes frame related properties.
9562 *
9563 */
9564 initFrame: function initFrame() {
9565 // set to true when inpoint is rendered
9566 this._isFirstFrame = false;
9567 // list of animated properties
9568 this.dynamicProperties = [];
9569 // If layer has been modified in current tick this will be true
9570 this._mdf = false;
9571 },
9572 /**
9573 * @function
9574 * Calculates all dynamic values
9575 *
9576 * @param {number} num
9577 * current frame number in Layer's time
9578 * @param {boolean} isVisible
9579 * if layers is currently in range
9580 *
9581 */
9582 prepareProperties: function prepareProperties(num, isVisible) {
9583 var i;
9584 var len = this.dynamicProperties.length;
9585 for (i = 0; i < len; i += 1) {
9586 if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {
9587 this.dynamicProperties[i].getValue();
9588 if (this.dynamicProperties[i]._mdf) {
9589 this.globalData._mdf = true;
9590 this._mdf = true;
9591 }
9592 }
9593 }
9594 },
9595 addDynamicProperty: function addDynamicProperty(prop) {
9596 if (this.dynamicProperties.indexOf(prop) === -1) {
9597 this.dynamicProperties.push(prop);
9598 }
9599 }
9600 };
9601
9602 function FootageElement(data, globalData, comp) {
9603 this.initFrame();
9604 this.initRenderable();
9605 this.assetData = globalData.getAssetData(data.refId);
9606 this.footageData = globalData.imageLoader.getAsset(this.assetData);
9607 this.initBaseData(data, globalData, comp);
9608 }
9609 FootageElement.prototype.prepareFrame = function () {};
9610 extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);
9611 FootageElement.prototype.getBaseElement = function () {
9612 return null;
9613 };
9614 FootageElement.prototype.renderFrame = function () {};
9615 FootageElement.prototype.destroy = function () {};
9616 FootageElement.prototype.initExpressions = function () {
9617 var expressionsInterfaces = getExpressionInterfaces();
9618 if (!expressionsInterfaces) {
9619 return;
9620 }
9621 var FootageInterface = expressionsInterfaces('footage');
9622 this.layerInterface = FootageInterface(this);
9623 };
9624 FootageElement.prototype.getFootageData = function () {
9625 return this.footageData;
9626 };
9627
9628 function AudioElement(data, globalData, comp) {
9629 this.initFrame();
9630 this.initRenderable();
9631 this.assetData = globalData.getAssetData(data.refId);
9632 this.initBaseData(data, globalData, comp);
9633 this._isPlaying = false;
9634 this._canPlay = false;
9635 var assetPath = this.globalData.getAssetsPath(this.assetData);
9636 this.audio = this.globalData.audioController.createAudio(assetPath);
9637 this._currentTime = 0;
9638 this.globalData.audioController.addAudio(this);
9639 this._volumeMultiplier = 1;
9640 this._volume = 1;
9641 this._previousVolume = null;
9642 this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
9643 _placeholder: true
9644 };
9645 this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {
9646 k: [100]
9647 }, 1, 0.01, this);
9648 }
9649 AudioElement.prototype.prepareFrame = function (num) {
9650 this.prepareRenderableFrame(num, true);
9651 this.prepareProperties(num, true);
9652 if (!this.tm._placeholder) {
9653 var timeRemapped = this.tm.v;
9654 this._currentTime = timeRemapped;
9655 } else {
9656 this._currentTime = num / this.data.sr;
9657 }
9658 this._volume = this.lv.v[0];
9659 var totalVolume = this._volume * this._volumeMultiplier;
9660 if (this._previousVolume !== totalVolume) {
9661 this._previousVolume = totalVolume;
9662 this.audio.volume(totalVolume);
9663 }
9664 };
9665 extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);
9666 AudioElement.prototype.renderFrame = function () {
9667 if (this.isInRange && this._canPlay) {
9668 if (!this._isPlaying) {
9669 this.audio.play();
9670 this.audio.seek(this._currentTime / this.globalData.frameRate);
9671 this._isPlaying = true;
9672 } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {
9673 this.audio.seek(this._currentTime / this.globalData.frameRate);
9674 }
9675 }
9676 };
9677 AudioElement.prototype.show = function () {
9678 // this.audio.play()
9679 };
9680 AudioElement.prototype.hide = function () {
9681 this.audio.pause();
9682 this._isPlaying = false;
9683 };
9684 AudioElement.prototype.pause = function () {
9685 this.audio.pause();
9686 this._isPlaying = false;
9687 this._canPlay = false;
9688 };
9689 AudioElement.prototype.resume = function () {
9690 this._canPlay = true;
9691 };
9692 AudioElement.prototype.setRate = function (rateValue) {
9693 this.audio.rate(rateValue);
9694 };
9695 AudioElement.prototype.volume = function (volumeValue) {
9696 this._volumeMultiplier = volumeValue;
9697 this._previousVolume = volumeValue * this._volume;
9698 this.audio.volume(this._previousVolume);
9699 };
9700 AudioElement.prototype.getBaseElement = function () {
9701 return null;
9702 };
9703 AudioElement.prototype.destroy = function () {};
9704 AudioElement.prototype.sourceRectAtTime = function () {};
9705 AudioElement.prototype.initExpressions = function () {};
9706
9707 function BaseRenderer() {}
9708 BaseRenderer.prototype.checkLayers = function (num) {
9709 var i;
9710 var len = this.layers.length;
9711 var data;
9712 this.completeLayers = true;
9713 for (i = len - 1; i >= 0; i -= 1) {
9714 if (!this.elements[i]) {
9715 data = this.layers[i];
9716 if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {
9717 this.buildItem(i);
9718 }
9719 }
9720 this.completeLayers = this.elements[i] ? this.completeLayers : false;
9721 }
9722 this.checkPendingElements();
9723 };
9724 BaseRenderer.prototype.createItem = function (layer) {
9725 switch (layer.ty) {
9726 case 2:
9727 return this.createImage(layer);
9728 case 0:
9729 return this.createComp(layer);
9730 case 1:
9731 return this.createSolid(layer);
9732 case 3:
9733 return this.createNull(layer);
9734 case 4:
9735 return this.createShape(layer);
9736 case 5:
9737 return this.createText(layer);
9738 case 6:
9739 return this.createAudio(layer);
9740 case 13:
9741 return this.createCamera(layer);
9742 case 15:
9743 return this.createFootage(layer);
9744 default:
9745 return this.createNull(layer);
9746 }
9747 };
9748 BaseRenderer.prototype.createCamera = function () {
9749 throw new Error('You\'re using a 3d camera. Try the html renderer.');
9750 };
9751 BaseRenderer.prototype.createAudio = function (data) {
9752 return new AudioElement(data, this.globalData, this);
9753 };
9754 BaseRenderer.prototype.createFootage = function (data) {
9755 return new FootageElement(data, this.globalData, this);
9756 };
9757 BaseRenderer.prototype.buildAllItems = function () {
9758 var i;
9759 var len = this.layers.length;
9760 for (i = 0; i < len; i += 1) {
9761 this.buildItem(i);
9762 }
9763 this.checkPendingElements();
9764 };
9765 BaseRenderer.prototype.includeLayers = function (newLayers) {
9766 this.completeLayers = false;
9767 var i;
9768 var len = newLayers.length;
9769 var j;
9770 var jLen = this.layers.length;
9771 for (i = 0; i < len; i += 1) {
9772 j = 0;
9773 while (j < jLen) {
9774 if (this.layers[j].id === newLayers[i].id) {
9775 this.layers[j] = newLayers[i];
9776 break;
9777 }
9778 j += 1;
9779 }
9780 }
9781 };
9782 BaseRenderer.prototype.setProjectInterface = function (pInterface) {
9783 this.globalData.projectInterface = pInterface;
9784 };
9785 BaseRenderer.prototype.initItems = function () {
9786 if (!this.globalData.progressiveLoad) {
9787 this.buildAllItems();
9788 }
9789 };
9790 BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {
9791 var elements = this.elements;
9792 var layers = this.layers;
9793 var i = 0;
9794 var len = layers.length;
9795 while (i < len) {
9796 if (layers[i].ind == parentName) {
9797 // eslint-disable-line eqeqeq
9798 if (!elements[i] || elements[i] === true) {
9799 this.buildItem(i);
9800 this.addPendingElement(element);
9801 } else {
9802 hierarchy.push(elements[i]);
9803 elements[i].setAsParent();
9804 if (layers[i].parent !== undefined) {
9805 this.buildElementParenting(element, layers[i].parent, hierarchy);
9806 } else {
9807 element.setHierarchy(hierarchy);
9808 }
9809 }
9810 }
9811 i += 1;
9812 }
9813 };
9814 BaseRenderer.prototype.addPendingElement = function (element) {
9815 this.pendingElements.push(element);
9816 };
9817 BaseRenderer.prototype.searchExtraCompositions = function (assets) {
9818 var i;
9819 var len = assets.length;
9820 for (i = 0; i < len; i += 1) {
9821 if (assets[i].xt) {
9822 var comp = this.createComp(assets[i]);
9823 comp.initExpressions();
9824 this.globalData.projectInterface.registerComposition(comp);
9825 }
9826 }
9827 };
9828 BaseRenderer.prototype.getElementById = function (ind) {
9829 var i;
9830 var len = this.elements.length;
9831 for (i = 0; i < len; i += 1) {
9832 if (this.elements[i].data.ind === ind) {
9833 return this.elements[i];
9834 }
9835 }
9836 return null;
9837 };
9838 BaseRenderer.prototype.getElementByPath = function (path) {
9839 var pathValue = path.shift();
9840 var element;
9841 if (typeof pathValue === 'number') {
9842 element = this.elements[pathValue];
9843 } else {
9844 var i;
9845 var len = this.elements.length;
9846 for (i = 0; i < len; i += 1) {
9847 if (this.elements[i].data.nm === pathValue) {
9848 element = this.elements[i];
9849 break;
9850 }
9851 }
9852 }
9853 if (path.length === 0) {
9854 return element;
9855 }
9856 return element.getElementByPath(path);
9857 };
9858 BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {
9859 this.globalData.fontManager = new FontManager();
9860 this.globalData.slotManager = slotFactory(animData);
9861 this.globalData.fontManager.addChars(animData.chars);
9862 this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);
9863 this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);
9864 this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);
9865 this.globalData.imageLoader = this.animationItem.imagePreloader;
9866 this.globalData.audioController = this.animationItem.audioController;
9867 this.globalData.frameId = 0;
9868 this.globalData.frameRate = animData.fr;
9869 this.globalData.nm = animData.nm;
9870 this.globalData.compSize = {
9871 w: animData.w,
9872 h: animData.h
9873 };
9874 };
9875
9876 var effectTypes = {
9877 TRANSFORM_EFFECT: 'transformEFfect'
9878 };
9879
9880 function TransformElement() {}
9881 TransformElement.prototype = {
9882 initTransform: function initTransform() {
9883 var mat = new Matrix();
9884 this.finalTransform = {
9885 mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {
9886 o: 0
9887 },
9888 _matMdf: false,
9889 _localMatMdf: false,
9890 _opMdf: false,
9891 mat: mat,
9892 localMat: mat,
9893 localOpacity: 1
9894 };
9895 if (this.data.ao) {
9896 this.finalTransform.mProp.autoOriented = true;
9897 }
9898
9899 // TODO: check TYPE 11: Guided elements
9900 if (this.data.ty !== 11) {
9901 // this.createElements();
9902 }
9903 },
9904 renderTransform: function renderTransform() {
9905 this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;
9906 this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;
9907 if (this.hierarchy) {
9908 var mat;
9909 var finalMat = this.finalTransform.mat;
9910 var i = 0;
9911 var len = this.hierarchy.length;
9912 // Checking if any of the transformation matrices in the hierarchy chain has changed.
9913 if (!this.finalTransform._matMdf) {
9914 while (i < len) {
9915 if (this.hierarchy[i].finalTransform.mProp._mdf) {
9916 this.finalTransform._matMdf = true;
9917 break;
9918 }
9919 i += 1;
9920 }
9921 }
9922 if (this.finalTransform._matMdf) {
9923 mat = this.finalTransform.mProp.v.props;
9924 finalMat.cloneFromProps(mat);
9925 for (i = 0; i < len; i += 1) {
9926 finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);
9927 }
9928 }
9929 }
9930 if (!this.localTransforms || this.finalTransform._matMdf) {
9931 this.finalTransform._localMatMdf = this.finalTransform._matMdf;
9932 }
9933 if (this.finalTransform._opMdf) {
9934 this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;
9935 }
9936 },
9937 renderLocalTransform: function renderLocalTransform() {
9938 if (this.localTransforms) {
9939 var i = 0;
9940 var len = this.localTransforms.length;
9941 this.finalTransform._localMatMdf = this.finalTransform._matMdf;
9942 if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {
9943 while (i < len) {
9944 if (this.localTransforms[i]._mdf) {
9945 this.finalTransform._localMatMdf = true;
9946 }
9947 if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {
9948 this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;
9949 this.finalTransform._opMdf = true;
9950 }
9951 i += 1;
9952 }
9953 }
9954 if (this.finalTransform._localMatMdf) {
9955 var localMat = this.finalTransform.localMat;
9956 this.localTransforms[0].matrix.clone(localMat);
9957 for (i = 1; i < len; i += 1) {
9958 var lmat = this.localTransforms[i].matrix;
9959 localMat.multiply(lmat);
9960 }
9961 localMat.multiply(this.finalTransform.mat);
9962 }
9963 if (this.finalTransform._opMdf) {
9964 var localOp = this.finalTransform.localOpacity;
9965 for (i = 0; i < len; i += 1) {
9966 localOp *= this.localTransforms[i].opacity * 0.01;
9967 }
9968 this.finalTransform.localOpacity = localOp;
9969 }
9970 }
9971 },
9972 searchEffectTransforms: function searchEffectTransforms() {
9973 if (this.renderableEffectsManager) {
9974 var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);
9975 if (transformEffects.length) {
9976 this.localTransforms = [];
9977 this.finalTransform.localMat = new Matrix();
9978 var i = 0;
9979 var len = transformEffects.length;
9980 for (i = 0; i < len; i += 1) {
9981 this.localTransforms.push(transformEffects[i]);
9982 }
9983 }
9984 }
9985 },
9986 globalToLocal: function globalToLocal(pt) {
9987 var transforms = [];
9988 transforms.push(this.finalTransform);
9989 var flag = true;
9990 var comp = this.comp;
9991 while (flag) {
9992 if (comp.finalTransform) {
9993 if (comp.data.hasMask) {
9994 transforms.splice(0, 0, comp.finalTransform);
9995 }
9996 comp = comp.comp;
9997 } else {
9998 flag = false;
9999 }
10000 }
10001 var i;
10002 var len = transforms.length;
10003 var ptNew;
10004 for (i = 0; i < len; i += 1) {
10005 ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);
10006 // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);
10007 pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];
10008 }
10009 return pt;
10010 },
10011 mHelper: new Matrix()
10012 };
10013
10014 function MaskElement(data, element, globalData) {
10015 this.data = data;
10016 this.element = element;
10017 this.globalData = globalData;
10018 this.storedData = [];
10019 this.masksProperties = this.data.masksProperties || [];
10020 this.maskElement = null;
10021 var defs = this.globalData.defs;
10022 var i;
10023 var len = this.masksProperties ? this.masksProperties.length : 0;
10024 this.viewData = createSizedArray(len);
10025 this.solidPath = '';
10026 var path;
10027 var properties = this.masksProperties;
10028 var count = 0;
10029 var currentMasks = [];
10030 var j;
10031 var jLen;
10032 var layerId = createElementID();
10033 var rect;
10034 var expansor;
10035 var feMorph;
10036 var x;
10037 var maskType = 'clipPath';
10038 var maskRef = 'clip-path';
10039 for (i = 0; i < len; i += 1) {
10040 if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {
10041 maskType = 'mask';
10042 maskRef = 'mask';
10043 }
10044 if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {
10045 rect = createNS('rect');
10046 rect.setAttribute('fill', '#ffffff');
10047 rect.setAttribute('width', this.element.comp.data.w || 0);
10048 rect.setAttribute('height', this.element.comp.data.h || 0);
10049 currentMasks.push(rect);
10050 } else {
10051 rect = null;
10052 }
10053 path = createNS('path');
10054 if (properties[i].mode === 'n') {
10055 // TODO move this to a factory or to a constructor
10056 this.viewData[i] = {
10057 op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),
10058 prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),
10059 elem: path,
10060 lastPath: ''
10061 };
10062 defs.appendChild(path);
10063 } else {
10064 count += 1;
10065 path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');
10066 path.setAttribute('clip-rule', 'nonzero');
10067 var filterID;
10068 if (properties[i].x.k !== 0) {
10069 maskType = 'mask';
10070 maskRef = 'mask';
10071 x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);
10072 filterID = createElementID();
10073 expansor = createNS('filter');
10074 expansor.setAttribute('id', filterID);
10075 feMorph = createNS('feMorphology');
10076 feMorph.setAttribute('operator', 'erode');
10077 feMorph.setAttribute('in', 'SourceGraphic');
10078 feMorph.setAttribute('radius', '0');
10079 expansor.appendChild(feMorph);
10080 defs.appendChild(expansor);
10081 path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');
10082 } else {
10083 feMorph = null;
10084 x = null;
10085 }
10086
10087 // TODO move this to a factory or to a constructor
10088 this.storedData[i] = {
10089 elem: path,
10090 x: x,
10091 expan: feMorph,
10092 lastPath: '',
10093 lastOperator: '',
10094 filterId: filterID,
10095 lastRadius: 0
10096 };
10097 if (properties[i].mode === 'i') {
10098 jLen = currentMasks.length;
10099 var g = createNS('g');
10100 for (j = 0; j < jLen; j += 1) {
10101 g.appendChild(currentMasks[j]);
10102 }
10103 var mask = createNS('mask');
10104 mask.setAttribute('mask-type', 'alpha');
10105 mask.setAttribute('id', layerId + '_' + count);
10106 mask.appendChild(path);
10107 defs.appendChild(mask);
10108 g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');
10109 currentMasks.length = 0;
10110 currentMasks.push(g);
10111 } else {
10112 currentMasks.push(path);
10113 }
10114 if (properties[i].inv && !this.solidPath) {
10115 this.solidPath = this.createLayerSolidPath();
10116 }
10117 // TODO move this to a factory or to a constructor
10118 this.viewData[i] = {
10119 elem: path,
10120 lastPath: '',
10121 op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),
10122 prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),
10123 invRect: rect
10124 };
10125 if (!this.viewData[i].prop.k) {
10126 this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);
10127 }
10128 }
10129 }
10130 this.maskElement = createNS(maskType);
10131 len = currentMasks.length;
10132 for (i = 0; i < len; i += 1) {
10133 this.maskElement.appendChild(currentMasks[i]);
10134 }
10135 if (count > 0) {
10136 this.maskElement.setAttribute('id', layerId);
10137 this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');
10138 defs.appendChild(this.maskElement);
10139 }
10140 if (this.viewData.length) {
10141 this.element.addRenderableComponent(this);
10142 }
10143 }
10144 MaskElement.prototype.getMaskProperty = function (pos) {
10145 return this.viewData[pos].prop;
10146 };
10147 MaskElement.prototype.renderFrame = function (isFirstFrame) {
10148 var finalMat = this.element.finalTransform.mat;
10149 var i;
10150 var len = this.masksProperties.length;
10151 for (i = 0; i < len; i += 1) {
10152 if (this.viewData[i].prop._mdf || isFirstFrame) {
10153 this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);
10154 }
10155 if (this.viewData[i].op._mdf || isFirstFrame) {
10156 this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);
10157 }
10158 if (this.masksProperties[i].mode !== 'n') {
10159 if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {
10160 this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());
10161 }
10162 if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {
10163 var feMorph = this.storedData[i].expan;
10164 if (this.storedData[i].x.v < 0) {
10165 if (this.storedData[i].lastOperator !== 'erode') {
10166 this.storedData[i].lastOperator = 'erode';
10167 this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');
10168 }
10169 feMorph.setAttribute('radius', -this.storedData[i].x.v);
10170 } else {
10171 if (this.storedData[i].lastOperator !== 'dilate') {
10172 this.storedData[i].lastOperator = 'dilate';
10173 this.storedData[i].elem.setAttribute('filter', null);
10174 }
10175 this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);
10176 }
10177 }
10178 }
10179 }
10180 };
10181 MaskElement.prototype.getMaskelement = function () {
10182 return this.maskElement;
10183 };
10184 MaskElement.prototype.createLayerSolidPath = function () {
10185 var path = 'M0,0 ';
10186 path += ' h' + this.globalData.compSize.w;
10187 path += ' v' + this.globalData.compSize.h;
10188 path += ' h-' + this.globalData.compSize.w;
10189 path += ' v-' + this.globalData.compSize.h + ' ';
10190 return path;
10191 };
10192 MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {
10193 var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];
10194 var i;
10195 var len;
10196 len = pathNodes._length;
10197 for (i = 1; i < len; i += 1) {
10198 // pathString += " C"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + " "+pathNodes.i[i][0]+','+pathNodes.i[i][1] + " "+pathNodes.v[i][0]+','+pathNodes.v[i][1];
10199 pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];
10200 }
10201 // pathString += " C"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + " "+pathNodes.i[0][0]+','+pathNodes.i[0][1] + " "+pathNodes.v[0][0]+','+pathNodes.v[0][1];
10202 if (pathNodes.c && len > 1) {
10203 pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];
10204 }
10205 // pathNodes.__renderedString = pathString;
10206
10207 if (viewData.lastPath !== pathString) {
10208 var pathShapeValue = '';
10209 if (viewData.elem) {
10210 if (pathNodes.c) {
10211 pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;
10212 }
10213 viewData.elem.setAttribute('d', pathShapeValue);
10214 }
10215 viewData.lastPath = pathString;
10216 }
10217 };
10218 MaskElement.prototype.destroy = function () {
10219 this.element = null;
10220 this.globalData = null;
10221 this.maskElement = null;
10222 this.data = null;
10223 this.masksProperties = null;
10224 };
10225
10226 var filtersFactory = function () {
10227 var ob = {};
10228 ob.createFilter = createFilter;
10229 ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;
10230 function createFilter(filId, skipCoordinates) {
10231 var fil = createNS('filter');
10232 fil.setAttribute('id', filId);
10233 if (skipCoordinates !== true) {
10234 fil.setAttribute('filterUnits', 'objectBoundingBox');
10235 fil.setAttribute('x', '0%');
10236 fil.setAttribute('y', '0%');
10237 fil.setAttribute('width', '100%');
10238 fil.setAttribute('height', '100%');
10239 }
10240 return fil;
10241 }
10242 function createAlphaToLuminanceFilter() {
10243 var feColorMatrix = createNS('feColorMatrix');
10244 feColorMatrix.setAttribute('type', 'matrix');
10245 feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
10246 feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');
10247 return feColorMatrix;
10248 }
10249 return ob;
10250 }();
10251
10252 var featureSupport = function () {
10253 var ob = {
10254 maskType: true,
10255 svgLumaHidden: true,
10256 offscreenCanvas: typeof OffscreenCanvas !== 'undefined'
10257 };
10258 if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\/\d./i.test(navigator.userAgent)) {
10259 ob.maskType = false;
10260 }
10261 if (/firefox/i.test(navigator.userAgent)) {
10262 ob.svgLumaHidden = false;
10263 }
10264 return ob;
10265 }();
10266
10267 var registeredEffects$1 = {};
10268 var idPrefix = 'filter_result_';
10269 function SVGEffects(elem) {
10270 var i;
10271 var source = 'SourceGraphic';
10272 var len = elem.data.ef ? elem.data.ef.length : 0;
10273 var filId = createElementID();
10274 var fil = filtersFactory.createFilter(filId, true);
10275 var count = 0;
10276 this.filters = [];
10277 var filterManager;
10278 for (i = 0; i < len; i += 1) {
10279 filterManager = null;
10280 var type = elem.data.ef[i].ty;
10281 if (registeredEffects$1[type]) {
10282 var Effect = registeredEffects$1[type].effect;
10283 filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);
10284 source = idPrefix + count;
10285 if (registeredEffects$1[type].countsAsEffect) {
10286 count += 1;
10287 }
10288 }
10289 if (filterManager) {
10290 this.filters.push(filterManager);
10291 }
10292 }
10293 if (count) {
10294 elem.globalData.defs.appendChild(fil);
10295 elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');
10296 }
10297 if (this.filters.length) {
10298 elem.addRenderableComponent(this);
10299 }
10300 }
10301 SVGEffects.prototype.renderFrame = function (_isFirstFrame) {
10302 var i;
10303 var len = this.filters.length;
10304 for (i = 0; i < len; i += 1) {
10305 this.filters[i].renderFrame(_isFirstFrame);
10306 }
10307 };
10308 SVGEffects.prototype.getEffects = function (type) {
10309 var i;
10310 var len = this.filters.length;
10311 var effects = [];
10312 for (i = 0; i < len; i += 1) {
10313 if (this.filters[i].type === type) {
10314 effects.push(this.filters[i]);
10315 }
10316 }
10317 return effects;
10318 };
10319 function registerEffect$1(id, effect, countsAsEffect) {
10320 registeredEffects$1[id] = {
10321 effect: effect,
10322 countsAsEffect: countsAsEffect
10323 };
10324 }
10325
10326 function SVGBaseElement() {}
10327 SVGBaseElement.prototype = {
10328 initRendererElement: function initRendererElement() {
10329 this.layerElement = createNS('g');
10330 },
10331 createContainerElements: function createContainerElements() {
10332 this.matteElement = createNS('g');
10333 this.transformedElement = this.layerElement;
10334 this.maskedElement = this.layerElement;
10335 this._sizeChanged = false;
10336 var layerElementParent = null;
10337 // If this layer acts as a mask for the following layer
10338 if (this.data.td) {
10339 this.matteMasks = {};
10340 var gg = createNS('g');
10341 gg.setAttribute('id', this.layerId);
10342 gg.appendChild(this.layerElement);
10343 layerElementParent = gg;
10344 this.globalData.defs.appendChild(gg);
10345 } else if (this.data.tt) {
10346 this.matteElement.appendChild(this.layerElement);
10347 layerElementParent = this.matteElement;
10348 this.baseElement = this.matteElement;
10349 } else {
10350 this.baseElement = this.layerElement;
10351 }
10352 if (this.data.ln) {
10353 this.layerElement.setAttribute('id', this.data.ln);
10354 }
10355 if (this.data.cl) {
10356 this.layerElement.setAttribute('class', this.data.cl);
10357 }
10358 // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped
10359 if (this.data.ty === 0 && !this.data.hd) {
10360 var cp = createNS('clipPath');
10361 var pt = createNS('path');
10362 pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');
10363 var clipId = createElementID();
10364 cp.setAttribute('id', clipId);
10365 cp.appendChild(pt);
10366 this.globalData.defs.appendChild(cp);
10367 if (this.checkMasks()) {
10368 var cpGroup = createNS('g');
10369 cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');
10370 cpGroup.appendChild(this.layerElement);
10371 this.transformedElement = cpGroup;
10372 if (layerElementParent) {
10373 layerElementParent.appendChild(this.transformedElement);
10374 } else {
10375 this.baseElement = this.transformedElement;
10376 }
10377 } else {
10378 this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');
10379 }
10380 }
10381 if (this.data.bm !== 0) {
10382 this.setBlendMode();
10383 }
10384 },
10385 renderElement: function renderElement() {
10386 if (this.finalTransform._localMatMdf) {
10387 this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());
10388 }
10389 if (this.finalTransform._opMdf) {
10390 this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);
10391 }
10392 },
10393 destroyBaseElement: function destroyBaseElement() {
10394 this.layerElement = null;
10395 this.matteElement = null;
10396 this.maskManager.destroy();
10397 },
10398 getBaseElement: function getBaseElement() {
10399 if (this.data.hd) {
10400 return null;
10401 }
10402 return this.baseElement;
10403 },
10404 createRenderableComponents: function createRenderableComponents() {
10405 this.maskManager = new MaskElement(this.data, this, this.globalData);
10406 this.renderableEffectsManager = new SVGEffects(this);
10407 this.searchEffectTransforms();
10408 },
10409 getMatte: function getMatte(matteType) {
10410 // This should not be a common case. But for backward compatibility, we'll create the matte object.
10411 // It solves animations that have two consecutive layers marked as matte masks.
10412 // Which is an undefined behavior in AE.
10413 if (!this.matteMasks) {
10414 this.matteMasks = {};
10415 }
10416 if (!this.matteMasks[matteType]) {
10417 var id = this.layerId + '_' + matteType;
10418 var filId;
10419 var fil;
10420 var useElement;
10421 var gg;
10422 if (matteType === 1 || matteType === 3) {
10423 var masker = createNS('mask');
10424 masker.setAttribute('id', id);
10425 masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');
10426 useElement = createNS('use');
10427 useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);
10428 masker.appendChild(useElement);
10429 this.globalData.defs.appendChild(masker);
10430 if (!featureSupport.maskType && matteType === 1) {
10431 masker.setAttribute('mask-type', 'luminance');
10432 filId = createElementID();
10433 fil = filtersFactory.createFilter(filId);
10434 this.globalData.defs.appendChild(fil);
10435 fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());
10436 gg = createNS('g');
10437 gg.appendChild(useElement);
10438 masker.appendChild(gg);
10439 gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');
10440 }
10441 } else if (matteType === 2) {
10442 var maskGroup = createNS('mask');
10443 maskGroup.setAttribute('id', id);
10444 maskGroup.setAttribute('mask-type', 'alpha');
10445 var maskGrouper = createNS('g');
10446 maskGroup.appendChild(maskGrouper);
10447 filId = createElementID();
10448 fil = filtersFactory.createFilter(filId);
10449 /// /
10450 var feCTr = createNS('feComponentTransfer');
10451 feCTr.setAttribute('in', 'SourceGraphic');
10452 fil.appendChild(feCTr);
10453 var feFunc = createNS('feFuncA');
10454 feFunc.setAttribute('type', 'table');
10455 feFunc.setAttribute('tableValues', '1.0 0.0');
10456 feCTr.appendChild(feFunc);
10457 /// /
10458 this.globalData.defs.appendChild(fil);
10459 var alphaRect = createNS('rect');
10460 alphaRect.setAttribute('width', this.comp.data.w);
10461 alphaRect.setAttribute('height', this.comp.data.h);
10462 alphaRect.setAttribute('x', '0');
10463 alphaRect.setAttribute('y', '0');
10464 alphaRect.setAttribute('fill', '#ffffff');
10465 alphaRect.setAttribute('opacity', '0');
10466 maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');
10467 maskGrouper.appendChild(alphaRect);
10468 useElement = createNS('use');
10469 useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);
10470 maskGrouper.appendChild(useElement);
10471 if (!featureSupport.maskType) {
10472 maskGroup.setAttribute('mask-type', 'luminance');
10473 fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());
10474 gg = createNS('g');
10475 maskGrouper.appendChild(alphaRect);
10476 gg.appendChild(this.layerElement);
10477 maskGrouper.appendChild(gg);
10478 }
10479 this.globalData.defs.appendChild(maskGroup);
10480 }
10481 this.matteMasks[matteType] = id;
10482 }
10483 return this.matteMasks[matteType];
10484 },
10485 setMatte: function setMatte(id) {
10486 if (!this.matteElement) {
10487 return;
10488 }
10489 this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');
10490 }
10491 };
10492
10493 /**
10494 * @file
10495 * Handles AE's layer parenting property.
10496 *
10497 */
10498
10499 function HierarchyElement() {}
10500 HierarchyElement.prototype = {
10501 /**
10502 * @function
10503 * Initializes hierarchy properties
10504 *
10505 */
10506 initHierarchy: function initHierarchy() {
10507 // element's parent list
10508 this.hierarchy = [];
10509 // if element is parent of another layer _isParent will be true
10510 this._isParent = false;
10511 this.checkParenting();
10512 },
10513 /**
10514 * @function
10515 * Sets layer's hierarchy.
10516 * @param {array} hierarch
10517 * layer's parent list
10518 *
10519 */
10520 setHierarchy: function setHierarchy(hierarchy) {
10521 this.hierarchy = hierarchy;
10522 },
10523 /**
10524 * @function
10525 * Sets layer as parent.
10526 *
10527 */
10528 setAsParent: function setAsParent() {
10529 this._isParent = true;
10530 },
10531 /**
10532 * @function
10533 * Searches layer's parenting chain
10534 *
10535 */
10536 checkParenting: function checkParenting() {
10537 if (this.data.parent !== undefined) {
10538 this.comp.buildElementParenting(this, this.data.parent, []);
10539 }
10540 }
10541 };
10542
10543 function RenderableDOMElement() {}
10544 (function () {
10545 var _prototype = {
10546 initElement: function initElement(data, globalData, comp) {
10547 this.initFrame();
10548 this.initBaseData(data, globalData, comp);
10549 this.initTransform(data, globalData, comp);
10550 this.initHierarchy();
10551 this.initRenderable();
10552 this.initRendererElement();
10553 this.createContainerElements();
10554 this.createRenderableComponents();
10555 this.createContent();
10556 this.hide();
10557 },
10558 hide: function hide() {
10559 // console.log('HIDE', this);
10560 if (!this.hidden && (!this.isInRange || this.isTransparent)) {
10561 var elem = this.baseElement || this.layerElement;
10562 elem.style.display = 'none';
10563 this.hidden = true;
10564 }
10565 },
10566 show: function show() {
10567 // console.log('SHOW', this);
10568 if (this.isInRange && !this.isTransparent) {
10569 if (!this.data.hd) {
10570 var elem = this.baseElement || this.layerElement;
10571 elem.style.display = 'block';
10572 }
10573 this.hidden = false;
10574 this._isFirstFrame = true;
10575 }
10576 },
10577 renderFrame: function renderFrame() {
10578 // If it is exported as hidden (data.hd === true) no need to render
10579 // If it is not visible no need to render
10580 if (this.data.hd || this.hidden) {
10581 return;
10582 }
10583 this.renderTransform();
10584 this.renderRenderable();
10585 this.renderLocalTransform();
10586 this.renderElement();
10587 this.renderInnerContent();
10588 if (this._isFirstFrame) {
10589 this._isFirstFrame = false;
10590 }
10591 },
10592 renderInnerContent: function renderInnerContent() {},
10593 prepareFrame: function prepareFrame(num) {
10594 this._mdf = false;
10595 this.prepareRenderableFrame(num);
10596 this.prepareProperties(num, this.isInRange);
10597 this.checkTransparency();
10598 },
10599 destroy: function destroy() {
10600 this.innerElem = null;
10601 this.destroyBaseElement();
10602 }
10603 };
10604 extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);
10605 })();
10606
10607 function IImageElement(data, globalData, comp) {
10608 this.assetData = globalData.getAssetData(data.refId);
10609 if (this.assetData && this.assetData.sid) {
10610 this.assetData = globalData.slotManager.getProp(this.assetData);
10611 }
10612 this.initElement(data, globalData, comp);
10613 this.sourceRect = {
10614 top: 0,
10615 left: 0,
10616 width: this.assetData.w,
10617 height: this.assetData.h
10618 };
10619 }
10620 extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);
10621 IImageElement.prototype.createContent = function () {
10622 var assetPath = this.globalData.getAssetsPath(this.assetData);
10623 this.innerElem = createNS('image');
10624 this.innerElem.setAttribute('width', this.assetData.w + 'px');
10625 this.innerElem.setAttribute('height', this.assetData.h + 'px');
10626 this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);
10627 this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);
10628 this.layerElement.appendChild(this.innerElem);
10629 };
10630 IImageElement.prototype.sourceRectAtTime = function () {
10631 return this.sourceRect;
10632 };
10633
10634 function ProcessedElement(element, position) {
10635 this.elem = element;
10636 this.pos = position;
10637 }
10638
10639 function IShapeElement() {}
10640 IShapeElement.prototype = {
10641 addShapeToModifiers: function addShapeToModifiers(data) {
10642 var i;
10643 var len = this.shapeModifiers.length;
10644 for (i = 0; i < len; i += 1) {
10645 this.shapeModifiers[i].addShape(data);
10646 }
10647 },
10648 isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {
10649 var i = 0;
10650 var len = this.shapeModifiers.length;
10651 while (i < len) {
10652 if (this.shapeModifiers[i].isAnimatedWithShape(data)) {
10653 return true;
10654 }
10655 }
10656 return false;
10657 },
10658 renderModifiers: function renderModifiers() {
10659 if (!this.shapeModifiers.length) {
10660 return;
10661 }
10662 var i;
10663 var len = this.shapes.length;
10664 for (i = 0; i < len; i += 1) {
10665 this.shapes[i].sh.reset();
10666 }
10667 len = this.shapeModifiers.length;
10668 var shouldBreakProcess;
10669 for (i = len - 1; i >= 0; i -= 1) {
10670 shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);
10671 // workaround to fix cases where a repeater resets the shape so the following processes get called twice
10672 // TODO: find a better solution for this
10673 if (shouldBreakProcess) {
10674 break;
10675 }
10676 }
10677 },
10678 searchProcessedElement: function searchProcessedElement(elem) {
10679 var elements = this.processedElements;
10680 var i = 0;
10681 var len = elements.length;
10682 while (i < len) {
10683 if (elements[i].elem === elem) {
10684 return elements[i].pos;
10685 }
10686 i += 1;
10687 }
10688 return 0;
10689 },
10690 addProcessedElement: function addProcessedElement(elem, pos) {
10691 var elements = this.processedElements;
10692 var i = elements.length;
10693 while (i) {
10694 i -= 1;
10695 if (elements[i].elem === elem) {
10696 elements[i].pos = pos;
10697 return;
10698 }
10699 }
10700 elements.push(new ProcessedElement(elem, pos));
10701 },
10702 prepareFrame: function prepareFrame(num) {
10703 this.prepareRenderableFrame(num);
10704 this.prepareProperties(num, this.isInRange);
10705 }
10706 };
10707
10708 var lineCapEnum = {
10709 1: 'butt',
10710 2: 'round',
10711 3: 'square'
10712 };
10713 var lineJoinEnum = {
10714 1: 'miter',
10715 2: 'round',
10716 3: 'bevel'
10717 };
10718
10719 function SVGShapeData(transformers, level, shape) {
10720 this.caches = [];
10721 this.styles = [];
10722 this.transformers = transformers;
10723 this.lStr = '';
10724 this.sh = shape;
10725 this.lvl = level;
10726 // TODO find if there are some cases where _isAnimated can be false.
10727 // For now, since shapes add up with other shapes. They have to be calculated every time.
10728 // One way of finding out is checking if all styles associated to this shape depend only of this shape
10729 this._isAnimated = !!shape.k;
10730 // TODO: commenting this for now since all shapes are animated
10731 var i = 0;
10732 var len = transformers.length;
10733 while (i < len) {
10734 if (transformers[i].mProps.dynamicProperties.length) {
10735 this._isAnimated = true;
10736 break;
10737 }
10738 i += 1;
10739 }
10740 }
10741 SVGShapeData.prototype.setAsAnimated = function () {
10742 this._isAnimated = true;
10743 };
10744
10745 function SVGStyleData(data, level) {
10746 this.data = data;
10747 this.type = data.ty;
10748 this.d = '';
10749 this.lvl = level;
10750 this._mdf = false;
10751 this.closed = data.hd === true;
10752 this.pElem = createNS('path');
10753 this.msElem = null;
10754 }
10755 SVGStyleData.prototype.reset = function () {
10756 this.d = '';
10757 this._mdf = false;
10758 };
10759
10760 function DashProperty(elem, data, renderer, container) {
10761 this.elem = elem;
10762 this.frameId = -1;
10763 this.dataProps = createSizedArray(data.length);
10764 this.renderer = renderer;
10765 this.k = false;
10766 this.dashStr = '';
10767 this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);
10768 this.dashoffset = createTypedArray('float32', 1);
10769 this.initDynamicPropertyContainer(container);
10770 var i;
10771 var len = data.length || 0;
10772 var prop;
10773 for (i = 0; i < len; i += 1) {
10774 prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);
10775 this.k = prop.k || this.k;
10776 this.dataProps[i] = {
10777 n: data[i].n,
10778 p: prop
10779 };
10780 }
10781 if (!this.k) {
10782 this.getValue(true);
10783 }
10784 this._isAnimated = this.k;
10785 }
10786 DashProperty.prototype.getValue = function (forceRender) {
10787 if (this.elem.globalData.frameId === this.frameId && !forceRender) {
10788 return;
10789 }
10790 this.frameId = this.elem.globalData.frameId;
10791 this.iterateDynamicProperties();
10792 this._mdf = this._mdf || forceRender;
10793 if (this._mdf) {
10794 var i = 0;
10795 var len = this.dataProps.length;
10796 if (this.renderer === 'svg') {
10797 this.dashStr = '';
10798 }
10799 for (i = 0; i < len; i += 1) {
10800 if (this.dataProps[i].n !== 'o') {
10801 if (this.renderer === 'svg') {
10802 this.dashStr += ' ' + this.dataProps[i].p.v;
10803 } else {
10804 this.dashArray[i] = this.dataProps[i].p.v;
10805 }
10806 } else {
10807 this.dashoffset[0] = this.dataProps[i].p.v;
10808 }
10809 }
10810 }
10811 };
10812 extendPrototype([DynamicPropertyContainer], DashProperty);
10813
10814 function SVGStrokeStyleData(elem, data, styleOb) {
10815 this.initDynamicPropertyContainer(elem);
10816 this.getValue = this.iterateDynamicProperties;
10817 this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);
10818 this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);
10819 this.d = new DashProperty(elem, data.d || {}, 'svg', this);
10820 this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);
10821 this.style = styleOb;
10822 this._isAnimated = !!this._isAnimated;
10823 }
10824 extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);
10825
10826 function SVGFillStyleData(elem, data, styleOb) {
10827 this.initDynamicPropertyContainer(elem);
10828 this.getValue = this.iterateDynamicProperties;
10829 this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);
10830 this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);
10831 this.style = styleOb;
10832 }
10833 extendPrototype([DynamicPropertyContainer], SVGFillStyleData);
10834
10835 function SVGNoStyleData(elem, data, styleOb) {
10836 this.initDynamicPropertyContainer(elem);
10837 this.getValue = this.iterateDynamicProperties;
10838 this.style = styleOb;
10839 }
10840 extendPrototype([DynamicPropertyContainer], SVGNoStyleData);
10841
10842 function GradientProperty(elem, data, container) {
10843 this.data = data;
10844 this.c = createTypedArray('uint8c', data.p * 4);
10845 var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;
10846 this.o = createTypedArray('float32', cLength);
10847 this._cmdf = false;
10848 this._omdf = false;
10849 this._collapsable = this.checkCollapsable();
10850 this._hasOpacity = cLength;
10851 this.initDynamicPropertyContainer(container);
10852 this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);
10853 this.k = this.prop.k;
10854 this.getValue(true);
10855 }
10856 GradientProperty.prototype.comparePoints = function (values, points) {
10857 var i = 0;
10858 var len = this.o.length / 2;
10859 var diff;
10860 while (i < len) {
10861 diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);
10862 if (diff > 0.01) {
10863 return false;
10864 }
10865 i += 1;
10866 }
10867 return true;
10868 };
10869 GradientProperty.prototype.checkCollapsable = function () {
10870 if (this.o.length / 2 !== this.c.length / 4) {
10871 return false;
10872 }
10873 if (this.data.k.k[0].s) {
10874 var i = 0;
10875 var len = this.data.k.k.length;
10876 while (i < len) {
10877 if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {
10878 return false;
10879 }
10880 i += 1;
10881 }
10882 } else if (!this.comparePoints(this.data.k.k, this.data.p)) {
10883 return false;
10884 }
10885 return true;
10886 };
10887 GradientProperty.prototype.getValue = function (forceRender) {
10888 this.prop.getValue();
10889 this._mdf = false;
10890 this._cmdf = false;
10891 this._omdf = false;
10892 if (this.prop._mdf || forceRender) {
10893 var i;
10894 var len = this.data.p * 4;
10895 var mult;
10896 var val;
10897 for (i = 0; i < len; i += 1) {
10898 mult = i % 4 === 0 ? 100 : 255;
10899 val = Math.round(this.prop.v[i] * mult);
10900 if (this.c[i] !== val) {
10901 this.c[i] = val;
10902 this._cmdf = !forceRender;
10903 }
10904 }
10905 if (this.o.length) {
10906 len = this.prop.v.length;
10907 for (i = this.data.p * 4; i < len; i += 1) {
10908 mult = i % 2 === 0 ? 100 : 1;
10909 val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];
10910 if (this.o[i - this.data.p * 4] !== val) {
10911 this.o[i - this.data.p * 4] = val;
10912 this._omdf = !forceRender;
10913 }
10914 }
10915 }
10916 this._mdf = !forceRender;
10917 }
10918 };
10919 extendPrototype([DynamicPropertyContainer], GradientProperty);
10920
10921 function SVGGradientFillStyleData(elem, data, styleOb) {
10922 this.initDynamicPropertyContainer(elem);
10923 this.getValue = this.iterateDynamicProperties;
10924 this.initGradientData(elem, data, styleOb);
10925 }
10926 SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {
10927 this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);
10928 this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);
10929 this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);
10930 this.h = PropertyFactory.getProp(elem, data.h || {
10931 k: 0
10932 }, 0, 0.01, this);
10933 this.a = PropertyFactory.getProp(elem, data.a || {
10934 k: 0
10935 }, 0, degToRads, this);
10936 this.g = new GradientProperty(elem, data.g, this);
10937 this.style = styleOb;
10938 this.stops = [];
10939 this.setGradientData(styleOb.pElem, data);
10940 this.setGradientOpacity(data, styleOb);
10941 this._isAnimated = !!this._isAnimated;
10942 };
10943 SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {
10944 var gradientId = createElementID();
10945 var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');
10946 gfill.setAttribute('id', gradientId);
10947 gfill.setAttribute('spreadMethod', 'pad');
10948 gfill.setAttribute('gradientUnits', 'userSpaceOnUse');
10949 var stops = [];
10950 var stop;
10951 var j;
10952 var jLen;
10953 jLen = data.g.p * 4;
10954 for (j = 0; j < jLen; j += 4) {
10955 stop = createNS('stop');
10956 gfill.appendChild(stop);
10957 stops.push(stop);
10958 }
10959 pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');
10960 this.gf = gfill;
10961 this.cst = stops;
10962 };
10963 SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {
10964 if (this.g._hasOpacity && !this.g._collapsable) {
10965 var stop;
10966 var j;
10967 var jLen;
10968 var mask = createNS('mask');
10969 var maskElement = createNS('path');
10970 mask.appendChild(maskElement);
10971 var opacityId = createElementID();
10972 var maskId = createElementID();
10973 mask.setAttribute('id', maskId);
10974 var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');
10975 opFill.setAttribute('id', opacityId);
10976 opFill.setAttribute('spreadMethod', 'pad');
10977 opFill.setAttribute('gradientUnits', 'userSpaceOnUse');
10978 jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;
10979 var stops = this.stops;
10980 for (j = data.g.p * 4; j < jLen; j += 2) {
10981 stop = createNS('stop');
10982 stop.setAttribute('stop-color', 'rgb(255,255,255)');
10983 opFill.appendChild(stop);
10984 stops.push(stop);
10985 }
10986 maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');
10987 if (data.ty === 'gs') {
10988 maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);
10989 maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);
10990 if (data.lj === 1) {
10991 maskElement.setAttribute('stroke-miterlimit', data.ml);
10992 }
10993 }
10994 this.of = opFill;
10995 this.ms = mask;
10996 this.ost = stops;
10997 this.maskId = maskId;
10998 styleOb.msElem = maskElement;
10999 }
11000 };
11001 extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);
11002
11003 function SVGGradientStrokeStyleData(elem, data, styleOb) {
11004 this.initDynamicPropertyContainer(elem);
11005 this.getValue = this.iterateDynamicProperties;
11006 this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);
11007 this.d = new DashProperty(elem, data.d || {}, 'svg', this);
11008 this.initGradientData(elem, data, styleOb);
11009 this._isAnimated = !!this._isAnimated;
11010 }
11011 extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);
11012
11013 function ShapeGroupData() {
11014 this.it = [];
11015 this.prevViewData = [];
11016 this.gr = createNS('g');
11017 }
11018
11019 function SVGTransformData(mProps, op, container) {
11020 this.transform = {
11021 mProps: mProps,
11022 op: op,
11023 container: container
11024 };
11025 this.elements = [];
11026 this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;
11027 }
11028
11029 var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {
11030 if (length === 0) {
11031 return '';
11032 }
11033 var _o = pathNodes.o;
11034 var _i = pathNodes.i;
11035 var _v = pathNodes.v;
11036 var i;
11037 var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);
11038 for (i = 1; i < length; i += 1) {
11039 shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);
11040 }
11041 if (closed && length) {
11042 shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);
11043 shapeString += 'z';
11044 }
11045 return shapeString;
11046 };
11047
11048 var SVGElementsRenderer = function () {
11049 var _identityMatrix = new Matrix();
11050 var _matrixHelper = new Matrix();
11051 var ob = {
11052 createRenderFunction: createRenderFunction
11053 };
11054 function createRenderFunction(data) {
11055 switch (data.ty) {
11056 case 'fl':
11057 return renderFill;
11058 case 'gf':
11059 return renderGradient;
11060 case 'gs':
11061 return renderGradientStroke;
11062 case 'st':
11063 return renderStroke;
11064 case 'sh':
11065 case 'el':
11066 case 'rc':
11067 case 'sr':
11068 return renderPath;
11069 case 'tr':
11070 return renderContentTransform;
11071 case 'no':
11072 return renderNoop;
11073 default:
11074 return null;
11075 }
11076 }
11077 function renderContentTransform(styleData, itemData, isFirstFrame) {
11078 if (isFirstFrame || itemData.transform.op._mdf) {
11079 itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);
11080 }
11081 if (isFirstFrame || itemData.transform.mProps._mdf) {
11082 itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());
11083 }
11084 }
11085 function renderNoop() {}
11086 function renderPath(styleData, itemData, isFirstFrame) {
11087 var j;
11088 var jLen;
11089 var pathStringTransformed;
11090 var redraw;
11091 var pathNodes;
11092 var l;
11093 var lLen = itemData.styles.length;
11094 var lvl = itemData.lvl;
11095 var paths;
11096 var mat;
11097 var iterations;
11098 var k;
11099 for (l = 0; l < lLen; l += 1) {
11100 redraw = itemData.sh._mdf || isFirstFrame;
11101 if (itemData.styles[l].lvl < lvl) {
11102 mat = _matrixHelper.reset();
11103 iterations = lvl - itemData.styles[l].lvl;
11104 k = itemData.transformers.length - 1;
11105 while (!redraw && iterations > 0) {
11106 redraw = itemData.transformers[k].mProps._mdf || redraw;
11107 iterations -= 1;
11108 k -= 1;
11109 }
11110 if (redraw) {
11111 iterations = lvl - itemData.styles[l].lvl;
11112 k = itemData.transformers.length - 1;
11113 while (iterations > 0) {
11114 mat.multiply(itemData.transformers[k].mProps.v);
11115 iterations -= 1;
11116 k -= 1;
11117 }
11118 }
11119 } else {
11120 mat = _identityMatrix;
11121 }
11122 paths = itemData.sh.paths;
11123 jLen = paths._length;
11124 if (redraw) {
11125 pathStringTransformed = '';
11126 for (j = 0; j < jLen; j += 1) {
11127 pathNodes = paths.shapes[j];
11128 if (pathNodes && pathNodes._length) {
11129 pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);
11130 }
11131 }
11132 itemData.caches[l] = pathStringTransformed;
11133 } else {
11134 pathStringTransformed = itemData.caches[l];
11135 }
11136 itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;
11137 itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;
11138 }
11139 }
11140 function renderFill(styleData, itemData, isFirstFrame) {
11141 var styleElem = itemData.style;
11142 if (itemData.c._mdf || isFirstFrame) {
11143 styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');
11144 }
11145 if (itemData.o._mdf || isFirstFrame) {
11146 styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);
11147 }
11148 }
11149 function renderGradientStroke(styleData, itemData, isFirstFrame) {
11150 renderGradient(styleData, itemData, isFirstFrame);
11151 renderStroke(styleData, itemData, isFirstFrame);
11152 }
11153 function renderGradient(styleData, itemData, isFirstFrame) {
11154 var gfill = itemData.gf;
11155 var hasOpacity = itemData.g._hasOpacity;
11156 var pt1 = itemData.s.v;
11157 var pt2 = itemData.e.v;
11158 if (itemData.o._mdf || isFirstFrame) {
11159 var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';
11160 itemData.style.pElem.setAttribute(attr, itemData.o.v);
11161 }
11162 if (itemData.s._mdf || isFirstFrame) {
11163 var attr1 = styleData.t === 1 ? 'x1' : 'cx';
11164 var attr2 = attr1 === 'x1' ? 'y1' : 'cy';
11165 gfill.setAttribute(attr1, pt1[0]);
11166 gfill.setAttribute(attr2, pt1[1]);
11167 if (hasOpacity && !itemData.g._collapsable) {
11168 itemData.of.setAttribute(attr1, pt1[0]);
11169 itemData.of.setAttribute(attr2, pt1[1]);
11170 }
11171 }
11172 var stops;
11173 var i;
11174 var len;
11175 var stop;
11176 if (itemData.g._cmdf || isFirstFrame) {
11177 stops = itemData.cst;
11178 var cValues = itemData.g.c;
11179 len = stops.length;
11180 for (i = 0; i < len; i += 1) {
11181 stop = stops[i];
11182 stop.setAttribute('offset', cValues[i * 4] + '%');
11183 stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');
11184 }
11185 }
11186 if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {
11187 var oValues = itemData.g.o;
11188 if (itemData.g._collapsable) {
11189 stops = itemData.cst;
11190 } else {
11191 stops = itemData.ost;
11192 }
11193 len = stops.length;
11194 for (i = 0; i < len; i += 1) {
11195 stop = stops[i];
11196 if (!itemData.g._collapsable) {
11197 stop.setAttribute('offset', oValues[i * 2] + '%');
11198 }
11199 stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);
11200 }
11201 }
11202 if (styleData.t === 1) {
11203 if (itemData.e._mdf || isFirstFrame) {
11204 gfill.setAttribute('x2', pt2[0]);
11205 gfill.setAttribute('y2', pt2[1]);
11206 if (hasOpacity && !itemData.g._collapsable) {
11207 itemData.of.setAttribute('x2', pt2[0]);
11208 itemData.of.setAttribute('y2', pt2[1]);
11209 }
11210 }
11211 } else {
11212 var rad;
11213 if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {
11214 rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
11215 gfill.setAttribute('r', rad);
11216 if (hasOpacity && !itemData.g._collapsable) {
11217 itemData.of.setAttribute('r', rad);
11218 }
11219 }
11220 if (itemData.s._mdf || itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {
11221 if (!rad) {
11222 rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
11223 }
11224 var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);
11225 var percent = itemData.h.v;
11226 if (percent >= 1) {
11227 percent = 0.99;
11228 } else if (percent <= -1) {
11229 percent = -0.99;
11230 }
11231 var dist = rad * percent;
11232 var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];
11233 var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];
11234 gfill.setAttribute('fx', x);
11235 gfill.setAttribute('fy', y);
11236 if (hasOpacity && !itemData.g._collapsable) {
11237 itemData.of.setAttribute('fx', x);
11238 itemData.of.setAttribute('fy', y);
11239 }
11240 }
11241 // gfill.setAttribute('fy','200');
11242 }
11243 }
11244 function renderStroke(styleData, itemData, isFirstFrame) {
11245 var styleElem = itemData.style;
11246 var d = itemData.d;
11247 if (d && (d._mdf || isFirstFrame) && d.dashStr) {
11248 styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);
11249 styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);
11250 }
11251 if (itemData.c && (itemData.c._mdf || isFirstFrame)) {
11252 styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');
11253 }
11254 if (itemData.o._mdf || isFirstFrame) {
11255 styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);
11256 }
11257 if (itemData.w._mdf || isFirstFrame) {
11258 styleElem.pElem.setAttribute('stroke-width', itemData.w.v);
11259 if (styleElem.msElem) {
11260 styleElem.msElem.setAttribute('stroke-width', itemData.w.v);
11261 }
11262 }
11263 }
11264 return ob;
11265 }();
11266
11267 function SVGShapeElement(data, globalData, comp) {
11268 // List of drawable elements
11269 this.shapes = [];
11270 // Full shape data
11271 this.shapesData = data.shapes;
11272 // List of styles that will be applied to shapes
11273 this.stylesList = [];
11274 // List of modifiers that will be applied to shapes
11275 this.shapeModifiers = [];
11276 // List of items in shape tree
11277 this.itemsData = [];
11278 // List of items in previous shape tree
11279 this.processedElements = [];
11280 // List of animated components
11281 this.animatedContents = [];
11282 this.initElement(data, globalData, comp);
11283 // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.
11284 // List of elements that have been created
11285 this.prevViewData = [];
11286 // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.
11287 }
11288 extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);
11289 SVGShapeElement.prototype.initSecondaryElement = function () {};
11290 SVGShapeElement.prototype.identityMatrix = new Matrix();
11291 SVGShapeElement.prototype.buildExpressionInterface = function () {};
11292 SVGShapeElement.prototype.createContent = function () {
11293 this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);
11294 this.filterUniqueShapes();
11295 };
11296
11297 /*
11298 This method searches for multiple shapes that affect a single element and one of them is animated
11299 */
11300 SVGShapeElement.prototype.filterUniqueShapes = function () {
11301 var i;
11302 var len = this.shapes.length;
11303 var shape;
11304 var j;
11305 var jLen = this.stylesList.length;
11306 var style;
11307 var tempShapes = [];
11308 var areAnimated = false;
11309 for (j = 0; j < jLen; j += 1) {
11310 style = this.stylesList[j];
11311 areAnimated = false;
11312 tempShapes.length = 0;
11313 for (i = 0; i < len; i += 1) {
11314 shape = this.shapes[i];
11315 if (shape.styles.indexOf(style) !== -1) {
11316 tempShapes.push(shape);
11317 areAnimated = shape._isAnimated || areAnimated;
11318 }
11319 }
11320 if (tempShapes.length > 1 && areAnimated) {
11321 this.setShapesAsAnimated(tempShapes);
11322 }
11323 }
11324 };
11325 SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {
11326 var i;
11327 var len = shapes.length;
11328 for (i = 0; i < len; i += 1) {
11329 shapes[i].setAsAnimated();
11330 }
11331 };
11332 SVGShapeElement.prototype.createStyleElement = function (data, level) {
11333 // TODO: prevent drawing of hidden styles
11334 var elementData;
11335 var styleOb = new SVGStyleData(data, level);
11336 var pathElement = styleOb.pElem;
11337 if (data.ty === 'st') {
11338 elementData = new SVGStrokeStyleData(this, data, styleOb);
11339 } else if (data.ty === 'fl') {
11340 elementData = new SVGFillStyleData(this, data, styleOb);
11341 } else if (data.ty === 'gf' || data.ty === 'gs') {
11342 var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;
11343 elementData = new GradientConstructor(this, data, styleOb);
11344 this.globalData.defs.appendChild(elementData.gf);
11345 if (elementData.maskId) {
11346 this.globalData.defs.appendChild(elementData.ms);
11347 this.globalData.defs.appendChild(elementData.of);
11348 pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');
11349 }
11350 } else if (data.ty === 'no') {
11351 elementData = new SVGNoStyleData(this, data, styleOb);
11352 }
11353 if (data.ty === 'st' || data.ty === 'gs') {
11354 pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);
11355 pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);
11356 pathElement.setAttribute('fill-opacity', '0');
11357 if (data.lj === 1) {
11358 pathElement.setAttribute('stroke-miterlimit', data.ml);
11359 }
11360 }
11361 if (data.r === 2) {
11362 pathElement.setAttribute('fill-rule', 'evenodd');
11363 }
11364 if (data.ln) {
11365 pathElement.setAttribute('id', data.ln);
11366 }
11367 if (data.cl) {
11368 pathElement.setAttribute('class', data.cl);
11369 }
11370 if (data.bm) {
11371 pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);
11372 }
11373 this.stylesList.push(styleOb);
11374 this.addToAnimatedContents(data, elementData);
11375 return elementData;
11376 };
11377 SVGShapeElement.prototype.createGroupElement = function (data) {
11378 var elementData = new ShapeGroupData();
11379 if (data.ln) {
11380 elementData.gr.setAttribute('id', data.ln);
11381 }
11382 if (data.cl) {
11383 elementData.gr.setAttribute('class', data.cl);
11384 }
11385 if (data.bm) {
11386 elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);
11387 }
11388 return elementData;
11389 };
11390 SVGShapeElement.prototype.createTransformElement = function (data, container) {
11391 var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);
11392 var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);
11393 this.addToAnimatedContents(data, elementData);
11394 return elementData;
11395 };
11396 SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {
11397 var ty = 4;
11398 if (data.ty === 'rc') {
11399 ty = 5;
11400 } else if (data.ty === 'el') {
11401 ty = 6;
11402 } else if (data.ty === 'sr') {
11403 ty = 7;
11404 }
11405 var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);
11406 var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);
11407 this.shapes.push(elementData);
11408 this.addShapeToModifiers(elementData);
11409 this.addToAnimatedContents(data, elementData);
11410 return elementData;
11411 };
11412 SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {
11413 var i = 0;
11414 var len = this.animatedContents.length;
11415 while (i < len) {
11416 if (this.animatedContents[i].element === element) {
11417 return;
11418 }
11419 i += 1;
11420 }
11421 this.animatedContents.push({
11422 fn: SVGElementsRenderer.createRenderFunction(data),
11423 element: element,
11424 data: data
11425 });
11426 };
11427 SVGShapeElement.prototype.setElementStyles = function (elementData) {
11428 var arr = elementData.styles;
11429 var j;
11430 var jLen = this.stylesList.length;
11431 for (j = 0; j < jLen; j += 1) {
11432 if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) {
11433 arr.push(this.stylesList[j]);
11434 }
11435 }
11436 };
11437 SVGShapeElement.prototype.reloadShapes = function () {
11438 this._isFirstFrame = true;
11439 var i;
11440 var len = this.itemsData.length;
11441 for (i = 0; i < len; i += 1) {
11442 this.prevViewData[i] = this.itemsData[i];
11443 }
11444 this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);
11445 this.filterUniqueShapes();
11446 len = this.dynamicProperties.length;
11447 for (i = 0; i < len; i += 1) {
11448 this.dynamicProperties[i].getValue();
11449 }
11450 this.renderModifiers();
11451 };
11452 SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {
11453 var ownTransformers = [].concat(transformers);
11454 var i;
11455 var len = arr.length - 1;
11456 var j;
11457 var jLen;
11458 var ownStyles = [];
11459 var ownModifiers = [];
11460 var currentTransform;
11461 var modifier;
11462 var processedPos;
11463 for (i = len; i >= 0; i -= 1) {
11464 processedPos = this.searchProcessedElement(arr[i]);
11465 if (!processedPos) {
11466 arr[i]._render = render;
11467 } else {
11468 itemsData[i] = prevViewData[processedPos - 1];
11469 }
11470 if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {
11471 if (!processedPos) {
11472 itemsData[i] = this.createStyleElement(arr[i], level);
11473 } else {
11474 itemsData[i].style.closed = arr[i].hd;
11475 }
11476 if (arr[i]._render) {
11477 if (itemsData[i].style.pElem.parentNode !== container) {
11478 container.appendChild(itemsData[i].style.pElem);
11479 }
11480 }
11481 ownStyles.push(itemsData[i].style);
11482 } else if (arr[i].ty === 'gr') {
11483 if (!processedPos) {
11484 itemsData[i] = this.createGroupElement(arr[i]);
11485 } else {
11486 jLen = itemsData[i].it.length;
11487 for (j = 0; j < jLen; j += 1) {
11488 itemsData[i].prevViewData[j] = itemsData[i].it[j];
11489 }
11490 }
11491 this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);
11492 if (arr[i]._render) {
11493 if (itemsData[i].gr.parentNode !== container) {
11494 container.appendChild(itemsData[i].gr);
11495 }
11496 }
11497 } else if (arr[i].ty === 'tr') {
11498 if (!processedPos) {
11499 itemsData[i] = this.createTransformElement(arr[i], container);
11500 }
11501 currentTransform = itemsData[i].transform;
11502 ownTransformers.push(currentTransform);
11503 } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {
11504 if (!processedPos) {
11505 itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);
11506 }
11507 this.setElementStyles(itemsData[i]);
11508 } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {
11509 if (!processedPos) {
11510 modifier = ShapeModifiers.getModifier(arr[i].ty);
11511 modifier.init(this, arr[i]);
11512 itemsData[i] = modifier;
11513 this.shapeModifiers.push(modifier);
11514 } else {
11515 modifier = itemsData[i];
11516 modifier.closed = false;
11517 }
11518 ownModifiers.push(modifier);
11519 } else if (arr[i].ty === 'rp') {
11520 if (!processedPos) {
11521 modifier = ShapeModifiers.getModifier(arr[i].ty);
11522 itemsData[i] = modifier;
11523 modifier.init(this, arr, i, itemsData);
11524 this.shapeModifiers.push(modifier);
11525 render = false;
11526 } else {
11527 modifier = itemsData[i];
11528 modifier.closed = true;
11529 }
11530 ownModifiers.push(modifier);
11531 }
11532 this.addProcessedElement(arr[i], i + 1);
11533 }
11534 len = ownStyles.length;
11535 for (i = 0; i < len; i += 1) {
11536 ownStyles[i].closed = true;
11537 }
11538 len = ownModifiers.length;
11539 for (i = 0; i < len; i += 1) {
11540 ownModifiers[i].closed = true;
11541 }
11542 };
11543 SVGShapeElement.prototype.renderInnerContent = function () {
11544 this.renderModifiers();
11545 var i;
11546 var len = this.stylesList.length;
11547 for (i = 0; i < len; i += 1) {
11548 this.stylesList[i].reset();
11549 }
11550 this.renderShape();
11551 for (i = 0; i < len; i += 1) {
11552 if (this.stylesList[i]._mdf || this._isFirstFrame) {
11553 if (this.stylesList[i].msElem) {
11554 this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);
11555 // Adding M0 0 fixes same mask bug on all browsers
11556 this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;
11557 }
11558 this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');
11559 }
11560 }
11561 };
11562 SVGShapeElement.prototype.renderShape = function () {
11563 var i;
11564 var len = this.animatedContents.length;
11565 var animatedContent;
11566 for (i = 0; i < len; i += 1) {
11567 animatedContent = this.animatedContents[i];
11568 if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {
11569 animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);
11570 }
11571 }
11572 };
11573 SVGShapeElement.prototype.destroy = function () {
11574 this.destroyBaseElement();
11575 this.shapesData = null;
11576 this.itemsData = null;
11577 };
11578
11579 function LetterProps(o, sw, sc, fc, m, p) {
11580 this.o = o;
11581 this.sw = sw;
11582 this.sc = sc;
11583 this.fc = fc;
11584 this.m = m;
11585 this.p = p;
11586 this._mdf = {
11587 o: true,
11588 sw: !!sw,
11589 sc: !!sc,
11590 fc: !!fc,
11591 m: true,
11592 p: true
11593 };
11594 }
11595 LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {
11596 this._mdf.o = false;
11597 this._mdf.sw = false;
11598 this._mdf.sc = false;
11599 this._mdf.fc = false;
11600 this._mdf.m = false;
11601 this._mdf.p = false;
11602 var updated = false;
11603 if (this.o !== o) {
11604 this.o = o;
11605 this._mdf.o = true;
11606 updated = true;
11607 }
11608 if (this.sw !== sw) {
11609 this.sw = sw;
11610 this._mdf.sw = true;
11611 updated = true;
11612 }
11613 if (this.sc !== sc) {
11614 this.sc = sc;
11615 this._mdf.sc = true;
11616 updated = true;
11617 }
11618 if (this.fc !== fc) {
11619 this.fc = fc;
11620 this._mdf.fc = true;
11621 updated = true;
11622 }
11623 if (this.m !== m) {
11624 this.m = m;
11625 this._mdf.m = true;
11626 updated = true;
11627 }
11628 if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {
11629 this.p = p;
11630 this._mdf.p = true;
11631 updated = true;
11632 }
11633 return updated;
11634 };
11635
11636 function TextProperty(elem, data) {
11637 this._frameId = initialDefaultFrame;
11638 this.pv = '';
11639 this.v = '';
11640 this.kf = false;
11641 this._isFirstFrame = true;
11642 this._mdf = false;
11643 if (data.d && data.d.sid) {
11644 data.d = elem.globalData.slotManager.getProp(data.d);
11645 }
11646 this.data = data;
11647 this.elem = elem;
11648 this.comp = this.elem.comp;
11649 this.keysIndex = 0;
11650 this.canResize = false;
11651 this.minimumFontSize = 1;
11652 this.effectsSequence = [];
11653 this.currentData = {
11654 ascent: 0,
11655 boxWidth: this.defaultBoxWidth,
11656 f: '',
11657 fStyle: '',
11658 fWeight: '',
11659 fc: '',
11660 j: '',
11661 justifyOffset: '',
11662 l: [],
11663 lh: 0,
11664 lineWidths: [],
11665 ls: '',
11666 of: '',
11667 s: '',
11668 sc: '',
11669 sw: 0,
11670 t: 0,
11671 tr: 0,
11672 sz: 0,
11673 ps: null,
11674 fillColorAnim: false,
11675 strokeColorAnim: false,
11676 strokeWidthAnim: false,
11677 yOffset: 0,
11678 finalSize: 0,
11679 finalText: [],
11680 finalLineHeight: 0,
11681 __complete: false
11682 };
11683 this.copyData(this.currentData, this.data.d.k[0].s);
11684 if (!this.searchProperty()) {
11685 this.completeTextData(this.currentData);
11686 }
11687 }
11688 TextProperty.prototype.defaultBoxWidth = [0, 0];
11689 TextProperty.prototype.copyData = function (obj, data) {
11690 for (var s in data) {
11691 if (Object.prototype.hasOwnProperty.call(data, s)) {
11692 obj[s] = data[s];
11693 }
11694 }
11695 return obj;
11696 };
11697 TextProperty.prototype.setCurrentData = function (data) {
11698 if (!data.__complete) {
11699 this.completeTextData(data);
11700 }
11701 this.currentData = data;
11702 this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;
11703 this._mdf = true;
11704 };
11705 TextProperty.prototype.searchProperty = function () {
11706 return this.searchKeyframes();
11707 };
11708 TextProperty.prototype.searchKeyframes = function () {
11709 this.kf = this.data.d.k.length > 1;
11710 if (this.kf) {
11711 this.addEffect(this.getKeyframeValue.bind(this));
11712 }
11713 return this.kf;
11714 };
11715 TextProperty.prototype.addEffect = function (effectFunction) {
11716 this.effectsSequence.push(effectFunction);
11717 this.elem.addDynamicProperty(this);
11718 };
11719 TextProperty.prototype.getValue = function (_finalValue) {
11720 if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {
11721 return;
11722 }
11723 this.currentData.t = this.data.d.k[this.keysIndex].s.t;
11724 var currentValue = this.currentData;
11725 var currentIndex = this.keysIndex;
11726 if (this.lock) {
11727 this.setCurrentData(this.currentData);
11728 return;
11729 }
11730 this.lock = true;
11731 this._mdf = false;
11732 var i;
11733 var len = this.effectsSequence.length;
11734 var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;
11735 for (i = 0; i < len; i += 1) {
11736 // Checking if index changed to prevent creating a new object every time the expression updates.
11737 if (currentIndex !== this.keysIndex) {
11738 finalValue = this.effectsSequence[i](finalValue, finalValue.t);
11739 } else {
11740 finalValue = this.effectsSequence[i](this.currentData, finalValue.t);
11741 }
11742 }
11743 if (currentValue !== finalValue) {
11744 this.setCurrentData(finalValue);
11745 }
11746 this.v = this.currentData;
11747 this.pv = this.v;
11748 this.lock = false;
11749 this.frameId = this.elem.globalData.frameId;
11750 };
11751 TextProperty.prototype.getKeyframeValue = function () {
11752 var textKeys = this.data.d.k;
11753 var frameNum = this.elem.comp.renderedFrame;
11754 var i = 0;
11755 var len = textKeys.length;
11756 while (i <= len - 1) {
11757 if (i === len - 1 || textKeys[i + 1].t > frameNum) {
11758 break;
11759 }
11760 i += 1;
11761 }
11762 if (this.keysIndex !== i) {
11763 this.keysIndex = i;
11764 }
11765 return this.data.d.k[this.keysIndex].s;
11766 };
11767 TextProperty.prototype.buildFinalText = function (text) {
11768 var charactersArray = [];
11769 var i = 0;
11770 var len = text.length;
11771 var charCode;
11772 var secondCharCode;
11773 var shouldCombine = false;
11774 var shouldCombineNext = false;
11775 var currentChars = '';
11776 while (i < len) {
11777 shouldCombine = shouldCombineNext;
11778 shouldCombineNext = false;
11779 charCode = text.charCodeAt(i);
11780 currentChars = text.charAt(i);
11781 if (FontManager.isCombinedCharacter(charCode)) {
11782 shouldCombine = true;
11783 // It's a potential surrogate pair (this is the High surrogate)
11784 } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11785 if (FontManager.isRegionalFlag(text, i)) {
11786 currentChars = text.substr(i, 14);
11787 } else {
11788 secondCharCode = text.charCodeAt(i + 1);
11789 // It's a surrogate pair (this is the Low surrogate)
11790 if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {
11791 if (FontManager.isModifier(charCode, secondCharCode)) {
11792 currentChars = text.substr(i, 2);
11793 shouldCombine = true;
11794 } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {
11795 currentChars = text.substr(i, 4);
11796 } else {
11797 currentChars = text.substr(i, 2);
11798 }
11799 }
11800 }
11801 } else if (charCode > 0xDBFF) {
11802 secondCharCode = text.charCodeAt(i + 1);
11803 if (FontManager.isVariationSelector(charCode)) {
11804 shouldCombine = true;
11805 }
11806 } else if (FontManager.isZeroWidthJoiner(charCode)) {
11807 shouldCombine = true;
11808 shouldCombineNext = true;
11809 }
11810 if (shouldCombine) {
11811 charactersArray[charactersArray.length - 1] += currentChars;
11812 shouldCombine = false;
11813 } else {
11814 charactersArray.push(currentChars);
11815 }
11816 i += currentChars.length;
11817 }
11818 return charactersArray;
11819 };
11820 TextProperty.prototype.completeTextData = function (documentData) {
11821 documentData.__complete = true;
11822 var fontManager = this.elem.globalData.fontManager;
11823 var data = this.data;
11824 var letters = [];
11825 var i;
11826 var len;
11827 var newLineFlag;
11828 var index = 0;
11829 var val;
11830 var anchorGrouping = data.m.g;
11831 var currentSize = 0;
11832 var currentPos = 0;
11833 var currentLine = 0;
11834 var lineWidths = [];
11835 var lineWidth = 0;
11836 var maxLineWidth = 0;
11837 var j;
11838 var jLen;
11839 var fontData = fontManager.getFontByName(documentData.f);
11840 var charData;
11841 var cLength = 0;
11842 var fontProps = getFontProperties(fontData);
11843 documentData.fWeight = fontProps.weight;
11844 documentData.fStyle = fontProps.style;
11845 documentData.finalSize = documentData.s;
11846 documentData.finalText = this.buildFinalText(documentData.t);
11847 len = documentData.finalText.length;
11848 documentData.finalLineHeight = documentData.lh;
11849 var trackingOffset = documentData.tr / 1000 * documentData.finalSize;
11850 var charCode;
11851 if (documentData.sz) {
11852 var flag = true;
11853 var boxWidth = documentData.sz[0];
11854 var boxHeight = documentData.sz[1];
11855 var currentHeight;
11856 var finalText;
11857 while (flag) {
11858 finalText = this.buildFinalText(documentData.t);
11859 currentHeight = 0;
11860 lineWidth = 0;
11861 len = finalText.length;
11862 trackingOffset = documentData.tr / 1000 * documentData.finalSize;
11863 var lastSpaceIndex = -1;
11864 for (i = 0; i < len; i += 1) {
11865 charCode = finalText[i].charCodeAt(0);
11866 newLineFlag = false;
11867 if (finalText[i] === ' ') {
11868 lastSpaceIndex = i;
11869 } else if (charCode === 13 || charCode === 3) {
11870 lineWidth = 0;
11871 newLineFlag = true;
11872 currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;
11873 }
11874 if (fontManager.chars) {
11875 charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);
11876 cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;
11877 } else {
11878 // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;
11879 cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);
11880 }
11881 if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {
11882 if (lastSpaceIndex === -1) {
11883 len += 1;
11884 } else {
11885 i = lastSpaceIndex;
11886 }
11887 currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;
11888 finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\r');
11889 // finalText = finalText.substr(0,i) + "\r" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);
11890 lastSpaceIndex = -1;
11891 lineWidth = 0;
11892 } else {
11893 lineWidth += cLength;
11894 lineWidth += trackingOffset;
11895 }
11896 }
11897 currentHeight += fontData.ascent * documentData.finalSize / 100;
11898 if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {
11899 documentData.finalSize -= 1;
11900 documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;
11901 } else {
11902 documentData.finalText = finalText;
11903 len = documentData.finalText.length;
11904 flag = false;
11905 }
11906 }
11907 }
11908 lineWidth = -trackingOffset;
11909 cLength = 0;
11910 var uncollapsedSpaces = 0;
11911 var currentChar;
11912 for (i = 0; i < len; i += 1) {
11913 newLineFlag = false;
11914 currentChar = documentData.finalText[i];
11915 charCode = currentChar.charCodeAt(0);
11916 if (charCode === 13 || charCode === 3) {
11917 uncollapsedSpaces = 0;
11918 lineWidths.push(lineWidth);
11919 maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;
11920 lineWidth = -2 * trackingOffset;
11921 val = '';
11922 newLineFlag = true;
11923 currentLine += 1;
11924 } else {
11925 val = currentChar;
11926 }
11927 if (fontManager.chars) {
11928 charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);
11929 cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;
11930 } else {
11931 // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);
11932 // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;
11933 cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);
11934 }
11935
11936 //
11937 if (currentChar === ' ') {
11938 uncollapsedSpaces += cLength + trackingOffset;
11939 } else {
11940 lineWidth += cLength + trackingOffset + uncollapsedSpaces;
11941 uncollapsedSpaces = 0;
11942 }
11943 letters.push({
11944 l: cLength,
11945 an: cLength,
11946 add: currentSize,
11947 n: newLineFlag,
11948 anIndexes: [],
11949 val: val,
11950 line: currentLine,
11951 animatorJustifyOffset: 0
11952 });
11953 if (anchorGrouping == 2) {
11954 // eslint-disable-line eqeqeq
11955 currentSize += cLength;
11956 if (val === '' || val === ' ' || i === len - 1) {
11957 if (val === '' || val === ' ') {
11958 currentSize -= cLength;
11959 }
11960 while (currentPos <= i) {
11961 letters[currentPos].an = currentSize;
11962 letters[currentPos].ind = index;
11963 letters[currentPos].extra = cLength;
11964 currentPos += 1;
11965 }
11966 index += 1;
11967 currentSize = 0;
11968 }
11969 } else if (anchorGrouping == 3) {
11970 // eslint-disable-line eqeqeq
11971 currentSize += cLength;
11972 if (val === '' || i === len - 1) {
11973 if (val === '') {
11974 currentSize -= cLength;
11975 }
11976 while (currentPos <= i) {
11977 letters[currentPos].an = currentSize;
11978 letters[currentPos].ind = index;
11979 letters[currentPos].extra = cLength;
11980 currentPos += 1;
11981 }
11982 currentSize = 0;
11983 index += 1;
11984 }
11985 } else {
11986 letters[index].ind = index;
11987 letters[index].extra = 0;
11988 index += 1;
11989 }
11990 }
11991 documentData.l = letters;
11992 maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;
11993 lineWidths.push(lineWidth);
11994 if (documentData.sz) {
11995 documentData.boxWidth = documentData.sz[0];
11996 documentData.justifyOffset = 0;
11997 } else {
11998 documentData.boxWidth = maxLineWidth;
11999 switch (documentData.j) {
12000 case 1:
12001 documentData.justifyOffset = -documentData.boxWidth;
12002 break;
12003 case 2:
12004 documentData.justifyOffset = -documentData.boxWidth / 2;
12005 break;
12006 default:
12007 documentData.justifyOffset = 0;
12008 }
12009 }
12010 documentData.lineWidths = lineWidths;
12011 var animators = data.a;
12012 var animatorData;
12013 var letterData;
12014 jLen = animators.length;
12015 var based;
12016 var ind;
12017 var indexes = [];
12018 for (j = 0; j < jLen; j += 1) {
12019 animatorData = animators[j];
12020 if (animatorData.a.sc) {
12021 documentData.strokeColorAnim = true;
12022 }
12023 if (animatorData.a.sw) {
12024 documentData.strokeWidthAnim = true;
12025 }
12026 if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {
12027 documentData.fillColorAnim = true;
12028 }
12029 ind = 0;
12030 based = animatorData.s.b;
12031 for (i = 0; i < len; i += 1) {
12032 letterData = letters[i];
12033 letterData.anIndexes[j] = ind;
12034 if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {
12035 // eslint-disable-line eqeqeq
12036 if (animatorData.s.rn === 1) {
12037 indexes.push(ind);
12038 }
12039 ind += 1;
12040 }
12041 }
12042 data.a[j].s.totalChars = ind;
12043 var currentInd = -1;
12044 var newInd;
12045 if (animatorData.s.rn === 1) {
12046 for (i = 0; i < len; i += 1) {
12047 letterData = letters[i];
12048 if (currentInd != letterData.anIndexes[j]) {
12049 // eslint-disable-line eqeqeq
12050 currentInd = letterData.anIndexes[j];
12051 newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];
12052 }
12053 letterData.anIndexes[j] = newInd;
12054 }
12055 }
12056 }
12057 documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;
12058 documentData.ls = documentData.ls || 0;
12059 documentData.ascent = fontData.ascent * documentData.finalSize / 100;
12060 };
12061 TextProperty.prototype.updateDocumentData = function (newData, index) {
12062 index = index === undefined ? this.keysIndex : index;
12063 var dData = this.copyData({}, this.data.d.k[index].s);
12064 dData = this.copyData(dData, newData);
12065 this.data.d.k[index].s = dData;
12066 this.recalculate(index);
12067 this.setCurrentData(dData);
12068 this.elem.addDynamicProperty(this);
12069 };
12070 TextProperty.prototype.recalculate = function (index) {
12071 var dData = this.data.d.k[index].s;
12072 dData.__complete = false;
12073 this.keysIndex = 0;
12074 this._isFirstFrame = true;
12075 this.getValue(dData);
12076 };
12077 TextProperty.prototype.canResizeFont = function (_canResize) {
12078 this.canResize = _canResize;
12079 this.recalculate(this.keysIndex);
12080 this.elem.addDynamicProperty(this);
12081 };
12082 TextProperty.prototype.setMinimumFontSize = function (_fontValue) {
12083 this.minimumFontSize = Math.floor(_fontValue) || 1;
12084 this.recalculate(this.keysIndex);
12085 this.elem.addDynamicProperty(this);
12086 };
12087
12088 var TextSelectorProp = function () {
12089 var max = Math.max;
12090 var min = Math.min;
12091 var floor = Math.floor;
12092 function TextSelectorPropFactory(elem, data) {
12093 this._currentTextLength = -1;
12094 this.k = false;
12095 this.data = data;
12096 this.elem = elem;
12097 this.comp = elem.comp;
12098 this.finalS = 0;
12099 this.finalE = 0;
12100 this.initDynamicPropertyContainer(elem);
12101 this.s = PropertyFactory.getProp(elem, data.s || {
12102 k: 0
12103 }, 0, 0, this);
12104 if ('e' in data) {
12105 this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);
12106 } else {
12107 this.e = {
12108 v: 100
12109 };
12110 }
12111 this.o = PropertyFactory.getProp(elem, data.o || {
12112 k: 0
12113 }, 0, 0, this);
12114 this.xe = PropertyFactory.getProp(elem, data.xe || {
12115 k: 0
12116 }, 0, 0, this);
12117 this.ne = PropertyFactory.getProp(elem, data.ne || {
12118 k: 0
12119 }, 0, 0, this);
12120 this.sm = PropertyFactory.getProp(elem, data.sm || {
12121 k: 100
12122 }, 0, 0, this);
12123 this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);
12124 if (!this.dynamicProperties.length) {
12125 this.getValue();
12126 }
12127 }
12128 TextSelectorPropFactory.prototype = {
12129 getMult: function getMult(ind) {
12130 if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {
12131 this.getValue();
12132 }
12133 var x1 = 0;
12134 var y1 = 0;
12135 var x2 = 1;
12136 var y2 = 1;
12137 if (this.ne.v > 0) {
12138 x1 = this.ne.v / 100.0;
12139 } else {
12140 y1 = -this.ne.v / 100.0;
12141 }
12142 if (this.xe.v > 0) {
12143 x2 = 1.0 - this.xe.v / 100.0;
12144 } else {
12145 y2 = 1.0 + this.xe.v / 100.0;
12146 }
12147 var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;
12148 var mult = 0;
12149 var s = this.finalS;
12150 var e = this.finalE;
12151 var type = this.data.sh;
12152 if (type === 2) {
12153 if (e === s) {
12154 mult = ind >= e ? 1 : 0;
12155 } else {
12156 mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));
12157 }
12158 mult = easer(mult);
12159 } else if (type === 3) {
12160 if (e === s) {
12161 mult = ind >= e ? 0 : 1;
12162 } else {
12163 mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));
12164 }
12165 mult = easer(mult);
12166 } else if (type === 4) {
12167 if (e === s) {
12168 mult = 0;
12169 } else {
12170 mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));
12171 if (mult < 0.5) {
12172 mult *= 2;
12173 } else {
12174 mult = 1 - 2 * (mult - 0.5);
12175 }
12176 }
12177 mult = easer(mult);
12178 } else if (type === 5) {
12179 if (e === s) {
12180 mult = 0;
12181 } else {
12182 var tot = e - s;
12183 /* ind += 0.5;
12184 mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */
12185 ind = min(max(0, ind + 0.5 - s), e - s);
12186 var x = -tot / 2 + ind;
12187 var a = tot / 2;
12188 mult = Math.sqrt(1 - x * x / (a * a));
12189 }
12190 mult = easer(mult);
12191 } else if (type === 6) {
12192 if (e === s) {
12193 mult = 0;
12194 } else {
12195 ind = min(max(0, ind + 0.5 - s), e - s);
12196 mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line
12197 }
12198 mult = easer(mult);
12199 } else {
12200 if (ind >= floor(s)) {
12201 if (ind - s < 0) {
12202 mult = max(0, min(min(e, 1) - (s - ind), 1));
12203 } else {
12204 mult = max(0, min(e - ind, 1));
12205 }
12206 }
12207 mult = easer(mult);
12208 }
12209 // Smoothness implementation.
12210 // The smoothness represents a reduced range of the original [0; 1] range.
12211 // if smoothness is 25%, the new range will be [0.375; 0.625]
12212 // Steps are:
12213 // - find the lower value of the new range (threshold)
12214 // - if multiplier is smaller than that value, floor it to 0
12215 // - if it is larger,
12216 // - subtract the threshold
12217 // - divide it by the smoothness (this will return the range to [0; 1])
12218 // Note: If it doesn't work on some scenarios, consider applying it before the easer.
12219 if (this.sm.v !== 100) {
12220 var smoothness = this.sm.v * 0.01;
12221 if (smoothness === 0) {
12222 smoothness = 0.00000001;
12223 }
12224 var threshold = 0.5 - smoothness * 0.5;
12225 if (mult < threshold) {
12226 mult = 0;
12227 } else {
12228 mult = (mult - threshold) / smoothness;
12229 if (mult > 1) {
12230 mult = 1;
12231 }
12232 }
12233 }
12234 return mult * this.a.v;
12235 },
12236 getValue: function getValue(newCharsFlag) {
12237 this.iterateDynamicProperties();
12238 this._mdf = newCharsFlag || this._mdf;
12239 this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;
12240 if (newCharsFlag && this.data.r === 2) {
12241 this.e.v = this._currentTextLength;
12242 }
12243 var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;
12244 var o = this.o.v / divisor;
12245 var s = this.s.v / divisor + o;
12246 var e = this.e.v / divisor + o;
12247 if (s > e) {
12248 var _s = s;
12249 s = e;
12250 e = _s;
12251 }
12252 this.finalS = s;
12253 this.finalE = e;
12254 }
12255 };
12256 extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);
12257 function getTextSelectorProp(elem, data, arr) {
12258 return new TextSelectorPropFactory(elem, data, arr);
12259 }
12260 return {
12261 getTextSelectorProp: getTextSelectorProp
12262 };
12263 }();
12264
12265 function TextAnimatorDataProperty(elem, animatorProps, container) {
12266 var defaultData = {
12267 propType: false
12268 };
12269 var getProp = PropertyFactory.getProp;
12270 var textAnimatorAnimatables = animatorProps.a;
12271 this.a = {
12272 r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,
12273 rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,
12274 ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,
12275 sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,
12276 sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,
12277 s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,
12278 a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,
12279 o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,
12280 p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,
12281 sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,
12282 sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,
12283 fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,
12284 fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,
12285 fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,
12286 fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,
12287 t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData
12288 };
12289 this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);
12290 this.s.t = animatorProps.s.t;
12291 }
12292
12293 function TextAnimatorProperty(textData, renderType, elem) {
12294 this._isFirstFrame = true;
12295 this._hasMaskedPath = false;
12296 this._frameId = -1;
12297 this._textData = textData;
12298 this._renderType = renderType;
12299 this._elem = elem;
12300 this._animatorsData = createSizedArray(this._textData.a.length);
12301 this._pathData = {};
12302 this._moreOptions = {
12303 alignment: {}
12304 };
12305 this.renderedLetters = [];
12306 this.lettersChangedFlag = false;
12307 this.initDynamicPropertyContainer(elem);
12308 }
12309 TextAnimatorProperty.prototype.searchProperties = function () {
12310 var i;
12311 var len = this._textData.a.length;
12312 var animatorProps;
12313 var getProp = PropertyFactory.getProp;
12314 for (i = 0; i < len; i += 1) {
12315 animatorProps = this._textData.a[i];
12316 this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);
12317 }
12318 if (this._textData.p && 'm' in this._textData.p) {
12319 this._pathData = {
12320 a: getProp(this._elem, this._textData.p.a, 0, 0, this),
12321 f: getProp(this._elem, this._textData.p.f, 0, 0, this),
12322 l: getProp(this._elem, this._textData.p.l, 0, 0, this),
12323 r: getProp(this._elem, this._textData.p.r, 0, 0, this),
12324 p: getProp(this._elem, this._textData.p.p, 0, 0, this),
12325 m: this._elem.maskManager.getMaskProperty(this._textData.p.m)
12326 };
12327 this._hasMaskedPath = true;
12328 } else {
12329 this._hasMaskedPath = false;
12330 }
12331 this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);
12332 };
12333 TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {
12334 this.lettersChangedFlag = lettersChangedFlag;
12335 if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {
12336 return;
12337 }
12338 this._isFirstFrame = false;
12339 var alignment = this._moreOptions.alignment.v;
12340 var animators = this._animatorsData;
12341 var textData = this._textData;
12342 var matrixHelper = this.mHelper;
12343 var renderType = this._renderType;
12344 var renderedLettersCount = this.renderedLetters.length;
12345 var xPos;
12346 var yPos;
12347 var i;
12348 var len;
12349 var letters = documentData.l;
12350 var pathInfo;
12351 var currentLength;
12352 var currentPoint;
12353 var segmentLength;
12354 var flag;
12355 var pointInd;
12356 var segmentInd;
12357 var prevPoint;
12358 var points;
12359 var segments;
12360 var partialLength;
12361 var totalLength;
12362 var perc;
12363 var tanAngle;
12364 var mask;
12365 if (this._hasMaskedPath) {
12366 mask = this._pathData.m;
12367 if (!this._pathData.n || this._pathData._mdf) {
12368 var paths = mask.v;
12369 if (this._pathData.r.v) {
12370 paths = paths.reverse();
12371 }
12372 // TODO: release bezier data cached from previous pathInfo: this._pathData.pi
12373 pathInfo = {
12374 tLength: 0,
12375 segments: []
12376 };
12377 len = paths._length - 1;
12378 var bezierData;
12379 totalLength = 0;
12380 for (i = 0; i < len; i += 1) {
12381 bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);
12382 pathInfo.tLength += bezierData.segmentLength;
12383 pathInfo.segments.push(bezierData);
12384 totalLength += bezierData.segmentLength;
12385 }
12386 i = len;
12387 if (mask.v.c) {
12388 bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);
12389 pathInfo.tLength += bezierData.segmentLength;
12390 pathInfo.segments.push(bezierData);
12391 totalLength += bezierData.segmentLength;
12392 }
12393 this._pathData.pi = pathInfo;
12394 }
12395 pathInfo = this._pathData.pi;
12396 currentLength = this._pathData.f.v;
12397 segmentInd = 0;
12398 pointInd = 1;
12399 segmentLength = 0;
12400 flag = true;
12401 segments = pathInfo.segments;
12402 if (currentLength < 0 && mask.v.c) {
12403 if (pathInfo.tLength < Math.abs(currentLength)) {
12404 currentLength = -Math.abs(currentLength) % pathInfo.tLength;
12405 }
12406 segmentInd = segments.length - 1;
12407 points = segments[segmentInd].points;
12408 pointInd = points.length - 1;
12409 while (currentLength < 0) {
12410 currentLength += points[pointInd].partialLength;
12411 pointInd -= 1;
12412 if (pointInd < 0) {
12413 segmentInd -= 1;
12414 points = segments[segmentInd].points;
12415 pointInd = points.length - 1;
12416 }
12417 }
12418 }
12419 points = segments[segmentInd].points;
12420 prevPoint = points[pointInd - 1];
12421 currentPoint = points[pointInd];
12422 partialLength = currentPoint.partialLength;
12423 }
12424 len = letters.length;
12425 xPos = 0;
12426 yPos = 0;
12427 var yOff = documentData.finalSize * 1.2 * 0.714;
12428 var firstLine = true;
12429 var animatorProps;
12430 var animatorSelector;
12431 var j;
12432 var jLen;
12433 var letterValue;
12434 jLen = animators.length;
12435 var mult;
12436 var ind = -1;
12437 var offf;
12438 var xPathPos;
12439 var yPathPos;
12440 var initPathPos = currentLength;
12441 var initSegmentInd = segmentInd;
12442 var initPointInd = pointInd;
12443 var currentLine = -1;
12444 var elemOpacity;
12445 var sc;
12446 var sw;
12447 var fc;
12448 var k;
12449 var letterSw;
12450 var letterSc;
12451 var letterFc;
12452 var letterM = '';
12453 var letterP = this.defaultPropsArray;
12454 var letterO;
12455
12456 //
12457 if (documentData.j === 2 || documentData.j === 1) {
12458 var animatorJustifyOffset = 0;
12459 var animatorFirstCharOffset = 0;
12460 var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;
12461 var lastIndex = 0;
12462 var isNewLine = true;
12463 for (i = 0; i < len; i += 1) {
12464 if (letters[i].n) {
12465 if (animatorJustifyOffset) {
12466 animatorJustifyOffset += animatorFirstCharOffset;
12467 }
12468 while (lastIndex < i) {
12469 letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;
12470 lastIndex += 1;
12471 }
12472 animatorJustifyOffset = 0;
12473 isNewLine = true;
12474 } else {
12475 for (j = 0; j < jLen; j += 1) {
12476 animatorProps = animators[j].a;
12477 if (animatorProps.t.propType) {
12478 if (isNewLine && documentData.j === 2) {
12479 animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;
12480 }
12481 animatorSelector = animators[j].s;
12482 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12483 if (mult.length) {
12484 animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;
12485 } else {
12486 animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;
12487 }
12488 }
12489 }
12490 isNewLine = false;
12491 }
12492 }
12493 if (animatorJustifyOffset) {
12494 animatorJustifyOffset += animatorFirstCharOffset;
12495 }
12496 while (lastIndex < i) {
12497 letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;
12498 lastIndex += 1;
12499 }
12500 }
12501 //
12502
12503 for (i = 0; i < len; i += 1) {
12504 matrixHelper.reset();
12505 elemOpacity = 1;
12506 if (letters[i].n) {
12507 xPos = 0;
12508 yPos += documentData.yOffset;
12509 yPos += firstLine ? 1 : 0;
12510 currentLength = initPathPos;
12511 firstLine = false;
12512 if (this._hasMaskedPath) {
12513 segmentInd = initSegmentInd;
12514 pointInd = initPointInd;
12515 points = segments[segmentInd].points;
12516 prevPoint = points[pointInd - 1];
12517 currentPoint = points[pointInd];
12518 partialLength = currentPoint.partialLength;
12519 segmentLength = 0;
12520 }
12521 letterM = '';
12522 letterFc = '';
12523 letterSw = '';
12524 letterO = '';
12525 letterP = this.defaultPropsArray;
12526 } else {
12527 if (this._hasMaskedPath) {
12528 if (currentLine !== letters[i].line) {
12529 switch (documentData.j) {
12530 case 1:
12531 currentLength += totalLength - documentData.lineWidths[letters[i].line];
12532 break;
12533 case 2:
12534 currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;
12535 break;
12536 default:
12537 break;
12538 }
12539 currentLine = letters[i].line;
12540 }
12541 if (ind !== letters[i].ind) {
12542 if (letters[ind]) {
12543 currentLength += letters[ind].extra;
12544 }
12545 currentLength += letters[i].an / 2;
12546 ind = letters[i].ind;
12547 }
12548 currentLength += alignment[0] * letters[i].an * 0.005;
12549 var animatorOffset = 0;
12550 for (j = 0; j < jLen; j += 1) {
12551 animatorProps = animators[j].a;
12552 if (animatorProps.p.propType) {
12553 animatorSelector = animators[j].s;
12554 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12555 if (mult.length) {
12556 animatorOffset += animatorProps.p.v[0] * mult[0];
12557 } else {
12558 animatorOffset += animatorProps.p.v[0] * mult;
12559 }
12560 }
12561 if (animatorProps.a.propType) {
12562 animatorSelector = animators[j].s;
12563 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12564 if (mult.length) {
12565 animatorOffset += animatorProps.a.v[0] * mult[0];
12566 } else {
12567 animatorOffset += animatorProps.a.v[0] * mult;
12568 }
12569 }
12570 }
12571 flag = true;
12572 // Force alignment only works with a single line for now
12573 if (this._pathData.a.v) {
12574 currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);
12575 currentLength += this._pathData.f.v;
12576 }
12577 while (flag) {
12578 if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {
12579 perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;
12580 xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;
12581 yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;
12582 matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);
12583 flag = false;
12584 } else if (points) {
12585 segmentLength += currentPoint.partialLength;
12586 pointInd += 1;
12587 if (pointInd >= points.length) {
12588 pointInd = 0;
12589 segmentInd += 1;
12590 if (!segments[segmentInd]) {
12591 if (mask.v.c) {
12592 pointInd = 0;
12593 segmentInd = 0;
12594 points = segments[segmentInd].points;
12595 } else {
12596 segmentLength -= currentPoint.partialLength;
12597 points = null;
12598 }
12599 } else {
12600 points = segments[segmentInd].points;
12601 }
12602 }
12603 if (points) {
12604 prevPoint = currentPoint;
12605 currentPoint = points[pointInd];
12606 partialLength = currentPoint.partialLength;
12607 }
12608 }
12609 }
12610 offf = letters[i].an / 2 - letters[i].add;
12611 matrixHelper.translate(-offf, 0, 0);
12612 } else {
12613 offf = letters[i].an / 2 - letters[i].add;
12614 matrixHelper.translate(-offf, 0, 0);
12615
12616 // Grouping alignment
12617 matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);
12618 }
12619 for (j = 0; j < jLen; j += 1) {
12620 animatorProps = animators[j].a;
12621 if (animatorProps.t.propType) {
12622 animatorSelector = animators[j].s;
12623 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12624 // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean "isNewLine"
12625 if (xPos !== 0 || documentData.j !== 0) {
12626 if (this._hasMaskedPath) {
12627 if (mult.length) {
12628 currentLength += animatorProps.t.v * mult[0];
12629 } else {
12630 currentLength += animatorProps.t.v * mult;
12631 }
12632 } else if (mult.length) {
12633 xPos += animatorProps.t.v * mult[0];
12634 } else {
12635 xPos += animatorProps.t.v * mult;
12636 }
12637 }
12638 }
12639 }
12640 if (documentData.strokeWidthAnim) {
12641 sw = documentData.sw || 0;
12642 }
12643 if (documentData.strokeColorAnim) {
12644 if (documentData.sc) {
12645 sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];
12646 } else {
12647 sc = [0, 0, 0];
12648 }
12649 }
12650 if (documentData.fillColorAnim && documentData.fc) {
12651 fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];
12652 }
12653 for (j = 0; j < jLen; j += 1) {
12654 animatorProps = animators[j].a;
12655 if (animatorProps.a.propType) {
12656 animatorSelector = animators[j].s;
12657 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12658 if (mult.length) {
12659 matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);
12660 } else {
12661 matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);
12662 }
12663 }
12664 }
12665 for (j = 0; j < jLen; j += 1) {
12666 animatorProps = animators[j].a;
12667 if (animatorProps.s.propType) {
12668 animatorSelector = animators[j].s;
12669 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12670 if (mult.length) {
12671 matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);
12672 } else {
12673 matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);
12674 }
12675 }
12676 }
12677 for (j = 0; j < jLen; j += 1) {
12678 animatorProps = animators[j].a;
12679 animatorSelector = animators[j].s;
12680 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12681 if (animatorProps.sk.propType) {
12682 if (mult.length) {
12683 matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);
12684 } else {
12685 matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);
12686 }
12687 }
12688 if (animatorProps.r.propType) {
12689 if (mult.length) {
12690 matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);
12691 } else {
12692 matrixHelper.rotateZ(-animatorProps.r.v * mult);
12693 }
12694 }
12695 if (animatorProps.ry.propType) {
12696 if (mult.length) {
12697 matrixHelper.rotateY(animatorProps.ry.v * mult[1]);
12698 } else {
12699 matrixHelper.rotateY(animatorProps.ry.v * mult);
12700 }
12701 }
12702 if (animatorProps.rx.propType) {
12703 if (mult.length) {
12704 matrixHelper.rotateX(animatorProps.rx.v * mult[0]);
12705 } else {
12706 matrixHelper.rotateX(animatorProps.rx.v * mult);
12707 }
12708 }
12709 if (animatorProps.o.propType) {
12710 if (mult.length) {
12711 elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];
12712 } else {
12713 elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;
12714 }
12715 }
12716 if (documentData.strokeWidthAnim && animatorProps.sw.propType) {
12717 if (mult.length) {
12718 sw += animatorProps.sw.v * mult[0];
12719 } else {
12720 sw += animatorProps.sw.v * mult;
12721 }
12722 }
12723 if (documentData.strokeColorAnim && animatorProps.sc.propType) {
12724 for (k = 0; k < 3; k += 1) {
12725 if (mult.length) {
12726 sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];
12727 } else {
12728 sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;
12729 }
12730 }
12731 }
12732 if (documentData.fillColorAnim && documentData.fc) {
12733 if (animatorProps.fc.propType) {
12734 for (k = 0; k < 3; k += 1) {
12735 if (mult.length) {
12736 fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];
12737 } else {
12738 fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;
12739 }
12740 }
12741 }
12742 if (animatorProps.fh.propType) {
12743 if (mult.length) {
12744 fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);
12745 } else {
12746 fc = addHueToRGB(fc, animatorProps.fh.v * mult);
12747 }
12748 }
12749 if (animatorProps.fs.propType) {
12750 if (mult.length) {
12751 fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);
12752 } else {
12753 fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);
12754 }
12755 }
12756 if (animatorProps.fb.propType) {
12757 if (mult.length) {
12758 fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);
12759 } else {
12760 fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);
12761 }
12762 }
12763 }
12764 }
12765 for (j = 0; j < jLen; j += 1) {
12766 animatorProps = animators[j].a;
12767 if (animatorProps.p.propType) {
12768 animatorSelector = animators[j].s;
12769 mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);
12770 if (this._hasMaskedPath) {
12771 if (mult.length) {
12772 matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);
12773 } else {
12774 matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);
12775 }
12776 } else if (mult.length) {
12777 matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);
12778 } else {
12779 matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);
12780 }
12781 }
12782 }
12783 if (documentData.strokeWidthAnim) {
12784 letterSw = sw < 0 ? 0 : sw;
12785 }
12786 if (documentData.strokeColorAnim) {
12787 letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';
12788 }
12789 if (documentData.fillColorAnim && documentData.fc) {
12790 letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';
12791 }
12792 if (this._hasMaskedPath) {
12793 matrixHelper.translate(0, -documentData.ls);
12794 matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);
12795 if (this._pathData.p.v) {
12796 tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);
12797 var rot = Math.atan(tanAngle) * 180 / Math.PI;
12798 if (currentPoint.point[0] < prevPoint.point[0]) {
12799 rot += 180;
12800 }
12801 matrixHelper.rotate(-rot * Math.PI / 180);
12802 }
12803 matrixHelper.translate(xPathPos, yPathPos, 0);
12804 currentLength -= alignment[0] * letters[i].an * 0.005;
12805 if (letters[i + 1] && ind !== letters[i + 1].ind) {
12806 currentLength += letters[i].an / 2;
12807 currentLength += documentData.tr * 0.001 * documentData.finalSize;
12808 }
12809 } else {
12810 matrixHelper.translate(xPos, yPos, 0);
12811 if (documentData.ps) {
12812 // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);
12813 matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);
12814 }
12815 switch (documentData.j) {
12816 case 1:
12817 matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);
12818 break;
12819 case 2:
12820 matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);
12821 break;
12822 default:
12823 break;
12824 }
12825 matrixHelper.translate(0, -documentData.ls);
12826 matrixHelper.translate(offf, 0, 0);
12827 matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);
12828 xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;
12829 }
12830 if (renderType === 'html') {
12831 letterM = matrixHelper.toCSS();
12832 } else if (renderType === 'svg') {
12833 letterM = matrixHelper.to2dCSS();
12834 } else {
12835 letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];
12836 }
12837 letterO = elemOpacity;
12838 }
12839 if (renderedLettersCount <= i) {
12840 letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);
12841 this.renderedLetters.push(letterValue);
12842 renderedLettersCount += 1;
12843 this.lettersChangedFlag = true;
12844 } else {
12845 letterValue = this.renderedLetters[i];
12846 this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;
12847 }
12848 }
12849 };
12850 TextAnimatorProperty.prototype.getValue = function () {
12851 if (this._elem.globalData.frameId === this._frameId) {
12852 return;
12853 }
12854 this._frameId = this._elem.globalData.frameId;
12855 this.iterateDynamicProperties();
12856 };
12857 TextAnimatorProperty.prototype.mHelper = new Matrix();
12858 TextAnimatorProperty.prototype.defaultPropsArray = [];
12859 extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);
12860
12861 function ITextElement() {}
12862 ITextElement.prototype.initElement = function (data, globalData, comp) {
12863 this.lettersChangedFlag = true;
12864 this.initFrame();
12865 this.initBaseData(data, globalData, comp);
12866 this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);
12867 this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);
12868 this.initTransform(data, globalData, comp);
12869 this.initHierarchy();
12870 this.initRenderable();
12871 this.initRendererElement();
12872 this.createContainerElements();
12873 this.createRenderableComponents();
12874 this.createContent();
12875 this.hide();
12876 this.textAnimator.searchProperties(this.dynamicProperties);
12877 };
12878 ITextElement.prototype.prepareFrame = function (num) {
12879 this._mdf = false;
12880 this.prepareRenderableFrame(num);
12881 this.prepareProperties(num, this.isInRange);
12882 };
12883 ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {
12884 var j;
12885 var jLen = shapes.length;
12886 var pathNodes;
12887 var shapeStr = '';
12888 for (j = 0; j < jLen; j += 1) {
12889 if (shapes[j].ty === 'sh') {
12890 pathNodes = shapes[j].ks.k;
12891 shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);
12892 }
12893 }
12894 return shapeStr;
12895 };
12896 ITextElement.prototype.updateDocumentData = function (newData, index) {
12897 this.textProperty.updateDocumentData(newData, index);
12898 };
12899 ITextElement.prototype.canResizeFont = function (_canResize) {
12900 this.textProperty.canResizeFont(_canResize);
12901 };
12902 ITextElement.prototype.setMinimumFontSize = function (_fontSize) {
12903 this.textProperty.setMinimumFontSize(_fontSize);
12904 };
12905 ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {
12906 if (documentData.ps) {
12907 matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);
12908 }
12909 matrixHelper.translate(0, -documentData.ls, 0);
12910 switch (documentData.j) {
12911 case 1:
12912 matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);
12913 break;
12914 case 2:
12915 matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);
12916 break;
12917 default:
12918 break;
12919 }
12920 matrixHelper.translate(xPos, yPos, 0);
12921 };
12922 ITextElement.prototype.buildColor = function (colorData) {
12923 return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';
12924 };
12925 ITextElement.prototype.emptyProp = new LetterProps();
12926 ITextElement.prototype.destroy = function () {};
12927 ITextElement.prototype.validateText = function () {
12928 if (this.textProperty._mdf || this.textProperty._isFirstFrame) {
12929 this.buildNewText();
12930 this.textProperty._isFirstFrame = false;
12931 this.textProperty._mdf = false;
12932 }
12933 };
12934
12935 var emptyShapeData = {
12936 shapes: []
12937 };
12938 function SVGTextLottieElement(data, globalData, comp) {
12939 this.textSpans = [];
12940 this.renderType = 'svg';
12941 this.initElement(data, globalData, comp);
12942 }
12943 extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);
12944 SVGTextLottieElement.prototype.createContent = function () {
12945 if (this.data.singleShape && !this.globalData.fontManager.chars) {
12946 this.textContainer = createNS('text');
12947 }
12948 };
12949 SVGTextLottieElement.prototype.buildTextContents = function (textArray) {
12950 var i = 0;
12951 var len = textArray.length;
12952 var textContents = [];
12953 var currentTextContent = '';
12954 while (i < len) {
12955 if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {
12956 textContents.push(currentTextContent);
12957 currentTextContent = '';
12958 } else {
12959 currentTextContent += textArray[i];
12960 }
12961 i += 1;
12962 }
12963 textContents.push(currentTextContent);
12964 return textContents;
12965 };
12966 SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {
12967 // data should probably be cloned to apply scale separately to each instance of a text on different layers
12968 // but since text internal content gets only rendered once and then it's never rerendered,
12969 // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.
12970 // Avoiding cloning is preferred since cloning each character shape data is expensive
12971 if (data.shapes && data.shapes.length) {
12972 var shape = data.shapes[0];
12973 if (shape.it) {
12974 var shapeItem = shape.it[shape.it.length - 1];
12975 if (shapeItem.s) {
12976 shapeItem.s.k[0] = scale;
12977 shapeItem.s.k[1] = scale;
12978 }
12979 }
12980 }
12981 return data;
12982 };
12983 SVGTextLottieElement.prototype.buildNewText = function () {
12984 this.addDynamicProperty(this);
12985 var i;
12986 var len;
12987 var documentData = this.textProperty.currentData;
12988 this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);
12989 if (documentData.fc) {
12990 this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));
12991 } else {
12992 this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');
12993 }
12994 if (documentData.sc) {
12995 this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));
12996 this.layerElement.setAttribute('stroke-width', documentData.sw);
12997 }
12998 this.layerElement.setAttribute('font-size', documentData.finalSize);
12999 var fontData = this.globalData.fontManager.getFontByName(documentData.f);
13000 if (fontData.fClass) {
13001 this.layerElement.setAttribute('class', fontData.fClass);
13002 } else {
13003 this.layerElement.setAttribute('font-family', fontData.fFamily);
13004 var fWeight = documentData.fWeight;
13005 var fStyle = documentData.fStyle;
13006 this.layerElement.setAttribute('font-style', fStyle);
13007 this.layerElement.setAttribute('font-weight', fWeight);
13008 }
13009 this.layerElement.setAttribute('aria-label', documentData.t);
13010 var letters = documentData.l || [];
13011 var usesGlyphs = !!this.globalData.fontManager.chars;
13012 len = letters.length;
13013 var tSpan;
13014 var matrixHelper = this.mHelper;
13015 var shapeStr = '';
13016 var singleShape = this.data.singleShape;
13017 var xPos = 0;
13018 var yPos = 0;
13019 var firstLine = true;
13020 var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;
13021 if (singleShape && !usesGlyphs && !documentData.sz) {
13022 var tElement = this.textContainer;
13023 var justify = 'start';
13024 switch (documentData.j) {
13025 case 1:
13026 justify = 'end';
13027 break;
13028 case 2:
13029 justify = 'middle';
13030 break;
13031 default:
13032 justify = 'start';
13033 break;
13034 }
13035 tElement.setAttribute('text-anchor', justify);
13036 tElement.setAttribute('letter-spacing', trackingOffset);
13037 var textContent = this.buildTextContents(documentData.finalText);
13038 len = textContent.length;
13039 yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;
13040 for (i = 0; i < len; i += 1) {
13041 tSpan = this.textSpans[i].span || createNS('tspan');
13042 tSpan.textContent = textContent[i];
13043 tSpan.setAttribute('x', 0);
13044 tSpan.setAttribute('y', yPos);
13045 tSpan.style.display = 'inherit';
13046 tElement.appendChild(tSpan);
13047 if (!this.textSpans[i]) {
13048 this.textSpans[i] = {
13049 span: null,
13050 glyph: null
13051 };
13052 }
13053 this.textSpans[i].span = tSpan;
13054 yPos += documentData.finalLineHeight;
13055 }
13056 this.layerElement.appendChild(tElement);
13057 } else {
13058 var cachedSpansLength = this.textSpans.length;
13059 var charData;
13060 for (i = 0; i < len; i += 1) {
13061 if (!this.textSpans[i]) {
13062 this.textSpans[i] = {
13063 span: null,
13064 childSpan: null,
13065 glyph: null
13066 };
13067 }
13068 if (!usesGlyphs || !singleShape || i === 0) {
13069 tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');
13070 if (cachedSpansLength <= i) {
13071 tSpan.setAttribute('stroke-linecap', 'butt');
13072 tSpan.setAttribute('stroke-linejoin', 'round');
13073 tSpan.setAttribute('stroke-miterlimit', '4');
13074 this.textSpans[i].span = tSpan;
13075 if (usesGlyphs) {
13076 var childSpan = createNS('g');
13077 tSpan.appendChild(childSpan);
13078 this.textSpans[i].childSpan = childSpan;
13079 }
13080 this.textSpans[i].span = tSpan;
13081 this.layerElement.appendChild(tSpan);
13082 }
13083 tSpan.style.display = 'inherit';
13084 }
13085 matrixHelper.reset();
13086 if (singleShape) {
13087 if (letters[i].n) {
13088 xPos = -trackingOffset;
13089 yPos += documentData.yOffset;
13090 yPos += firstLine ? 1 : 0;
13091 firstLine = false;
13092 }
13093 this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);
13094 xPos += letters[i].l || 0;
13095 // xPos += letters[i].val === ' ' ? 0 : trackingOffset;
13096 xPos += trackingOffset;
13097 }
13098 if (usesGlyphs) {
13099 charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);
13100 var glyphElement;
13101 // t === 1 means the character has been replaced with an animated shaped
13102 if (charData.t === 1) {
13103 glyphElement = new SVGCompElement(charData.data, this.globalData, this);
13104 } else {
13105 var data = emptyShapeData;
13106 if (charData.data && charData.data.shapes) {
13107 data = this.buildShapeData(charData.data, documentData.finalSize);
13108 }
13109 glyphElement = new SVGShapeElement(data, this.globalData, this);
13110 }
13111 if (this.textSpans[i].glyph) {
13112 var glyph = this.textSpans[i].glyph;
13113 this.textSpans[i].childSpan.removeChild(glyph.layerElement);
13114 glyph.destroy();
13115 }
13116 this.textSpans[i].glyph = glyphElement;
13117 glyphElement._debug = true;
13118 glyphElement.prepareFrame(0);
13119 glyphElement.renderFrame();
13120 this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);
13121 // when using animated shapes, the layer will be scaled instead of replacing the internal scale
13122 // this might have issues with strokes and might need a different solution
13123 if (charData.t === 1) {
13124 this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');
13125 }
13126 } else {
13127 if (singleShape) {
13128 tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');
13129 }
13130 tSpan.textContent = letters[i].val;
13131 tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
13132 }
13133 //
13134 }
13135 if (singleShape && tSpan) {
13136 tSpan.setAttribute('d', shapeStr);
13137 }
13138 }
13139 while (i < this.textSpans.length) {
13140 this.textSpans[i].span.style.display = 'none';
13141 i += 1;
13142 }
13143 this._sizeChanged = true;
13144 };
13145 SVGTextLottieElement.prototype.sourceRectAtTime = function () {
13146 this.prepareFrame(this.comp.renderedFrame - this.data.st);
13147 this.renderInnerContent();
13148 if (this._sizeChanged) {
13149 this._sizeChanged = false;
13150 var textBox = this.layerElement.getBBox();
13151 this.bbox = {
13152 top: textBox.y,
13153 left: textBox.x,
13154 width: textBox.width,
13155 height: textBox.height
13156 };
13157 }
13158 return this.bbox;
13159 };
13160 SVGTextLottieElement.prototype.getValue = function () {
13161 var i;
13162 var len = this.textSpans.length;
13163 var glyphElement;
13164 this.renderedFrame = this.comp.renderedFrame;
13165 for (i = 0; i < len; i += 1) {
13166 glyphElement = this.textSpans[i].glyph;
13167 if (glyphElement) {
13168 glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);
13169 if (glyphElement._mdf) {
13170 this._mdf = true;
13171 }
13172 }
13173 }
13174 };
13175 SVGTextLottieElement.prototype.renderInnerContent = function () {
13176 this.validateText();
13177 if (!this.data.singleShape || this._mdf) {
13178 this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);
13179 if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {
13180 this._sizeChanged = true;
13181 var i;
13182 var len;
13183 var renderedLetters = this.textAnimator.renderedLetters;
13184 var letters = this.textProperty.currentData.l;
13185 len = letters.length;
13186 var renderedLetter;
13187 var textSpan;
13188 var glyphElement;
13189 for (i = 0; i < len; i += 1) {
13190 if (!letters[i].n) {
13191 renderedLetter = renderedLetters[i];
13192 textSpan = this.textSpans[i].span;
13193 glyphElement = this.textSpans[i].glyph;
13194 if (glyphElement) {
13195 glyphElement.renderFrame();
13196 }
13197 if (renderedLetter._mdf.m) {
13198 textSpan.setAttribute('transform', renderedLetter.m);
13199 }
13200 if (renderedLetter._mdf.o) {
13201 textSpan.setAttribute('opacity', renderedLetter.o);
13202 }
13203 if (renderedLetter._mdf.sw) {
13204 textSpan.setAttribute('stroke-width', renderedLetter.sw);
13205 }
13206 if (renderedLetter._mdf.sc) {
13207 textSpan.setAttribute('stroke', renderedLetter.sc);
13208 }
13209 if (renderedLetter._mdf.fc) {
13210 textSpan.setAttribute('fill', renderedLetter.fc);
13211 }
13212 }
13213 }
13214 }
13215 }
13216 };
13217
13218 function ISolidElement(data, globalData, comp) {
13219 this.initElement(data, globalData, comp);
13220 }
13221 extendPrototype([IImageElement], ISolidElement);
13222 ISolidElement.prototype.createContent = function () {
13223 var rect = createNS('rect');
13224 /// /rect.style.width = this.data.sw;
13225 /// /rect.style.height = this.data.sh;
13226 /// /rect.style.fill = this.data.sc;
13227 rect.setAttribute('width', this.data.sw);
13228 rect.setAttribute('height', this.data.sh);
13229 rect.setAttribute('fill', this.data.sc);
13230 this.layerElement.appendChild(rect);
13231 };
13232
13233 function NullElement(data, globalData, comp) {
13234 this.initFrame();
13235 this.initBaseData(data, globalData, comp);
13236 this.initFrame();
13237 this.initTransform(data, globalData, comp);
13238 this.initHierarchy();
13239 }
13240 NullElement.prototype.prepareFrame = function (num) {
13241 this.prepareProperties(num, true);
13242 };
13243 NullElement.prototype.renderFrame = function () {};
13244 NullElement.prototype.getBaseElement = function () {
13245 return null;
13246 };
13247 NullElement.prototype.destroy = function () {};
13248 NullElement.prototype.sourceRectAtTime = function () {};
13249 NullElement.prototype.hide = function () {};
13250 extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);
13251
13252 function SVGRendererBase() {}
13253 extendPrototype([BaseRenderer], SVGRendererBase);
13254 SVGRendererBase.prototype.createNull = function (data) {
13255 return new NullElement(data, this.globalData, this);
13256 };
13257 SVGRendererBase.prototype.createShape = function (data) {
13258 return new SVGShapeElement(data, this.globalData, this);
13259 };
13260 SVGRendererBase.prototype.createText = function (data) {
13261 return new SVGTextLottieElement(data, this.globalData, this);
13262 };
13263 SVGRendererBase.prototype.createImage = function (data) {
13264 return new IImageElement(data, this.globalData, this);
13265 };
13266 SVGRendererBase.prototype.createSolid = function (data) {
13267 return new ISolidElement(data, this.globalData, this);
13268 };
13269 SVGRendererBase.prototype.configAnimation = function (animData) {
13270 this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
13271 this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
13272 if (this.renderConfig.viewBoxSize) {
13273 this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);
13274 } else {
13275 this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);
13276 }
13277 if (!this.renderConfig.viewBoxOnly) {
13278 this.svgElement.setAttribute('width', animData.w);
13279 this.svgElement.setAttribute('height', animData.h);
13280 this.svgElement.style.width = '100%';
13281 this.svgElement.style.height = '100%';
13282 this.svgElement.style.transform = 'translate3d(0,0,0)';
13283 this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;
13284 }
13285 if (this.renderConfig.width) {
13286 this.svgElement.setAttribute('width', this.renderConfig.width);
13287 }
13288 if (this.renderConfig.height) {
13289 this.svgElement.setAttribute('height', this.renderConfig.height);
13290 }
13291 if (this.renderConfig.className) {
13292 this.svgElement.setAttribute('class', this.renderConfig.className);
13293 }
13294 if (this.renderConfig.id) {
13295 this.svgElement.setAttribute('id', this.renderConfig.id);
13296 }
13297 if (this.renderConfig.focusable !== undefined) {
13298 this.svgElement.setAttribute('focusable', this.renderConfig.focusable);
13299 }
13300 this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);
13301 // this.layerElement.style.transform = 'translate3d(0,0,0)';
13302 // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = "0px 0px 0px";
13303 this.animationItem.wrapper.appendChild(this.svgElement);
13304 // Mask animation
13305 var defs = this.globalData.defs;
13306 this.setupGlobalData(animData, defs);
13307 this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;
13308 this.data = animData;
13309 var maskElement = createNS('clipPath');
13310 var rect = createNS('rect');
13311 rect.setAttribute('width', animData.w);
13312 rect.setAttribute('height', animData.h);
13313 rect.setAttribute('x', 0);
13314 rect.setAttribute('y', 0);
13315 var maskId = createElementID();
13316 maskElement.setAttribute('id', maskId);
13317 maskElement.appendChild(rect);
13318 this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');
13319 defs.appendChild(maskElement);
13320 this.layers = animData.layers;
13321 this.elements = createSizedArray(animData.layers.length);
13322 };
13323 SVGRendererBase.prototype.destroy = function () {
13324 if (this.animationItem.wrapper) {
13325 this.animationItem.wrapper.innerText = '';
13326 }
13327 this.layerElement = null;
13328 this.globalData.defs = null;
13329 var i;
13330 var len = this.layers ? this.layers.length : 0;
13331 for (i = 0; i < len; i += 1) {
13332 if (this.elements[i] && this.elements[i].destroy) {
13333 this.elements[i].destroy();
13334 }
13335 }
13336 this.elements.length = 0;
13337 this.destroyed = true;
13338 this.animationItem = null;
13339 };
13340 SVGRendererBase.prototype.updateContainerSize = function () {};
13341 SVGRendererBase.prototype.findIndexByInd = function (ind) {
13342 var i = 0;
13343 var len = this.layers.length;
13344 for (i = 0; i < len; i += 1) {
13345 if (this.layers[i].ind === ind) {
13346 return i;
13347 }
13348 }
13349 return -1;
13350 };
13351 SVGRendererBase.prototype.buildItem = function (pos) {
13352 var elements = this.elements;
13353 if (elements[pos] || this.layers[pos].ty === 99) {
13354 return;
13355 }
13356 elements[pos] = true;
13357 var element = this.createItem(this.layers[pos]);
13358 elements[pos] = element;
13359 if (getExpressionsPlugin()) {
13360 if (this.layers[pos].ty === 0) {
13361 this.globalData.projectInterface.registerComposition(element);
13362 }
13363 element.initExpressions();
13364 }
13365 this.appendElementInPos(element, pos);
13366 if (this.layers[pos].tt) {
13367 var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;
13368 if (elementIndex === -1) {
13369 return;
13370 }
13371 if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {
13372 this.buildItem(elementIndex);
13373 this.addPendingElement(element);
13374 } else {
13375 var matteElement = elements[elementIndex];
13376 var matteMask = matteElement.getMatte(this.layers[pos].tt);
13377 element.setMatte(matteMask);
13378 }
13379 }
13380 };
13381 SVGRendererBase.prototype.checkPendingElements = function () {
13382 while (this.pendingElements.length) {
13383 var element = this.pendingElements.pop();
13384 element.checkParenting();
13385 if (element.data.tt) {
13386 var i = 0;
13387 var len = this.elements.length;
13388 while (i < len) {
13389 if (this.elements[i] === element) {
13390 var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;
13391 var matteElement = this.elements[elementIndex];
13392 var matteMask = matteElement.getMatte(this.layers[i].tt);
13393 element.setMatte(matteMask);
13394 break;
13395 }
13396 i += 1;
13397 }
13398 }
13399 }
13400 };
13401 SVGRendererBase.prototype.renderFrame = function (num) {
13402 if (this.renderedFrame === num || this.destroyed) {
13403 return;
13404 }
13405 if (num === null) {
13406 num = this.renderedFrame;
13407 } else {
13408 this.renderedFrame = num;
13409 }
13410 // console.log('-------');
13411 // console.log('FRAME ',num);
13412 this.globalData.frameNum = num;
13413 this.globalData.frameId += 1;
13414 this.globalData.projectInterface.currentFrame = num;
13415 this.globalData._mdf = false;
13416 var i;
13417 var len = this.layers.length;
13418 if (!this.completeLayers) {
13419 this.checkLayers(num);
13420 }
13421 for (i = len - 1; i >= 0; i -= 1) {
13422 if (this.completeLayers || this.elements[i]) {
13423 this.elements[i].prepareFrame(num - this.layers[i].st);
13424 }
13425 }
13426 if (this.globalData._mdf) {
13427 for (i = 0; i < len; i += 1) {
13428 if (this.completeLayers || this.elements[i]) {
13429 this.elements[i].renderFrame();
13430 }
13431 }
13432 }
13433 };
13434 SVGRendererBase.prototype.appendElementInPos = function (element, pos) {
13435 var newElement = element.getBaseElement();
13436 if (!newElement) {
13437 return;
13438 }
13439 var i = 0;
13440 var nextElement;
13441 while (i < pos) {
13442 if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {
13443 nextElement = this.elements[i].getBaseElement();
13444 }
13445 i += 1;
13446 }
13447 if (nextElement) {
13448 this.layerElement.insertBefore(newElement, nextElement);
13449 } else {
13450 this.layerElement.appendChild(newElement);
13451 }
13452 };
13453 SVGRendererBase.prototype.hide = function () {
13454 this.layerElement.style.display = 'none';
13455 };
13456 SVGRendererBase.prototype.show = function () {
13457 this.layerElement.style.display = 'block';
13458 };
13459
13460 function ICompElement() {}
13461 extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);
13462 ICompElement.prototype.initElement = function (data, globalData, comp) {
13463 this.initFrame();
13464 this.initBaseData(data, globalData, comp);
13465 this.initTransform(data, globalData, comp);
13466 this.initRenderable();
13467 this.initHierarchy();
13468 this.initRendererElement();
13469 this.createContainerElements();
13470 this.createRenderableComponents();
13471 if (this.data.xt || !globalData.progressiveLoad) {
13472 this.buildAllItems();
13473 }
13474 this.hide();
13475 };
13476
13477 /* ICompElement.prototype.hide = function(){
13478 if(!this.hidden){
13479 this.hideElement();
13480 var i,len = this.elements.length;
13481 for( i = 0; i < len; i+=1 ){
13482 if(this.elements[i]){
13483 this.elements[i].hide();
13484 }
13485 }
13486 }
13487 }; */
13488
13489 ICompElement.prototype.prepareFrame = function (num) {
13490 this._mdf = false;
13491 this.prepareRenderableFrame(num);
13492 this.prepareProperties(num, this.isInRange);
13493 if (!this.isInRange && !this.data.xt) {
13494 return;
13495 }
13496 if (!this.tm._placeholder) {
13497 var timeRemapped = this.tm.v;
13498 if (timeRemapped === this.data.op) {
13499 timeRemapped = this.data.op - 1;
13500 }
13501 this.renderedFrame = timeRemapped;
13502 } else {
13503 this.renderedFrame = num / this.data.sr;
13504 }
13505 var i;
13506 var len = this.elements.length;
13507 if (!this.completeLayers) {
13508 this.checkLayers(this.renderedFrame);
13509 }
13510 // This iteration needs to be backwards because of how expressions connect between each other
13511 for (i = len - 1; i >= 0; i -= 1) {
13512 if (this.completeLayers || this.elements[i]) {
13513 this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);
13514 if (this.elements[i]._mdf) {
13515 this._mdf = true;
13516 }
13517 }
13518 }
13519 };
13520 ICompElement.prototype.renderInnerContent = function () {
13521 var i;
13522 var len = this.layers.length;
13523 for (i = 0; i < len; i += 1) {
13524 if (this.completeLayers || this.elements[i]) {
13525 this.elements[i].renderFrame();
13526 }
13527 }
13528 };
13529 ICompElement.prototype.setElements = function (elems) {
13530 this.elements = elems;
13531 };
13532 ICompElement.prototype.getElements = function () {
13533 return this.elements;
13534 };
13535 ICompElement.prototype.destroyElements = function () {
13536 var i;
13537 var len = this.layers.length;
13538 for (i = 0; i < len; i += 1) {
13539 if (this.elements[i]) {
13540 this.elements[i].destroy();
13541 }
13542 }
13543 };
13544 ICompElement.prototype.destroy = function () {
13545 this.destroyElements();
13546 this.destroyBaseElement();
13547 };
13548
13549 function SVGCompElement(data, globalData, comp) {
13550 this.layers = data.layers;
13551 this.supports3d = true;
13552 this.completeLayers = false;
13553 this.pendingElements = [];
13554 this.elements = this.layers ? createSizedArray(this.layers.length) : [];
13555 this.initElement(data, globalData, comp);
13556 this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
13557 _placeholder: true
13558 };
13559 }
13560 extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);
13561 SVGCompElement.prototype.createComp = function (data) {
13562 return new SVGCompElement(data, this.globalData, this);
13563 };
13564
13565 function SVGRenderer(animationItem, config) {
13566 this.animationItem = animationItem;
13567 this.layers = null;
13568 this.renderedFrame = -1;
13569 this.svgElement = createNS('svg');
13570 var ariaLabel = '';
13571 if (config && config.title) {
13572 var titleElement = createNS('title');
13573 var titleId = createElementID();
13574 titleElement.setAttribute('id', titleId);
13575 titleElement.textContent = config.title;
13576 this.svgElement.appendChild(titleElement);
13577 ariaLabel += titleId;
13578 }
13579 if (config && config.description) {
13580 var descElement = createNS('desc');
13581 var descId = createElementID();
13582 descElement.setAttribute('id', descId);
13583 descElement.textContent = config.description;
13584 this.svgElement.appendChild(descElement);
13585 ariaLabel += ' ' + descId;
13586 }
13587 if (ariaLabel) {
13588 this.svgElement.setAttribute('aria-labelledby', ariaLabel);
13589 }
13590 var defs = createNS('defs');
13591 this.svgElement.appendChild(defs);
13592 var maskElement = createNS('g');
13593 this.svgElement.appendChild(maskElement);
13594 this.layerElement = maskElement;
13595 this.renderConfig = {
13596 preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',
13597 imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',
13598 contentVisibility: config && config.contentVisibility || 'visible',
13599 progressiveLoad: config && config.progressiveLoad || false,
13600 hideOnTransparent: !(config && config.hideOnTransparent === false),
13601 viewBoxOnly: config && config.viewBoxOnly || false,
13602 viewBoxSize: config && config.viewBoxSize || false,
13603 className: config && config.className || '',
13604 id: config && config.id || '',
13605 focusable: config && config.focusable,
13606 filterSize: {
13607 width: config && config.filterSize && config.filterSize.width || '100%',
13608 height: config && config.filterSize && config.filterSize.height || '100%',
13609 x: config && config.filterSize && config.filterSize.x || '0%',
13610 y: config && config.filterSize && config.filterSize.y || '0%'
13611 },
13612 width: config && config.width,
13613 height: config && config.height,
13614 runExpressions: !config || config.runExpressions === undefined || config.runExpressions
13615 };
13616 this.globalData = {
13617 _mdf: false,
13618 frameNum: -1,
13619 defs: defs,
13620 renderConfig: this.renderConfig
13621 };
13622 this.elements = [];
13623 this.pendingElements = [];
13624 this.destroyed = false;
13625 this.rendererType = 'svg';
13626 }
13627 extendPrototype([SVGRendererBase], SVGRenderer);
13628 SVGRenderer.prototype.createComp = function (data) {
13629 return new SVGCompElement(data, this.globalData, this);
13630 };
13631
13632 function ShapeTransformManager() {
13633 this.sequences = {};
13634 this.sequenceList = [];
13635 this.transform_key_count = 0;
13636 }
13637 ShapeTransformManager.prototype = {
13638 addTransformSequence: function addTransformSequence(transforms) {
13639 var i;
13640 var len = transforms.length;
13641 var key = '_';
13642 for (i = 0; i < len; i += 1) {
13643 key += transforms[i].transform.key + '_';
13644 }
13645 var sequence = this.sequences[key];
13646 if (!sequence) {
13647 sequence = {
13648 transforms: [].concat(transforms),
13649 finalTransform: new Matrix(),
13650 _mdf: false
13651 };
13652 this.sequences[key] = sequence;
13653 this.sequenceList.push(sequence);
13654 }
13655 return sequence;
13656 },
13657 processSequence: function processSequence(sequence, isFirstFrame) {
13658 var i = 0;
13659 var len = sequence.transforms.length;
13660 var _mdf = isFirstFrame;
13661 while (i < len && !isFirstFrame) {
13662 if (sequence.transforms[i].transform.mProps._mdf) {
13663 _mdf = true;
13664 break;
13665 }
13666 i += 1;
13667 }
13668 if (_mdf) {
13669 sequence.finalTransform.reset();
13670 for (i = len - 1; i >= 0; i -= 1) {
13671 sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);
13672 }
13673 }
13674 sequence._mdf = _mdf;
13675 },
13676 processSequences: function processSequences(isFirstFrame) {
13677 var i;
13678 var len = this.sequenceList.length;
13679 for (i = 0; i < len; i += 1) {
13680 this.processSequence(this.sequenceList[i], isFirstFrame);
13681 }
13682 },
13683 getNewKey: function getNewKey() {
13684 this.transform_key_count += 1;
13685 return '_' + this.transform_key_count;
13686 }
13687 };
13688
13689 var lumaLoader = function lumaLoader() {
13690 var id = '__lottie_element_luma_buffer';
13691 var lumaBuffer = null;
13692 var lumaBufferCtx = null;
13693 var svg = null;
13694
13695 // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.
13696 // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.
13697 // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.
13698 // Naming it solution 2 to mark the extra comment lines.
13699 /*
13700 var svgString = [
13701 '<svg xmlns="http://www.w3.org/2000/svg">',
13702 '<filter id="' + id + '">',
13703 '<feColorMatrix type="matrix" color-interpolation-filters="sRGB" values="',
13704 '0.3, 0.3, 0.3, 0, 0, ',
13705 '0.3, 0.3, 0.3, 0, 0, ',
13706 '0.3, 0.3, 0.3, 0, 0, ',
13707 '0.3, 0.3, 0.3, 0, 0',
13708 '"/>',
13709 '</filter>',
13710 '</svg>',
13711 ].join('');
13712 var blob = new Blob([svgString], { type: 'image/svg+xml' });
13713 var url = URL.createObjectURL(blob);
13714 */
13715
13716 function createLumaSvgFilter() {
13717 var _svg = createNS('svg');
13718 var fil = createNS('filter');
13719 var matrix = createNS('feColorMatrix');
13720 fil.setAttribute('id', id);
13721 matrix.setAttribute('type', 'matrix');
13722 matrix.setAttribute('color-interpolation-filters', 'sRGB');
13723 matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');
13724 fil.appendChild(matrix);
13725 _svg.appendChild(fil);
13726 _svg.setAttribute('id', id + '_svg');
13727 if (featureSupport.svgLumaHidden) {
13728 _svg.style.display = 'none';
13729 }
13730 return _svg;
13731 }
13732 function loadLuma() {
13733 if (!lumaBuffer) {
13734 svg = createLumaSvgFilter();
13735 document.body.appendChild(svg);
13736 lumaBuffer = createTag('canvas');
13737 lumaBufferCtx = lumaBuffer.getContext('2d');
13738 // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2
13739 lumaBufferCtx.filter = 'url(#' + id + ')';
13740 lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';
13741 lumaBufferCtx.fillRect(0, 0, 1, 1);
13742 }
13743 }
13744 function getLuma(canvas) {
13745 if (!lumaBuffer) {
13746 loadLuma();
13747 }
13748 lumaBuffer.width = canvas.width;
13749 lumaBuffer.height = canvas.height;
13750 // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2
13751 lumaBufferCtx.filter = 'url(#' + id + ')';
13752 return lumaBuffer;
13753 }
13754 return {
13755 load: loadLuma,
13756 get: getLuma
13757 };
13758 };
13759 function createCanvas(width, height) {
13760 if (featureSupport.offscreenCanvas) {
13761 return new OffscreenCanvas(width, height);
13762 }
13763 var canvas = createTag('canvas');
13764 canvas.width = width;
13765 canvas.height = height;
13766 return canvas;
13767 }
13768 var assetLoader = function () {
13769 return {
13770 loadLumaCanvas: lumaLoader.load,
13771 getLumaCanvas: lumaLoader.get,
13772 createCanvas: createCanvas
13773 };
13774 }();
13775
13776 var registeredEffects = {};
13777 function CVEffects(elem) {
13778 var i;
13779 var len = elem.data.ef ? elem.data.ef.length : 0;
13780 this.filters = [];
13781 var filterManager;
13782 for (i = 0; i < len; i += 1) {
13783 filterManager = null;
13784 var type = elem.data.ef[i].ty;
13785 if (registeredEffects[type]) {
13786 var Effect = registeredEffects[type].effect;
13787 filterManager = new Effect(elem.effectsManager.effectElements[i], elem);
13788 }
13789 if (filterManager) {
13790 this.filters.push(filterManager);
13791 }
13792 }
13793 if (this.filters.length) {
13794 elem.addRenderableComponent(this);
13795 }
13796 }
13797 CVEffects.prototype.renderFrame = function (_isFirstFrame) {
13798 var i;
13799 var len = this.filters.length;
13800 for (i = 0; i < len; i += 1) {
13801 this.filters[i].renderFrame(_isFirstFrame);
13802 }
13803 };
13804 CVEffects.prototype.getEffects = function (type) {
13805 var i;
13806 var len = this.filters.length;
13807 var effects = [];
13808 for (i = 0; i < len; i += 1) {
13809 if (this.filters[i].type === type) {
13810 effects.push(this.filters[i]);
13811 }
13812 }
13813 return effects;
13814 };
13815 function registerEffect(id, effect) {
13816 registeredEffects[id] = {
13817 effect: effect
13818 };
13819 }
13820
13821 function CVMaskElement(data, element) {
13822 this.data = data;
13823 this.element = element;
13824 this.masksProperties = this.data.masksProperties || [];
13825 this.viewData = createSizedArray(this.masksProperties.length);
13826 var i;
13827 var len = this.masksProperties.length;
13828 var hasMasks = false;
13829 for (i = 0; i < len; i += 1) {
13830 if (this.masksProperties[i].mode !== 'n') {
13831 hasMasks = true;
13832 }
13833 this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);
13834 }
13835 this.hasMasks = hasMasks;
13836 if (hasMasks) {
13837 this.element.addRenderableComponent(this);
13838 }
13839 }
13840 CVMaskElement.prototype.renderFrame = function () {
13841 if (!this.hasMasks) {
13842 return;
13843 }
13844 var transform = this.element.finalTransform.mat;
13845 var ctx = this.element.canvasContext;
13846 var i;
13847 var len = this.masksProperties.length;
13848 var pt;
13849 var pts;
13850 var data;
13851 ctx.beginPath();
13852 for (i = 0; i < len; i += 1) {
13853 if (this.masksProperties[i].mode !== 'n') {
13854 if (this.masksProperties[i].inv) {
13855 ctx.moveTo(0, 0);
13856 ctx.lineTo(this.element.globalData.compSize.w, 0);
13857 ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);
13858 ctx.lineTo(0, this.element.globalData.compSize.h);
13859 ctx.lineTo(0, 0);
13860 }
13861 data = this.viewData[i].v;
13862 pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);
13863 ctx.moveTo(pt[0], pt[1]);
13864 var j;
13865 var jLen = data._length;
13866 for (j = 1; j < jLen; j += 1) {
13867 pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);
13868 ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);
13869 }
13870 pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);
13871 ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);
13872 }
13873 }
13874 this.element.globalData.renderer.save(true);
13875 ctx.clip();
13876 };
13877 CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;
13878 CVMaskElement.prototype.destroy = function () {
13879 this.element = null;
13880 };
13881
13882 function CVBaseElement() {}
13883 var operationsMap = {
13884 1: 'source-in',
13885 2: 'source-out',
13886 3: 'source-in',
13887 4: 'source-out'
13888 };
13889 CVBaseElement.prototype = {
13890 createElements: function createElements() {},
13891 initRendererElement: function initRendererElement() {},
13892 createContainerElements: function createContainerElements() {
13893 // If the layer is masked we will use two buffers to store each different states of the drawing
13894 // This solution is not ideal for several reason. But unfortunately, because of the recursive
13895 // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.
13896 // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer
13897 // It might be challenging because the layer most likely is transformed in some way
13898 if (this.data.tt >= 1) {
13899 this.buffers = [];
13900 var canvasContext = this.globalData.canvasContext;
13901 var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);
13902 this.buffers.push(bufferCanvas);
13903 var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);
13904 this.buffers.push(bufferCanvas2);
13905 if (this.data.tt >= 3 && !document._isProxy) {
13906 assetLoader.loadLumaCanvas();
13907 }
13908 }
13909 this.canvasContext = this.globalData.canvasContext;
13910 this.transformCanvas = this.globalData.transformCanvas;
13911 this.renderableEffectsManager = new CVEffects(this);
13912 this.searchEffectTransforms();
13913 },
13914 createContent: function createContent() {},
13915 setBlendMode: function setBlendMode() {
13916 var globalData = this.globalData;
13917 if (globalData.blendMode !== this.data.bm) {
13918 globalData.blendMode = this.data.bm;
13919 var blendModeValue = getBlendMode(this.data.bm);
13920 globalData.canvasContext.globalCompositeOperation = blendModeValue;
13921 }
13922 },
13923 createRenderableComponents: function createRenderableComponents() {
13924 this.maskManager = new CVMaskElement(this.data, this);
13925 this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);
13926 },
13927 hideElement: function hideElement() {
13928 if (!this.hidden && (!this.isInRange || this.isTransparent)) {
13929 this.hidden = true;
13930 }
13931 },
13932 showElement: function showElement() {
13933 if (this.isInRange && !this.isTransparent) {
13934 this.hidden = false;
13935 this._isFirstFrame = true;
13936 this.maskManager._isFirstFrame = true;
13937 }
13938 },
13939 clearCanvas: function clearCanvas(canvasContext) {
13940 canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);
13941 },
13942 prepareLayer: function prepareLayer() {
13943 if (this.data.tt >= 1) {
13944 var buffer = this.buffers[0];
13945 var bufferCtx = buffer.getContext('2d');
13946 this.clearCanvas(bufferCtx);
13947 // on the first buffer we store the current state of the global drawing
13948 bufferCtx.drawImage(this.canvasContext.canvas, 0, 0);
13949 // The next four lines are to clear the canvas
13950 // TODO: Check if there is a way to clear the canvas without resetting the transform
13951 this.currentTransform = this.canvasContext.getTransform();
13952 this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);
13953 this.clearCanvas(this.canvasContext);
13954 this.canvasContext.setTransform(this.currentTransform);
13955 }
13956 },
13957 exitLayer: function exitLayer() {
13958 if (this.data.tt >= 1) {
13959 var buffer = this.buffers[1];
13960 // On the second buffer we store the current state of the global drawing
13961 // that only contains the content of this layer
13962 // (if it is a composition, it also includes the nested layers)
13963 var bufferCtx = buffer.getContext('2d');
13964 this.clearCanvas(bufferCtx);
13965 bufferCtx.drawImage(this.canvasContext.canvas, 0, 0);
13966 // We clear the canvas again
13967 this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);
13968 this.clearCanvas(this.canvasContext);
13969 this.canvasContext.setTransform(this.currentTransform);
13970 // We draw the mask
13971 var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);
13972 mask.renderFrame(true);
13973 // We draw the second buffer (that contains the content of this layer)
13974 this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);
13975
13976 // If the mask is a Luma matte, we need to do two extra painting operations
13977 // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error
13978 if (this.data.tt >= 3 && !document._isProxy) {
13979 // We copy the painted mask to a buffer that has a color matrix filter applied to it
13980 // that applies the rgb values to the alpha channel
13981 var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);
13982 var lumaBufferCtx = lumaBuffer.getContext('2d');
13983 lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);
13984 this.clearCanvas(this.canvasContext);
13985 // we repaint the context with the mask applied to it
13986 this.canvasContext.drawImage(lumaBuffer, 0, 0);
13987 }
13988 this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];
13989 this.canvasContext.drawImage(buffer, 0, 0);
13990 // We finally draw the first buffer (that contains the content of the global drawing)
13991 // We use destination-over to draw the global drawing below the current layer
13992 this.canvasContext.globalCompositeOperation = 'destination-over';
13993 this.canvasContext.drawImage(this.buffers[0], 0, 0);
13994 this.canvasContext.setTransform(this.currentTransform);
13995 // We reset the globalCompositeOperation to source-over, the standard type of operation
13996 this.canvasContext.globalCompositeOperation = 'source-over';
13997 }
13998 },
13999 renderFrame: function renderFrame(forceRender) {
14000 if (this.hidden || this.data.hd) {
14001 return;
14002 }
14003 if (this.data.td === 1 && !forceRender) {
14004 return;
14005 }
14006 this.renderTransform();
14007 this.renderRenderable();
14008 this.renderLocalTransform();
14009 this.setBlendMode();
14010 var forceRealStack = this.data.ty === 0;
14011 this.prepareLayer();
14012 this.globalData.renderer.save(forceRealStack);
14013 this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);
14014 this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);
14015 this.renderInnerContent();
14016 this.globalData.renderer.restore(forceRealStack);
14017 this.exitLayer();
14018 if (this.maskManager.hasMasks) {
14019 this.globalData.renderer.restore(true);
14020 }
14021 if (this._isFirstFrame) {
14022 this._isFirstFrame = false;
14023 }
14024 },
14025 destroy: function destroy() {
14026 this.canvasContext = null;
14027 this.data = null;
14028 this.globalData = null;
14029 this.maskManager.destroy();
14030 },
14031 mHelper: new Matrix()
14032 };
14033 CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;
14034 CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;
14035
14036 function CVShapeData(element, data, styles, transformsManager) {
14037 this.styledShapes = [];
14038 this.tr = [0, 0, 0, 0, 0, 0];
14039 var ty = 4;
14040 if (data.ty === 'rc') {
14041 ty = 5;
14042 } else if (data.ty === 'el') {
14043 ty = 6;
14044 } else if (data.ty === 'sr') {
14045 ty = 7;
14046 }
14047 this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);
14048 var i;
14049 var len = styles.length;
14050 var styledShape;
14051 for (i = 0; i < len; i += 1) {
14052 if (!styles[i].closed) {
14053 styledShape = {
14054 transforms: transformsManager.addTransformSequence(styles[i].transforms),
14055 trNodes: []
14056 };
14057 this.styledShapes.push(styledShape);
14058 styles[i].elements.push(styledShape);
14059 }
14060 }
14061 }
14062 CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;
14063
14064 function CVShapeElement(data, globalData, comp) {
14065 this.shapes = [];
14066 this.shapesData = data.shapes;
14067 this.stylesList = [];
14068 this.itemsData = [];
14069 this.prevViewData = [];
14070 this.shapeModifiers = [];
14071 this.processedElements = [];
14072 this.transformsManager = new ShapeTransformManager();
14073 this.initElement(data, globalData, comp);
14074 }
14075 extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);
14076 CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;
14077 CVShapeElement.prototype.transformHelper = {
14078 opacity: 1,
14079 _opMdf: false
14080 };
14081 CVShapeElement.prototype.dashResetter = [];
14082 CVShapeElement.prototype.createContent = function () {
14083 this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);
14084 };
14085 CVShapeElement.prototype.createStyleElement = function (data, transforms) {
14086 var styleElem = {
14087 data: data,
14088 type: data.ty,
14089 preTransforms: this.transformsManager.addTransformSequence(transforms),
14090 transforms: [],
14091 elements: [],
14092 closed: data.hd === true
14093 };
14094 var elementData = {};
14095 if (data.ty === 'fl' || data.ty === 'st') {
14096 elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);
14097 if (!elementData.c.k) {
14098 styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';
14099 }
14100 } else if (data.ty === 'gf' || data.ty === 'gs') {
14101 elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);
14102 elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);
14103 elementData.h = PropertyFactory.getProp(this, data.h || {
14104 k: 0
14105 }, 0, 0.01, this);
14106 elementData.a = PropertyFactory.getProp(this, data.a || {
14107 k: 0
14108 }, 0, degToRads, this);
14109 elementData.g = new GradientProperty(this, data.g, this);
14110 }
14111 elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);
14112 if (data.ty === 'st' || data.ty === 'gs') {
14113 styleElem.lc = lineCapEnum[data.lc || 2];
14114 styleElem.lj = lineJoinEnum[data.lj || 2];
14115 if (data.lj == 1) {
14116 // eslint-disable-line eqeqeq
14117 styleElem.ml = data.ml;
14118 }
14119 elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);
14120 if (!elementData.w.k) {
14121 styleElem.wi = elementData.w.v;
14122 }
14123 if (data.d) {
14124 var d = new DashProperty(this, data.d, 'canvas', this);
14125 elementData.d = d;
14126 if (!elementData.d.k) {
14127 styleElem.da = elementData.d.dashArray;
14128 styleElem["do"] = elementData.d.dashoffset[0];
14129 }
14130 }
14131 } else {
14132 styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';
14133 }
14134 this.stylesList.push(styleElem);
14135 elementData.style = styleElem;
14136 return elementData;
14137 };
14138 CVShapeElement.prototype.createGroupElement = function () {
14139 var elementData = {
14140 it: [],
14141 prevViewData: []
14142 };
14143 return elementData;
14144 };
14145 CVShapeElement.prototype.createTransformElement = function (data) {
14146 var elementData = {
14147 transform: {
14148 opacity: 1,
14149 _opMdf: false,
14150 key: this.transformsManager.getNewKey(),
14151 op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),
14152 mProps: TransformPropertyFactory.getTransformProperty(this, data, this)
14153 }
14154 };
14155 return elementData;
14156 };
14157 CVShapeElement.prototype.createShapeElement = function (data) {
14158 var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);
14159 this.shapes.push(elementData);
14160 this.addShapeToModifiers(elementData);
14161 return elementData;
14162 };
14163 CVShapeElement.prototype.reloadShapes = function () {
14164 this._isFirstFrame = true;
14165 var i;
14166 var len = this.itemsData.length;
14167 for (i = 0; i < len; i += 1) {
14168 this.prevViewData[i] = this.itemsData[i];
14169 }
14170 this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);
14171 len = this.dynamicProperties.length;
14172 for (i = 0; i < len; i += 1) {
14173 this.dynamicProperties[i].getValue();
14174 }
14175 this.renderModifiers();
14176 this.transformsManager.processSequences(this._isFirstFrame);
14177 };
14178 CVShapeElement.prototype.addTransformToStyleList = function (transform) {
14179 var i;
14180 var len = this.stylesList.length;
14181 for (i = 0; i < len; i += 1) {
14182 if (!this.stylesList[i].closed) {
14183 this.stylesList[i].transforms.push(transform);
14184 }
14185 }
14186 };
14187 CVShapeElement.prototype.removeTransformFromStyleList = function () {
14188 var i;
14189 var len = this.stylesList.length;
14190 for (i = 0; i < len; i += 1) {
14191 if (!this.stylesList[i].closed) {
14192 this.stylesList[i].transforms.pop();
14193 }
14194 }
14195 };
14196 CVShapeElement.prototype.closeStyles = function (styles) {
14197 var i;
14198 var len = styles.length;
14199 for (i = 0; i < len; i += 1) {
14200 styles[i].closed = true;
14201 }
14202 };
14203 CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {
14204 var i;
14205 var len = arr.length - 1;
14206 var j;
14207 var jLen;
14208 var ownStyles = [];
14209 var ownModifiers = [];
14210 var processedPos;
14211 var modifier;
14212 var currentTransform;
14213 var ownTransforms = [].concat(transforms);
14214 for (i = len; i >= 0; i -= 1) {
14215 processedPos = this.searchProcessedElement(arr[i]);
14216 if (!processedPos) {
14217 arr[i]._shouldRender = shouldRender;
14218 } else {
14219 itemsData[i] = prevViewData[processedPos - 1];
14220 }
14221 if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {
14222 if (!processedPos) {
14223 itemsData[i] = this.createStyleElement(arr[i], ownTransforms);
14224 } else {
14225 itemsData[i].style.closed = false;
14226 }
14227 ownStyles.push(itemsData[i].style);
14228 } else if (arr[i].ty === 'gr') {
14229 if (!processedPos) {
14230 itemsData[i] = this.createGroupElement(arr[i]);
14231 } else {
14232 jLen = itemsData[i].it.length;
14233 for (j = 0; j < jLen; j += 1) {
14234 itemsData[i].prevViewData[j] = itemsData[i].it[j];
14235 }
14236 }
14237 this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);
14238 } else if (arr[i].ty === 'tr') {
14239 if (!processedPos) {
14240 currentTransform = this.createTransformElement(arr[i]);
14241 itemsData[i] = currentTransform;
14242 }
14243 ownTransforms.push(itemsData[i]);
14244 this.addTransformToStyleList(itemsData[i]);
14245 } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {
14246 if (!processedPos) {
14247 itemsData[i] = this.createShapeElement(arr[i]);
14248 }
14249 } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {
14250 if (!processedPos) {
14251 modifier = ShapeModifiers.getModifier(arr[i].ty);
14252 modifier.init(this, arr[i]);
14253 itemsData[i] = modifier;
14254 this.shapeModifiers.push(modifier);
14255 } else {
14256 modifier = itemsData[i];
14257 modifier.closed = false;
14258 }
14259 ownModifiers.push(modifier);
14260 } else if (arr[i].ty === 'rp') {
14261 if (!processedPos) {
14262 modifier = ShapeModifiers.getModifier(arr[i].ty);
14263 itemsData[i] = modifier;
14264 modifier.init(this, arr, i, itemsData);
14265 this.shapeModifiers.push(modifier);
14266 shouldRender = false;
14267 } else {
14268 modifier = itemsData[i];
14269 modifier.closed = true;
14270 }
14271 ownModifiers.push(modifier);
14272 }
14273 this.addProcessedElement(arr[i], i + 1);
14274 }
14275 this.removeTransformFromStyleList();
14276 this.closeStyles(ownStyles);
14277 len = ownModifiers.length;
14278 for (i = 0; i < len; i += 1) {
14279 ownModifiers[i].closed = true;
14280 }
14281 };
14282 CVShapeElement.prototype.renderInnerContent = function () {
14283 this.transformHelper.opacity = 1;
14284 this.transformHelper._opMdf = false;
14285 this.renderModifiers();
14286 this.transformsManager.processSequences(this._isFirstFrame);
14287 this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);
14288 };
14289 CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {
14290 if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {
14291 groupTransform.opacity = parentTransform.opacity;
14292 groupTransform.opacity *= groupTransform.op.v;
14293 groupTransform._opMdf = true;
14294 }
14295 };
14296 CVShapeElement.prototype.drawLayer = function () {
14297 var i;
14298 var len = this.stylesList.length;
14299 var j;
14300 var jLen;
14301 var k;
14302 var kLen;
14303 var elems;
14304 var nodes;
14305 var renderer = this.globalData.renderer;
14306 var ctx = this.globalData.canvasContext;
14307 var type;
14308 var currentStyle;
14309 for (i = 0; i < len; i += 1) {
14310 currentStyle = this.stylesList[i];
14311 type = currentStyle.type;
14312
14313 // Skipping style when
14314 // Stroke width equals 0
14315 // style should not be rendered (extra unused repeaters)
14316 // current opacity equals 0
14317 // global opacity equals 0
14318 if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {
14319 renderer.save();
14320 elems = currentStyle.elements;
14321 if (type === 'st' || type === 'gs') {
14322 renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd);
14323 // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;
14324 renderer.ctxLineWidth(currentStyle.wi);
14325 // ctx.lineWidth = currentStyle.wi;
14326 renderer.ctxLineCap(currentStyle.lc);
14327 // ctx.lineCap = currentStyle.lc;
14328 renderer.ctxLineJoin(currentStyle.lj);
14329 // ctx.lineJoin = currentStyle.lj;
14330 renderer.ctxMiterLimit(currentStyle.ml || 0);
14331 // ctx.miterLimit = currentStyle.ml || 0;
14332 } else {
14333 renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd);
14334 // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;
14335 }
14336 renderer.ctxOpacity(currentStyle.coOp);
14337 if (type !== 'st' && type !== 'gs') {
14338 ctx.beginPath();
14339 }
14340 renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);
14341 jLen = elems.length;
14342 for (j = 0; j < jLen; j += 1) {
14343 if (type === 'st' || type === 'gs') {
14344 ctx.beginPath();
14345 if (currentStyle.da) {
14346 ctx.setLineDash(currentStyle.da);
14347 ctx.lineDashOffset = currentStyle["do"];
14348 }
14349 }
14350 nodes = elems[j].trNodes;
14351 kLen = nodes.length;
14352 for (k = 0; k < kLen; k += 1) {
14353 if (nodes[k].t === 'm') {
14354 ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);
14355 } else if (nodes[k].t === 'c') {
14356 ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);
14357 } else {
14358 ctx.closePath();
14359 }
14360 }
14361 if (type === 'st' || type === 'gs') {
14362 // ctx.stroke();
14363 renderer.ctxStroke();
14364 if (currentStyle.da) {
14365 ctx.setLineDash(this.dashResetter);
14366 }
14367 }
14368 }
14369 if (type !== 'st' && type !== 'gs') {
14370 // ctx.fill(currentStyle.r);
14371 this.globalData.renderer.ctxFill(currentStyle.r);
14372 }
14373 renderer.restore();
14374 }
14375 }
14376 };
14377 CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {
14378 var i;
14379 var len = items.length - 1;
14380 var groupTransform;
14381 groupTransform = parentTransform;
14382 for (i = len; i >= 0; i -= 1) {
14383 if (items[i].ty === 'tr') {
14384 groupTransform = data[i].transform;
14385 this.renderShapeTransform(parentTransform, groupTransform);
14386 } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {
14387 this.renderPath(items[i], data[i]);
14388 } else if (items[i].ty === 'fl') {
14389 this.renderFill(items[i], data[i], groupTransform);
14390 } else if (items[i].ty === 'st') {
14391 this.renderStroke(items[i], data[i], groupTransform);
14392 } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {
14393 this.renderGradientFill(items[i], data[i], groupTransform);
14394 } else if (items[i].ty === 'gr') {
14395 this.renderShape(groupTransform, items[i].it, data[i].it);
14396 } else if (items[i].ty === 'tm') {
14397 //
14398 }
14399 }
14400 if (isMain) {
14401 this.drawLayer();
14402 }
14403 };
14404 CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {
14405 if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {
14406 var shapeNodes = styledShape.trNodes;
14407 var paths = shape.paths;
14408 var i;
14409 var len;
14410 var j;
14411 var jLen = paths._length;
14412 shapeNodes.length = 0;
14413 var groupTransformMat = styledShape.transforms.finalTransform;
14414 for (j = 0; j < jLen; j += 1) {
14415 var pathNodes = paths.shapes[j];
14416 if (pathNodes && pathNodes.v) {
14417 len = pathNodes._length;
14418 for (i = 1; i < len; i += 1) {
14419 if (i === 1) {
14420 shapeNodes.push({
14421 t: 'm',
14422 p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)
14423 });
14424 }
14425 shapeNodes.push({
14426 t: 'c',
14427 pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])
14428 });
14429 }
14430 if (len === 1) {
14431 shapeNodes.push({
14432 t: 'm',
14433 p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)
14434 });
14435 }
14436 if (pathNodes.c && len) {
14437 shapeNodes.push({
14438 t: 'c',
14439 pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])
14440 });
14441 shapeNodes.push({
14442 t: 'z'
14443 });
14444 }
14445 }
14446 }
14447 styledShape.trNodes = shapeNodes;
14448 }
14449 };
14450 CVShapeElement.prototype.renderPath = function (pathData, itemData) {
14451 if (pathData.hd !== true && pathData._shouldRender) {
14452 var i;
14453 var len = itemData.styledShapes.length;
14454 for (i = 0; i < len; i += 1) {
14455 this.renderStyledShape(itemData.styledShapes[i], itemData.sh);
14456 }
14457 }
14458 };
14459 CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {
14460 var styleElem = itemData.style;
14461 if (itemData.c._mdf || this._isFirstFrame) {
14462 styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';
14463 }
14464 if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
14465 styleElem.coOp = itemData.o.v * groupTransform.opacity;
14466 }
14467 };
14468 CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {
14469 var styleElem = itemData.style;
14470 var grd;
14471 if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {
14472 var ctx = this.globalData.canvasContext;
14473 var pt1 = itemData.s.v;
14474 var pt2 = itemData.e.v;
14475 if (styleData.t === 1) {
14476 grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);
14477 } else {
14478 var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
14479 var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);
14480 var percent = itemData.h.v;
14481 if (percent >= 1) {
14482 percent = 0.99;
14483 } else if (percent <= -1) {
14484 percent = -0.99;
14485 }
14486 var dist = rad * percent;
14487 var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];
14488 var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];
14489 grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);
14490 }
14491 var i;
14492 var len = styleData.g.p;
14493 var cValues = itemData.g.c;
14494 var opacity = 1;
14495 for (i = 0; i < len; i += 1) {
14496 if (itemData.g._hasOpacity && itemData.g._collapsable) {
14497 opacity = itemData.g.o[i * 2 + 1];
14498 }
14499 grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');
14500 }
14501 styleElem.grd = grd;
14502 }
14503 styleElem.coOp = itemData.o.v * groupTransform.opacity;
14504 };
14505 CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {
14506 var styleElem = itemData.style;
14507 var d = itemData.d;
14508 if (d && (d._mdf || this._isFirstFrame)) {
14509 styleElem.da = d.dashArray;
14510 styleElem["do"] = d.dashoffset[0];
14511 }
14512 if (itemData.c._mdf || this._isFirstFrame) {
14513 styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';
14514 }
14515 if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
14516 styleElem.coOp = itemData.o.v * groupTransform.opacity;
14517 }
14518 if (itemData.w._mdf || this._isFirstFrame) {
14519 styleElem.wi = itemData.w.v;
14520 }
14521 };
14522 CVShapeElement.prototype.destroy = function () {
14523 this.shapesData = null;
14524 this.globalData = null;
14525 this.canvasContext = null;
14526 this.stylesList.length = 0;
14527 this.itemsData.length = 0;
14528 };
14529
14530 function CVTextElement(data, globalData, comp) {
14531 this.textSpans = [];
14532 this.yOffset = 0;
14533 this.fillColorAnim = false;
14534 this.strokeColorAnim = false;
14535 this.strokeWidthAnim = false;
14536 this.stroke = false;
14537 this.fill = false;
14538 this.justifyOffset = 0;
14539 this.currentRender = null;
14540 this.renderType = 'canvas';
14541 this.values = {
14542 fill: 'rgba(0,0,0,0)',
14543 stroke: 'rgba(0,0,0,0)',
14544 sWidth: 0,
14545 fValue: ''
14546 };
14547 this.initElement(data, globalData, comp);
14548 }
14549 extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);
14550 CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');
14551 CVTextElement.prototype.buildNewText = function () {
14552 var documentData = this.textProperty.currentData;
14553 this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);
14554 var hasFill = false;
14555 if (documentData.fc) {
14556 hasFill = true;
14557 this.values.fill = this.buildColor(documentData.fc);
14558 } else {
14559 this.values.fill = 'rgba(0,0,0,0)';
14560 }
14561 this.fill = hasFill;
14562 var hasStroke = false;
14563 if (documentData.sc) {
14564 hasStroke = true;
14565 this.values.stroke = this.buildColor(documentData.sc);
14566 this.values.sWidth = documentData.sw;
14567 }
14568 var fontData = this.globalData.fontManager.getFontByName(documentData.f);
14569 var i;
14570 var len;
14571 var letters = documentData.l;
14572 var matrixHelper = this.mHelper;
14573 this.stroke = hasStroke;
14574 this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;
14575 len = documentData.finalText.length;
14576 // this.tHelper.font = this.values.fValue;
14577 var charData;
14578 var shapeData;
14579 var k;
14580 var kLen;
14581 var shapes;
14582 var j;
14583 var jLen;
14584 var pathNodes;
14585 var commands;
14586 var pathArr;
14587 var singleShape = this.data.singleShape;
14588 var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;
14589 var xPos = 0;
14590 var yPos = 0;
14591 var firstLine = true;
14592 var cnt = 0;
14593 for (i = 0; i < len; i += 1) {
14594 charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);
14595 shapeData = charData && charData.data || {};
14596 matrixHelper.reset();
14597 if (singleShape && letters[i].n) {
14598 xPos = -trackingOffset;
14599 yPos += documentData.yOffset;
14600 yPos += firstLine ? 1 : 0;
14601 firstLine = false;
14602 }
14603 shapes = shapeData.shapes ? shapeData.shapes[0].it : [];
14604 jLen = shapes.length;
14605 matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
14606 if (singleShape) {
14607 this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);
14608 }
14609 commands = createSizedArray(jLen - 1);
14610 var commandsCounter = 0;
14611 for (j = 0; j < jLen; j += 1) {
14612 if (shapes[j].ty === 'sh') {
14613 kLen = shapes[j].ks.k.i.length;
14614 pathNodes = shapes[j].ks.k;
14615 pathArr = [];
14616 for (k = 1; k < kLen; k += 1) {
14617 if (k === 1) {
14618 pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
14619 }
14620 pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));
14621 }
14622 pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
14623 commands[commandsCounter] = pathArr;
14624 commandsCounter += 1;
14625 }
14626 }
14627 if (singleShape) {
14628 xPos += letters[i].l;
14629 xPos += trackingOffset;
14630 }
14631 if (this.textSpans[cnt]) {
14632 this.textSpans[cnt].elem = commands;
14633 } else {
14634 this.textSpans[cnt] = {
14635 elem: commands
14636 };
14637 }
14638 cnt += 1;
14639 }
14640 };
14641 CVTextElement.prototype.renderInnerContent = function () {
14642 this.validateText();
14643 var ctx = this.canvasContext;
14644 ctx.font = this.values.fValue;
14645 this.globalData.renderer.ctxLineCap('butt');
14646 // ctx.lineCap = 'butt';
14647 this.globalData.renderer.ctxLineJoin('miter');
14648 // ctx.lineJoin = 'miter';
14649 this.globalData.renderer.ctxMiterLimit(4);
14650 // ctx.miterLimit = 4;
14651
14652 if (!this.data.singleShape) {
14653 this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);
14654 }
14655 var i;
14656 var len;
14657 var j;
14658 var jLen;
14659 var k;
14660 var kLen;
14661 var renderedLetters = this.textAnimator.renderedLetters;
14662 var letters = this.textProperty.currentData.l;
14663 len = letters.length;
14664 var renderedLetter;
14665 var lastFill = null;
14666 var lastStroke = null;
14667 var lastStrokeW = null;
14668 var commands;
14669 var pathArr;
14670 var renderer = this.globalData.renderer;
14671 for (i = 0; i < len; i += 1) {
14672 if (!letters[i].n) {
14673 renderedLetter = renderedLetters[i];
14674 if (renderedLetter) {
14675 renderer.save();
14676 renderer.ctxTransform(renderedLetter.p);
14677 renderer.ctxOpacity(renderedLetter.o);
14678 }
14679 if (this.fill) {
14680 if (renderedLetter && renderedLetter.fc) {
14681 if (lastFill !== renderedLetter.fc) {
14682 renderer.ctxFillStyle(renderedLetter.fc);
14683 lastFill = renderedLetter.fc;
14684 // ctx.fillStyle = renderedLetter.fc;
14685 }
14686 } else if (lastFill !== this.values.fill) {
14687 lastFill = this.values.fill;
14688 renderer.ctxFillStyle(this.values.fill);
14689 // ctx.fillStyle = this.values.fill;
14690 }
14691 commands = this.textSpans[i].elem;
14692 jLen = commands.length;
14693 this.globalData.canvasContext.beginPath();
14694 for (j = 0; j < jLen; j += 1) {
14695 pathArr = commands[j];
14696 kLen = pathArr.length;
14697 this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);
14698 for (k = 2; k < kLen; k += 6) {
14699 this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);
14700 }
14701 }
14702 this.globalData.canvasContext.closePath();
14703 renderer.ctxFill();
14704 // this.globalData.canvasContext.fill();
14705 /// ctx.fillText(this.textSpans[i].val,0,0);
14706 }
14707 if (this.stroke) {
14708 if (renderedLetter && renderedLetter.sw) {
14709 if (lastStrokeW !== renderedLetter.sw) {
14710 lastStrokeW = renderedLetter.sw;
14711 renderer.ctxLineWidth(renderedLetter.sw);
14712 // ctx.lineWidth = renderedLetter.sw;
14713 }
14714 } else if (lastStrokeW !== this.values.sWidth) {
14715 lastStrokeW = this.values.sWidth;
14716 renderer.ctxLineWidth(this.values.sWidth);
14717 // ctx.lineWidth = this.values.sWidth;
14718 }
14719 if (renderedLetter && renderedLetter.sc) {
14720 if (lastStroke !== renderedLetter.sc) {
14721 lastStroke = renderedLetter.sc;
14722 renderer.ctxStrokeStyle(renderedLetter.sc);
14723 // ctx.strokeStyle = renderedLetter.sc;
14724 }
14725 } else if (lastStroke !== this.values.stroke) {
14726 lastStroke = this.values.stroke;
14727 renderer.ctxStrokeStyle(this.values.stroke);
14728 // ctx.strokeStyle = this.values.stroke;
14729 }
14730 commands = this.textSpans[i].elem;
14731 jLen = commands.length;
14732 this.globalData.canvasContext.beginPath();
14733 for (j = 0; j < jLen; j += 1) {
14734 pathArr = commands[j];
14735 kLen = pathArr.length;
14736 this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);
14737 for (k = 2; k < kLen; k += 6) {
14738 this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);
14739 }
14740 }
14741 this.globalData.canvasContext.closePath();
14742 renderer.ctxStroke();
14743 // this.globalData.canvasContext.stroke();
14744 /// ctx.strokeText(letters[i].val,0,0);
14745 }
14746 if (renderedLetter) {
14747 this.globalData.renderer.restore();
14748 }
14749 }
14750 }
14751 };
14752
14753 function CVImageElement(data, globalData, comp) {
14754 this.assetData = globalData.getAssetData(data.refId);
14755 this.img = globalData.imageLoader.getAsset(this.assetData);
14756 this.initElement(data, globalData, comp);
14757 }
14758 extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);
14759 CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;
14760 CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;
14761 CVImageElement.prototype.createContent = function () {
14762 if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {
14763 var canvas = createTag('canvas');
14764 canvas.width = this.assetData.w;
14765 canvas.height = this.assetData.h;
14766 var ctx = canvas.getContext('2d');
14767 var imgW = this.img.width;
14768 var imgH = this.img.height;
14769 var imgRel = imgW / imgH;
14770 var canvasRel = this.assetData.w / this.assetData.h;
14771 var widthCrop;
14772 var heightCrop;
14773 var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;
14774 if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {
14775 heightCrop = imgH;
14776 widthCrop = heightCrop * canvasRel;
14777 } else {
14778 widthCrop = imgW;
14779 heightCrop = widthCrop / canvasRel;
14780 }
14781 ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);
14782 this.img = canvas;
14783 }
14784 };
14785 CVImageElement.prototype.renderInnerContent = function () {
14786 this.canvasContext.drawImage(this.img, 0, 0);
14787 };
14788 CVImageElement.prototype.destroy = function () {
14789 this.img = null;
14790 };
14791
14792 function CVSolidElement(data, globalData, comp) {
14793 this.initElement(data, globalData, comp);
14794 }
14795 extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);
14796 CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;
14797 CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;
14798 CVSolidElement.prototype.renderInnerContent = function () {
14799 // var ctx = this.canvasContext;
14800 this.globalData.renderer.ctxFillStyle(this.data.sc);
14801 // ctx.fillStyle = this.data.sc;
14802 this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh);
14803 // ctx.fillRect(0, 0, this.data.sw, this.data.sh);
14804 //
14805 };
14806
14807 function CanvasRendererBase() {}
14808 extendPrototype([BaseRenderer], CanvasRendererBase);
14809 CanvasRendererBase.prototype.createShape = function (data) {
14810 return new CVShapeElement(data, this.globalData, this);
14811 };
14812 CanvasRendererBase.prototype.createText = function (data) {
14813 return new CVTextElement(data, this.globalData, this);
14814 };
14815 CanvasRendererBase.prototype.createImage = function (data) {
14816 return new CVImageElement(data, this.globalData, this);
14817 };
14818 CanvasRendererBase.prototype.createSolid = function (data) {
14819 return new CVSolidElement(data, this.globalData, this);
14820 };
14821 CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;
14822 CanvasRendererBase.prototype.ctxTransform = function (props) {
14823 if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {
14824 return;
14825 }
14826 this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);
14827 };
14828 CanvasRendererBase.prototype.ctxOpacity = function (op) {
14829 this.canvasContext.globalAlpha *= op < 0 ? 0 : op;
14830 };
14831 CanvasRendererBase.prototype.ctxFillStyle = function (value) {
14832 this.canvasContext.fillStyle = value;
14833 };
14834 CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {
14835 this.canvasContext.strokeStyle = value;
14836 };
14837 CanvasRendererBase.prototype.ctxLineWidth = function (value) {
14838 this.canvasContext.lineWidth = value;
14839 };
14840 CanvasRendererBase.prototype.ctxLineCap = function (value) {
14841 this.canvasContext.lineCap = value;
14842 };
14843 CanvasRendererBase.prototype.ctxLineJoin = function (value) {
14844 this.canvasContext.lineJoin = value;
14845 };
14846 CanvasRendererBase.prototype.ctxMiterLimit = function (value) {
14847 this.canvasContext.miterLimit = value;
14848 };
14849 CanvasRendererBase.prototype.ctxFill = function (rule) {
14850 this.canvasContext.fill(rule);
14851 };
14852 CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {
14853 this.canvasContext.fillRect(x, y, w, h);
14854 };
14855 CanvasRendererBase.prototype.ctxStroke = function () {
14856 this.canvasContext.stroke();
14857 };
14858 CanvasRendererBase.prototype.reset = function () {
14859 if (!this.renderConfig.clearCanvas) {
14860 this.canvasContext.restore();
14861 return;
14862 }
14863 this.contextData.reset();
14864 };
14865 CanvasRendererBase.prototype.save = function () {
14866 this.canvasContext.save();
14867 };
14868 CanvasRendererBase.prototype.restore = function (actionFlag) {
14869 if (!this.renderConfig.clearCanvas) {
14870 this.canvasContext.restore();
14871 return;
14872 }
14873 if (actionFlag) {
14874 this.globalData.blendMode = 'source-over';
14875 }
14876 this.contextData.restore(actionFlag);
14877 };
14878 CanvasRendererBase.prototype.configAnimation = function (animData) {
14879 if (this.animationItem.wrapper) {
14880 this.animationItem.container = createTag('canvas');
14881 var containerStyle = this.animationItem.container.style;
14882 containerStyle.width = '100%';
14883 containerStyle.height = '100%';
14884 var origin = '0px 0px 0px';
14885 containerStyle.transformOrigin = origin;
14886 containerStyle.mozTransformOrigin = origin;
14887 containerStyle.webkitTransformOrigin = origin;
14888 containerStyle['-webkit-transform'] = origin;
14889 containerStyle.contentVisibility = this.renderConfig.contentVisibility;
14890 this.animationItem.wrapper.appendChild(this.animationItem.container);
14891 this.canvasContext = this.animationItem.container.getContext('2d');
14892 if (this.renderConfig.className) {
14893 this.animationItem.container.setAttribute('class', this.renderConfig.className);
14894 }
14895 if (this.renderConfig.id) {
14896 this.animationItem.container.setAttribute('id', this.renderConfig.id);
14897 }
14898 } else {
14899 this.canvasContext = this.renderConfig.context;
14900 }
14901 this.contextData.setContext(this.canvasContext);
14902 this.data = animData;
14903 this.layers = animData.layers;
14904 this.transformCanvas = {
14905 w: animData.w,
14906 h: animData.h,
14907 sx: 0,
14908 sy: 0,
14909 tx: 0,
14910 ty: 0
14911 };
14912 this.setupGlobalData(animData, document.body);
14913 this.globalData.canvasContext = this.canvasContext;
14914 this.globalData.renderer = this;
14915 this.globalData.isDashed = false;
14916 this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;
14917 this.globalData.transformCanvas = this.transformCanvas;
14918 this.elements = createSizedArray(animData.layers.length);
14919 this.updateContainerSize();
14920 };
14921 CanvasRendererBase.prototype.updateContainerSize = function (width, height) {
14922 this.reset();
14923 var elementWidth;
14924 var elementHeight;
14925 if (width) {
14926 elementWidth = width;
14927 elementHeight = height;
14928 this.canvasContext.canvas.width = elementWidth;
14929 this.canvasContext.canvas.height = elementHeight;
14930 } else {
14931 if (this.animationItem.wrapper && this.animationItem.container) {
14932 elementWidth = this.animationItem.wrapper.offsetWidth;
14933 elementHeight = this.animationItem.wrapper.offsetHeight;
14934 } else {
14935 elementWidth = this.canvasContext.canvas.width;
14936 elementHeight = this.canvasContext.canvas.height;
14937 }
14938 this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;
14939 this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;
14940 }
14941 var elementRel;
14942 var animationRel;
14943 if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {
14944 var par = this.renderConfig.preserveAspectRatio.split(' ');
14945 var fillType = par[1] || 'meet';
14946 var pos = par[0] || 'xMidYMid';
14947 var xPos = pos.substr(0, 4);
14948 var yPos = pos.substr(4);
14949 elementRel = elementWidth / elementHeight;
14950 animationRel = this.transformCanvas.w / this.transformCanvas.h;
14951 if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {
14952 this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);
14953 this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);
14954 } else {
14955 this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);
14956 this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);
14957 }
14958 if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {
14959 this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;
14960 } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {
14961 this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;
14962 } else {
14963 this.transformCanvas.tx = 0;
14964 }
14965 if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {
14966 this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;
14967 } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {
14968 this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;
14969 } else {
14970 this.transformCanvas.ty = 0;
14971 }
14972 } else if (this.renderConfig.preserveAspectRatio === 'none') {
14973 this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);
14974 this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);
14975 this.transformCanvas.tx = 0;
14976 this.transformCanvas.ty = 0;
14977 } else {
14978 this.transformCanvas.sx = this.renderConfig.dpr;
14979 this.transformCanvas.sy = this.renderConfig.dpr;
14980 this.transformCanvas.tx = 0;
14981 this.transformCanvas.ty = 0;
14982 }
14983 this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];
14984 /* var i, len = this.elements.length;
14985 for(i=0;i<len;i+=1){
14986 if(this.elements[i] && this.elements[i].data.ty === 0){
14987 this.elements[i].resize(this.globalData.transformCanvas);
14988 }
14989 } */
14990 this.ctxTransform(this.transformCanvas.props);
14991 this.canvasContext.beginPath();
14992 this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);
14993 this.canvasContext.closePath();
14994 this.canvasContext.clip();
14995 this.renderFrame(this.renderedFrame, true);
14996 };
14997 CanvasRendererBase.prototype.destroy = function () {
14998 if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {
14999 this.animationItem.wrapper.innerText = '';
15000 }
15001 var i;
15002 var len = this.layers ? this.layers.length : 0;
15003 for (i = len - 1; i >= 0; i -= 1) {
15004 if (this.elements[i] && this.elements[i].destroy) {
15005 this.elements[i].destroy();
15006 }
15007 }
15008 this.elements.length = 0;
15009 this.globalData.canvasContext = null;
15010 this.animationItem.container = null;
15011 this.destroyed = true;
15012 };
15013 CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {
15014 if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {
15015 return;
15016 }
15017 this.renderedFrame = num;
15018 this.globalData.frameNum = num - this.animationItem._isFirstFrame;
15019 this.globalData.frameId += 1;
15020 this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;
15021 this.globalData.projectInterface.currentFrame = num;
15022
15023 // console.log('--------');
15024 // console.log('NEW: ',num);
15025 var i;
15026 var len = this.layers.length;
15027 if (!this.completeLayers) {
15028 this.checkLayers(num);
15029 }
15030 for (i = len - 1; i >= 0; i -= 1) {
15031 if (this.completeLayers || this.elements[i]) {
15032 this.elements[i].prepareFrame(num - this.layers[i].st);
15033 }
15034 }
15035 if (this.globalData._mdf) {
15036 if (this.renderConfig.clearCanvas === true) {
15037 this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);
15038 } else {
15039 this.save();
15040 }
15041 for (i = len - 1; i >= 0; i -= 1) {
15042 if (this.completeLayers || this.elements[i]) {
15043 this.elements[i].renderFrame();
15044 }
15045 }
15046 if (this.renderConfig.clearCanvas !== true) {
15047 this.restore();
15048 }
15049 }
15050 };
15051 CanvasRendererBase.prototype.buildItem = function (pos) {
15052 var elements = this.elements;
15053 if (elements[pos] || this.layers[pos].ty === 99) {
15054 return;
15055 }
15056 var element = this.createItem(this.layers[pos], this, this.globalData);
15057 elements[pos] = element;
15058 element.initExpressions();
15059 /* if(this.layers[pos].ty === 0){
15060 element.resize(this.globalData.transformCanvas);
15061 } */
15062 };
15063 CanvasRendererBase.prototype.checkPendingElements = function () {
15064 while (this.pendingElements.length) {
15065 var element = this.pendingElements.pop();
15066 element.checkParenting();
15067 }
15068 };
15069 CanvasRendererBase.prototype.hide = function () {
15070 this.animationItem.container.style.display = 'none';
15071 };
15072 CanvasRendererBase.prototype.show = function () {
15073 this.animationItem.container.style.display = 'block';
15074 };
15075
15076 function CanvasContext() {
15077 this.opacity = -1;
15078 this.transform = createTypedArray('float32', 16);
15079 this.fillStyle = '';
15080 this.strokeStyle = '';
15081 this.lineWidth = '';
15082 this.lineCap = '';
15083 this.lineJoin = '';
15084 this.miterLimit = '';
15085 this.id = Math.random();
15086 }
15087 function CVContextData() {
15088 this.stack = [];
15089 this.cArrPos = 0;
15090 this.cTr = new Matrix();
15091 var i;
15092 var len = 15;
15093 for (i = 0; i < len; i += 1) {
15094 var canvasContext = new CanvasContext();
15095 this.stack[i] = canvasContext;
15096 }
15097 this._length = len;
15098 this.nativeContext = null;
15099 this.transformMat = new Matrix();
15100 this.currentOpacity = 1;
15101 //
15102 this.currentFillStyle = '';
15103 this.appliedFillStyle = '';
15104 //
15105 this.currentStrokeStyle = '';
15106 this.appliedStrokeStyle = '';
15107 //
15108 this.currentLineWidth = '';
15109 this.appliedLineWidth = '';
15110 //
15111 this.currentLineCap = '';
15112 this.appliedLineCap = '';
15113 //
15114 this.currentLineJoin = '';
15115 this.appliedLineJoin = '';
15116 //
15117 this.appliedMiterLimit = '';
15118 this.currentMiterLimit = '';
15119 }
15120 CVContextData.prototype.duplicate = function () {
15121 var newLength = this._length * 2;
15122 var i = 0;
15123 for (i = this._length; i < newLength; i += 1) {
15124 this.stack[i] = new CanvasContext();
15125 }
15126 this._length = newLength;
15127 };
15128 CVContextData.prototype.reset = function () {
15129 this.cArrPos = 0;
15130 this.cTr.reset();
15131 this.stack[this.cArrPos].opacity = 1;
15132 };
15133 CVContextData.prototype.restore = function (forceRestore) {
15134 this.cArrPos -= 1;
15135 var currentContext = this.stack[this.cArrPos];
15136 var transform = currentContext.transform;
15137 var i;
15138 var arr = this.cTr.props;
15139 for (i = 0; i < 16; i += 1) {
15140 arr[i] = transform[i];
15141 }
15142 if (forceRestore) {
15143 this.nativeContext.restore();
15144 var prevStack = this.stack[this.cArrPos + 1];
15145 this.appliedFillStyle = prevStack.fillStyle;
15146 this.appliedStrokeStyle = prevStack.strokeStyle;
15147 this.appliedLineWidth = prevStack.lineWidth;
15148 this.appliedLineCap = prevStack.lineCap;
15149 this.appliedLineJoin = prevStack.lineJoin;
15150 this.appliedMiterLimit = prevStack.miterLimit;
15151 }
15152 this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);
15153 if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {
15154 this.nativeContext.globalAlpha = currentContext.opacity;
15155 this.currentOpacity = currentContext.opacity;
15156 }
15157 this.currentFillStyle = currentContext.fillStyle;
15158 this.currentStrokeStyle = currentContext.strokeStyle;
15159 this.currentLineWidth = currentContext.lineWidth;
15160 this.currentLineCap = currentContext.lineCap;
15161 this.currentLineJoin = currentContext.lineJoin;
15162 this.currentMiterLimit = currentContext.miterLimit;
15163 };
15164 CVContextData.prototype.save = function (saveOnNativeFlag) {
15165 if (saveOnNativeFlag) {
15166 this.nativeContext.save();
15167 }
15168 var props = this.cTr.props;
15169 if (this._length <= this.cArrPos) {
15170 this.duplicate();
15171 }
15172 var currentStack = this.stack[this.cArrPos];
15173 var i;
15174 for (i = 0; i < 16; i += 1) {
15175 currentStack.transform[i] = props[i];
15176 }
15177 this.cArrPos += 1;
15178 var newStack = this.stack[this.cArrPos];
15179 newStack.opacity = currentStack.opacity;
15180 newStack.fillStyle = currentStack.fillStyle;
15181 newStack.strokeStyle = currentStack.strokeStyle;
15182 newStack.lineWidth = currentStack.lineWidth;
15183 newStack.lineCap = currentStack.lineCap;
15184 newStack.lineJoin = currentStack.lineJoin;
15185 newStack.miterLimit = currentStack.miterLimit;
15186 };
15187 CVContextData.prototype.setOpacity = function (value) {
15188 this.stack[this.cArrPos].opacity = value;
15189 };
15190 CVContextData.prototype.setContext = function (value) {
15191 this.nativeContext = value;
15192 };
15193 CVContextData.prototype.fillStyle = function (value) {
15194 if (this.stack[this.cArrPos].fillStyle !== value) {
15195 this.currentFillStyle = value;
15196 this.stack[this.cArrPos].fillStyle = value;
15197 }
15198 };
15199 CVContextData.prototype.strokeStyle = function (value) {
15200 if (this.stack[this.cArrPos].strokeStyle !== value) {
15201 this.currentStrokeStyle = value;
15202 this.stack[this.cArrPos].strokeStyle = value;
15203 }
15204 };
15205 CVContextData.prototype.lineWidth = function (value) {
15206 if (this.stack[this.cArrPos].lineWidth !== value) {
15207 this.currentLineWidth = value;
15208 this.stack[this.cArrPos].lineWidth = value;
15209 }
15210 };
15211 CVContextData.prototype.lineCap = function (value) {
15212 if (this.stack[this.cArrPos].lineCap !== value) {
15213 this.currentLineCap = value;
15214 this.stack[this.cArrPos].lineCap = value;
15215 }
15216 };
15217 CVContextData.prototype.lineJoin = function (value) {
15218 if (this.stack[this.cArrPos].lineJoin !== value) {
15219 this.currentLineJoin = value;
15220 this.stack[this.cArrPos].lineJoin = value;
15221 }
15222 };
15223 CVContextData.prototype.miterLimit = function (value) {
15224 if (this.stack[this.cArrPos].miterLimit !== value) {
15225 this.currentMiterLimit = value;
15226 this.stack[this.cArrPos].miterLimit = value;
15227 }
15228 };
15229 CVContextData.prototype.transform = function (props) {
15230 this.transformMat.cloneFromProps(props);
15231 // Taking the last transform value from the stored stack of transforms
15232 var currentTransform = this.cTr;
15233 // Applying the last transform value after the new transform to respect the order of transformations
15234 this.transformMat.multiply(currentTransform);
15235 // Storing the new transformed value in the stored transform
15236 currentTransform.cloneFromProps(this.transformMat.props);
15237 var trProps = currentTransform.props;
15238 // Applying the new transform to the canvas
15239 this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);
15240 };
15241 CVContextData.prototype.opacity = function (op) {
15242 var currentOpacity = this.stack[this.cArrPos].opacity;
15243 currentOpacity *= op < 0 ? 0 : op;
15244 if (this.stack[this.cArrPos].opacity !== currentOpacity) {
15245 if (this.currentOpacity !== op) {
15246 this.nativeContext.globalAlpha = op;
15247 this.currentOpacity = op;
15248 }
15249 this.stack[this.cArrPos].opacity = currentOpacity;
15250 }
15251 };
15252 CVContextData.prototype.fill = function (rule) {
15253 if (this.appliedFillStyle !== this.currentFillStyle) {
15254 this.appliedFillStyle = this.currentFillStyle;
15255 this.nativeContext.fillStyle = this.appliedFillStyle;
15256 }
15257 this.nativeContext.fill(rule);
15258 };
15259 CVContextData.prototype.fillRect = function (x, y, w, h) {
15260 if (this.appliedFillStyle !== this.currentFillStyle) {
15261 this.appliedFillStyle = this.currentFillStyle;
15262 this.nativeContext.fillStyle = this.appliedFillStyle;
15263 }
15264 this.nativeContext.fillRect(x, y, w, h);
15265 };
15266 CVContextData.prototype.stroke = function () {
15267 if (this.appliedStrokeStyle !== this.currentStrokeStyle) {
15268 this.appliedStrokeStyle = this.currentStrokeStyle;
15269 this.nativeContext.strokeStyle = this.appliedStrokeStyle;
15270 }
15271 if (this.appliedLineWidth !== this.currentLineWidth) {
15272 this.appliedLineWidth = this.currentLineWidth;
15273 this.nativeContext.lineWidth = this.appliedLineWidth;
15274 }
15275 if (this.appliedLineCap !== this.currentLineCap) {
15276 this.appliedLineCap = this.currentLineCap;
15277 this.nativeContext.lineCap = this.appliedLineCap;
15278 }
15279 if (this.appliedLineJoin !== this.currentLineJoin) {
15280 this.appliedLineJoin = this.currentLineJoin;
15281 this.nativeContext.lineJoin = this.appliedLineJoin;
15282 }
15283 if (this.appliedMiterLimit !== this.currentMiterLimit) {
15284 this.appliedMiterLimit = this.currentMiterLimit;
15285 this.nativeContext.miterLimit = this.appliedMiterLimit;
15286 }
15287 this.nativeContext.stroke();
15288 };
15289
15290 function CVCompElement(data, globalData, comp) {
15291 this.completeLayers = false;
15292 this.layers = data.layers;
15293 this.pendingElements = [];
15294 this.elements = createSizedArray(this.layers.length);
15295 this.initElement(data, globalData, comp);
15296 this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
15297 _placeholder: true
15298 };
15299 }
15300 extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);
15301 CVCompElement.prototype.renderInnerContent = function () {
15302 var ctx = this.canvasContext;
15303 ctx.beginPath();
15304 ctx.moveTo(0, 0);
15305 ctx.lineTo(this.data.w, 0);
15306 ctx.lineTo(this.data.w, this.data.h);
15307 ctx.lineTo(0, this.data.h);
15308 ctx.lineTo(0, 0);
15309 ctx.clip();
15310 var i;
15311 var len = this.layers.length;
15312 for (i = len - 1; i >= 0; i -= 1) {
15313 if (this.completeLayers || this.elements[i]) {
15314 this.elements[i].renderFrame();
15315 }
15316 }
15317 };
15318 CVCompElement.prototype.destroy = function () {
15319 var i;
15320 var len = this.layers.length;
15321 for (i = len - 1; i >= 0; i -= 1) {
15322 if (this.elements[i]) {
15323 this.elements[i].destroy();
15324 }
15325 }
15326 this.layers = null;
15327 this.elements = null;
15328 };
15329 CVCompElement.prototype.createComp = function (data) {
15330 return new CVCompElement(data, this.globalData, this);
15331 };
15332
15333 function CanvasRenderer(animationItem, config) {
15334 this.animationItem = animationItem;
15335 this.renderConfig = {
15336 clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,
15337 context: config && config.context || null,
15338 progressiveLoad: config && config.progressiveLoad || false,
15339 preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',
15340 imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',
15341 contentVisibility: config && config.contentVisibility || 'visible',
15342 className: config && config.className || '',
15343 id: config && config.id || '',
15344 runExpressions: !config || config.runExpressions === undefined || config.runExpressions
15345 };
15346 this.renderConfig.dpr = config && config.dpr || 1;
15347 if (this.animationItem.wrapper) {
15348 this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;
15349 }
15350 this.renderedFrame = -1;
15351 this.globalData = {
15352 frameNum: -1,
15353 _mdf: false,
15354 renderConfig: this.renderConfig,
15355 currentGlobalAlpha: -1
15356 };
15357 this.contextData = new CVContextData();
15358 this.elements = [];
15359 this.pendingElements = [];
15360 this.transformMat = new Matrix();
15361 this.completeLayers = false;
15362 this.rendererType = 'canvas';
15363 if (this.renderConfig.clearCanvas) {
15364 this.ctxTransform = this.contextData.transform.bind(this.contextData);
15365 this.ctxOpacity = this.contextData.opacity.bind(this.contextData);
15366 this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);
15367 this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);
15368 this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);
15369 this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);
15370 this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);
15371 this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);
15372 this.ctxFill = this.contextData.fill.bind(this.contextData);
15373 this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);
15374 this.ctxStroke = this.contextData.stroke.bind(this.contextData);
15375 this.save = this.contextData.save.bind(this.contextData);
15376 }
15377 }
15378 extendPrototype([CanvasRendererBase], CanvasRenderer);
15379 CanvasRenderer.prototype.createComp = function (data) {
15380 return new CVCompElement(data, this.globalData, this);
15381 };
15382
15383 function HBaseElement() {}
15384 HBaseElement.prototype = {
15385 checkBlendMode: function checkBlendMode() {},
15386 initRendererElement: function initRendererElement() {
15387 this.baseElement = createTag(this.data.tg || 'div');
15388 if (this.data.hasMask) {
15389 this.svgElement = createNS('svg');
15390 this.layerElement = createNS('g');
15391 this.maskedElement = this.layerElement;
15392 this.svgElement.appendChild(this.layerElement);
15393 this.baseElement.appendChild(this.svgElement);
15394 } else {
15395 this.layerElement = this.baseElement;
15396 }
15397 styleDiv(this.baseElement);
15398 },
15399 createContainerElements: function createContainerElements() {
15400 this.renderableEffectsManager = new CVEffects(this);
15401 this.transformedElement = this.baseElement;
15402 this.maskedElement = this.layerElement;
15403 if (this.data.ln) {
15404 this.layerElement.setAttribute('id', this.data.ln);
15405 }
15406 if (this.data.cl) {
15407 this.layerElement.setAttribute('class', this.data.cl);
15408 }
15409 if (this.data.bm !== 0) {
15410 this.setBlendMode();
15411 }
15412 },
15413 renderElement: function renderElement() {
15414 var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};
15415 if (this.finalTransform._matMdf) {
15416 var matrixValue = this.finalTransform.mat.toCSS();
15417 transformedElementStyle.transform = matrixValue;
15418 transformedElementStyle.webkitTransform = matrixValue;
15419 }
15420 if (this.finalTransform._opMdf) {
15421 transformedElementStyle.opacity = this.finalTransform.mProp.o.v;
15422 }
15423 },
15424 renderFrame: function renderFrame() {
15425 // If it is exported as hidden (data.hd === true) no need to render
15426 // If it is not visible no need to render
15427 if (this.data.hd || this.hidden) {
15428 return;
15429 }
15430 this.renderTransform();
15431 this.renderRenderable();
15432 this.renderElement();
15433 this.renderInnerContent();
15434 if (this._isFirstFrame) {
15435 this._isFirstFrame = false;
15436 }
15437 },
15438 destroy: function destroy() {
15439 this.layerElement = null;
15440 this.transformedElement = null;
15441 if (this.matteElement) {
15442 this.matteElement = null;
15443 }
15444 if (this.maskManager) {
15445 this.maskManager.destroy();
15446 this.maskManager = null;
15447 }
15448 },
15449 createRenderableComponents: function createRenderableComponents() {
15450 this.maskManager = new MaskElement(this.data, this, this.globalData);
15451 },
15452 addEffects: function addEffects() {},
15453 setMatte: function setMatte() {}
15454 };
15455 HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;
15456 HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;
15457 HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;
15458
15459 function HSolidElement(data, globalData, comp) {
15460 this.initElement(data, globalData, comp);
15461 }
15462 extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);
15463 HSolidElement.prototype.createContent = function () {
15464 var rect;
15465 if (this.data.hasMask) {
15466 rect = createNS('rect');
15467 rect.setAttribute('width', this.data.sw);
15468 rect.setAttribute('height', this.data.sh);
15469 rect.setAttribute('fill', this.data.sc);
15470 this.svgElement.setAttribute('width', this.data.sw);
15471 this.svgElement.setAttribute('height', this.data.sh);
15472 } else {
15473 rect = createTag('div');
15474 rect.style.width = this.data.sw + 'px';
15475 rect.style.height = this.data.sh + 'px';
15476 rect.style.backgroundColor = this.data.sc;
15477 }
15478 this.layerElement.appendChild(rect);
15479 };
15480
15481 function HShapeElement(data, globalData, comp) {
15482 // List of drawable elements
15483 this.shapes = [];
15484 // Full shape data
15485 this.shapesData = data.shapes;
15486 // List of styles that will be applied to shapes
15487 this.stylesList = [];
15488 // List of modifiers that will be applied to shapes
15489 this.shapeModifiers = [];
15490 // List of items in shape tree
15491 this.itemsData = [];
15492 // List of items in previous shape tree
15493 this.processedElements = [];
15494 // List of animated components
15495 this.animatedContents = [];
15496 this.shapesContainer = createNS('g');
15497 this.initElement(data, globalData, comp);
15498 // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.
15499 // List of elements that have been created
15500 this.prevViewData = [];
15501 this.currentBBox = {
15502 x: 999999,
15503 y: -999999,
15504 h: 0,
15505 w: 0
15506 };
15507 }
15508 extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);
15509 HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;
15510 HShapeElement.prototype.createContent = function () {
15511 var cont;
15512 this.baseElement.style.fontSize = 0;
15513 if (this.data.hasMask) {
15514 this.layerElement.appendChild(this.shapesContainer);
15515 cont = this.svgElement;
15516 } else {
15517 cont = createNS('svg');
15518 var size = this.comp.data ? this.comp.data : this.globalData.compSize;
15519 cont.setAttribute('width', size.w);
15520 cont.setAttribute('height', size.h);
15521 cont.appendChild(this.shapesContainer);
15522 this.layerElement.appendChild(cont);
15523 }
15524 this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);
15525 this.filterUniqueShapes();
15526 this.shapeCont = cont;
15527 };
15528 HShapeElement.prototype.getTransformedPoint = function (transformers, point) {
15529 var i;
15530 var len = transformers.length;
15531 for (i = 0; i < len; i += 1) {
15532 point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);
15533 }
15534 return point;
15535 };
15536 HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {
15537 var shape = item.sh.v;
15538 var transformers = item.transformers;
15539 var i;
15540 var len = shape._length;
15541 var vPoint;
15542 var oPoint;
15543 var nextIPoint;
15544 var nextVPoint;
15545 if (len <= 1) {
15546 return;
15547 }
15548 for (i = 0; i < len - 1; i += 1) {
15549 vPoint = this.getTransformedPoint(transformers, shape.v[i]);
15550 oPoint = this.getTransformedPoint(transformers, shape.o[i]);
15551 nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);
15552 nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);
15553 this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);
15554 }
15555 if (shape.c) {
15556 vPoint = this.getTransformedPoint(transformers, shape.v[i]);
15557 oPoint = this.getTransformedPoint(transformers, shape.o[i]);
15558 nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);
15559 nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);
15560 this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);
15561 }
15562 };
15563 HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {
15564 this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);
15565 var bounds = this.shapeBoundingBox;
15566 boundingBox.x = bmMin(bounds.left, boundingBox.x);
15567 boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);
15568 boundingBox.y = bmMin(bounds.top, boundingBox.y);
15569 boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);
15570 };
15571 HShapeElement.prototype.shapeBoundingBox = {
15572 left: 0,
15573 right: 0,
15574 top: 0,
15575 bottom: 0
15576 };
15577 HShapeElement.prototype.tempBoundingBox = {
15578 x: 0,
15579 xMax: 0,
15580 y: 0,
15581 yMax: 0,
15582 width: 0,
15583 height: 0
15584 };
15585 HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {
15586 var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];
15587 for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {
15588 // eslint-disable-line no-plusplus
15589 b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
15590 a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
15591 c = 3 * p1[i] - 3 * p0[i];
15592 b |= 0; // eslint-disable-line no-bitwise
15593 a |= 0; // eslint-disable-line no-bitwise
15594 c |= 0; // eslint-disable-line no-bitwise
15595
15596 if (a === 0 && b === 0) {
15597 //
15598 } else if (a === 0) {
15599 t = -c / b;
15600 if (t > 0 && t < 1) {
15601 bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));
15602 }
15603 } else {
15604 b2ac = b * b - 4 * c * a;
15605 if (b2ac >= 0) {
15606 t1 = (-b + bmSqrt(b2ac)) / (2 * a);
15607 if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));
15608 t2 = (-b - bmSqrt(b2ac)) / (2 * a);
15609 if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));
15610 }
15611 }
15612 }
15613 this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);
15614 this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);
15615 this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);
15616 this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);
15617 };
15618 HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {
15619 return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];
15620 };
15621 HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {
15622 var i;
15623 var len = itemsData.length;
15624 for (i = 0; i < len; i += 1) {
15625 if (itemsData[i] && itemsData[i].sh) {
15626 this.calculateShapeBoundingBox(itemsData[i], boundingBox);
15627 } else if (itemsData[i] && itemsData[i].it) {
15628 this.calculateBoundingBox(itemsData[i].it, boundingBox);
15629 } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {
15630 this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);
15631 }
15632 }
15633 };
15634 HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {
15635 var width = 0;
15636 if (widthProperty.keyframes) {
15637 for (var i = 0; i < widthProperty.keyframes.length; i += 1) {
15638 var kfw = widthProperty.keyframes[i].s;
15639 if (kfw > width) {
15640 width = kfw;
15641 }
15642 }
15643 width *= widthProperty.mult;
15644 } else {
15645 width = widthProperty.v * widthProperty.mult;
15646 }
15647 boundingBox.x -= width;
15648 boundingBox.xMax += width;
15649 boundingBox.y -= width;
15650 boundingBox.yMax += width;
15651 };
15652 HShapeElement.prototype.currentBoxContains = function (box) {
15653 return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;
15654 };
15655 HShapeElement.prototype.renderInnerContent = function () {
15656 this._renderShapeFrame();
15657 if (!this.hidden && (this._isFirstFrame || this._mdf)) {
15658 var tempBoundingBox = this.tempBoundingBox;
15659 var max = 999999;
15660 tempBoundingBox.x = max;
15661 tempBoundingBox.xMax = -max;
15662 tempBoundingBox.y = max;
15663 tempBoundingBox.yMax = -max;
15664 this.calculateBoundingBox(this.itemsData, tempBoundingBox);
15665 tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;
15666 tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y;
15667 // var tempBoundingBox = this.shapeCont.getBBox();
15668 if (this.currentBoxContains(tempBoundingBox)) {
15669 return;
15670 }
15671 var changed = false;
15672 if (this.currentBBox.w !== tempBoundingBox.width) {
15673 this.currentBBox.w = tempBoundingBox.width;
15674 this.shapeCont.setAttribute('width', tempBoundingBox.width);
15675 changed = true;
15676 }
15677 if (this.currentBBox.h !== tempBoundingBox.height) {
15678 this.currentBBox.h = tempBoundingBox.height;
15679 this.shapeCont.setAttribute('height', tempBoundingBox.height);
15680 changed = true;
15681 }
15682 if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {
15683 this.currentBBox.w = tempBoundingBox.width;
15684 this.currentBBox.h = tempBoundingBox.height;
15685 this.currentBBox.x = tempBoundingBox.x;
15686 this.currentBBox.y = tempBoundingBox.y;
15687 this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);
15688 var shapeStyle = this.shapeCont.style;
15689 var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';
15690 shapeStyle.transform = shapeTransform;
15691 shapeStyle.webkitTransform = shapeTransform;
15692 }
15693 }
15694 };
15695
15696 function HTextElement(data, globalData, comp) {
15697 this.textSpans = [];
15698 this.textPaths = [];
15699 this.currentBBox = {
15700 x: 999999,
15701 y: -999999,
15702 h: 0,
15703 w: 0
15704 };
15705 this.renderType = 'svg';
15706 this.isMasked = false;
15707 this.initElement(data, globalData, comp);
15708 }
15709 extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);
15710 HTextElement.prototype.createContent = function () {
15711 this.isMasked = this.checkMasks();
15712 if (this.isMasked) {
15713 this.renderType = 'svg';
15714 this.compW = this.comp.data.w;
15715 this.compH = this.comp.data.h;
15716 this.svgElement.setAttribute('width', this.compW);
15717 this.svgElement.setAttribute('height', this.compH);
15718 var g = createNS('g');
15719 this.maskedElement.appendChild(g);
15720 this.innerElem = g;
15721 } else {
15722 this.renderType = 'html';
15723 this.innerElem = this.layerElement;
15724 }
15725 this.checkParenting();
15726 };
15727 HTextElement.prototype.buildNewText = function () {
15728 var documentData = this.textProperty.currentData;
15729 this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);
15730 var innerElemStyle = this.innerElem.style;
15731 var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';
15732 innerElemStyle.fill = textColor;
15733 innerElemStyle.color = textColor;
15734 if (documentData.sc) {
15735 innerElemStyle.stroke = this.buildColor(documentData.sc);
15736 innerElemStyle.strokeWidth = documentData.sw + 'px';
15737 }
15738 var fontData = this.globalData.fontManager.getFontByName(documentData.f);
15739 if (!this.globalData.fontManager.chars) {
15740 innerElemStyle.fontSize = documentData.finalSize + 'px';
15741 innerElemStyle.lineHeight = documentData.finalSize + 'px';
15742 if (fontData.fClass) {
15743 this.innerElem.className = fontData.fClass;
15744 } else {
15745 innerElemStyle.fontFamily = fontData.fFamily;
15746 var fWeight = documentData.fWeight;
15747 var fStyle = documentData.fStyle;
15748 innerElemStyle.fontStyle = fStyle;
15749 innerElemStyle.fontWeight = fWeight;
15750 }
15751 }
15752 var i;
15753 var len;
15754 var letters = documentData.l;
15755 len = letters.length;
15756 var tSpan;
15757 var tParent;
15758 var tCont;
15759 var matrixHelper = this.mHelper;
15760 var shapes;
15761 var shapeStr = '';
15762 var cnt = 0;
15763 for (i = 0; i < len; i += 1) {
15764 if (this.globalData.fontManager.chars) {
15765 if (!this.textPaths[cnt]) {
15766 tSpan = createNS('path');
15767 tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);
15768 tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);
15769 tSpan.setAttribute('stroke-miterlimit', '4');
15770 } else {
15771 tSpan = this.textPaths[cnt];
15772 }
15773 if (!this.isMasked) {
15774 if (this.textSpans[cnt]) {
15775 tParent = this.textSpans[cnt];
15776 tCont = tParent.children[0];
15777 } else {
15778 tParent = createTag('div');
15779 tParent.style.lineHeight = 0;
15780 tCont = createNS('svg');
15781 tCont.appendChild(tSpan);
15782 styleDiv(tParent);
15783 }
15784 }
15785 } else if (!this.isMasked) {
15786 if (this.textSpans[cnt]) {
15787 tParent = this.textSpans[cnt];
15788 tSpan = this.textPaths[cnt];
15789 } else {
15790 tParent = createTag('span');
15791 styleDiv(tParent);
15792 tSpan = createTag('span');
15793 styleDiv(tSpan);
15794 tParent.appendChild(tSpan);
15795 }
15796 } else {
15797 tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');
15798 }
15799 // tSpan.setAttribute('visibility', 'hidden');
15800 if (this.globalData.fontManager.chars) {
15801 var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);
15802 var shapeData;
15803 if (charData) {
15804 shapeData = charData.data;
15805 } else {
15806 shapeData = null;
15807 }
15808 matrixHelper.reset();
15809 if (shapeData && shapeData.shapes && shapeData.shapes.length) {
15810 shapes = shapeData.shapes[0].it;
15811 matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
15812 shapeStr = this.createPathShape(matrixHelper, shapes);
15813 tSpan.setAttribute('d', shapeStr);
15814 }
15815 if (!this.isMasked) {
15816 this.innerElem.appendChild(tParent);
15817 if (shapeData && shapeData.shapes) {
15818 // document.body.appendChild is needed to get exact measure of shape
15819 document.body.appendChild(tCont);
15820 var boundingBox = tCont.getBBox();
15821 tCont.setAttribute('width', boundingBox.width + 2);
15822 tCont.setAttribute('height', boundingBox.height + 2);
15823 tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));
15824 var tContStyle = tCont.style;
15825 var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';
15826 tContStyle.transform = tContTranslation;
15827 tContStyle.webkitTransform = tContTranslation;
15828 letters[i].yOffset = boundingBox.y - 1;
15829 } else {
15830 tCont.setAttribute('width', 1);
15831 tCont.setAttribute('height', 1);
15832 }
15833 tParent.appendChild(tCont);
15834 } else {
15835 this.innerElem.appendChild(tSpan);
15836 }
15837 } else {
15838 tSpan.textContent = letters[i].val;
15839 tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
15840 if (!this.isMasked) {
15841 this.innerElem.appendChild(tParent);
15842 //
15843 var tStyle = tSpan.style;
15844 var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';
15845 tStyle.transform = tSpanTranslation;
15846 tStyle.webkitTransform = tSpanTranslation;
15847 } else {
15848 this.innerElem.appendChild(tSpan);
15849 }
15850 }
15851 //
15852 if (!this.isMasked) {
15853 this.textSpans[cnt] = tParent;
15854 } else {
15855 this.textSpans[cnt] = tSpan;
15856 }
15857 this.textSpans[cnt].style.display = 'block';
15858 this.textPaths[cnt] = tSpan;
15859 cnt += 1;
15860 }
15861 while (cnt < this.textSpans.length) {
15862 this.textSpans[cnt].style.display = 'none';
15863 cnt += 1;
15864 }
15865 };
15866 HTextElement.prototype.renderInnerContent = function () {
15867 this.validateText();
15868 var svgStyle;
15869 if (this.data.singleShape) {
15870 if (!this._isFirstFrame && !this.lettersChangedFlag) {
15871 return;
15872 }
15873 if (this.isMasked && this.finalTransform._matMdf) {
15874 // Todo Benchmark if using this is better than getBBox
15875 this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);
15876 svgStyle = this.svgElement.style;
15877 var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';
15878 svgStyle.transform = translation;
15879 svgStyle.webkitTransform = translation;
15880 }
15881 }
15882 this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);
15883 if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {
15884 return;
15885 }
15886 var i;
15887 var len;
15888 var count = 0;
15889 var renderedLetters = this.textAnimator.renderedLetters;
15890 var letters = this.textProperty.currentData.l;
15891 len = letters.length;
15892 var renderedLetter;
15893 var textSpan;
15894 var textPath;
15895 for (i = 0; i < len; i += 1) {
15896 if (letters[i].n) {
15897 count += 1;
15898 } else {
15899 textSpan = this.textSpans[i];
15900 textPath = this.textPaths[i];
15901 renderedLetter = renderedLetters[count];
15902 count += 1;
15903 if (renderedLetter._mdf.m) {
15904 if (!this.isMasked) {
15905 textSpan.style.webkitTransform = renderedLetter.m;
15906 textSpan.style.transform = renderedLetter.m;
15907 } else {
15908 textSpan.setAttribute('transform', renderedLetter.m);
15909 }
15910 }
15911 /// /textSpan.setAttribute('opacity',renderedLetter.o);
15912 textSpan.style.opacity = renderedLetter.o;
15913 if (renderedLetter.sw && renderedLetter._mdf.sw) {
15914 textPath.setAttribute('stroke-width', renderedLetter.sw);
15915 }
15916 if (renderedLetter.sc && renderedLetter._mdf.sc) {
15917 textPath.setAttribute('stroke', renderedLetter.sc);
15918 }
15919 if (renderedLetter.fc && renderedLetter._mdf.fc) {
15920 textPath.setAttribute('fill', renderedLetter.fc);
15921 textPath.style.color = renderedLetter.fc;
15922 }
15923 }
15924 }
15925 if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {
15926 var boundingBox = this.innerElem.getBBox();
15927 if (this.currentBBox.w !== boundingBox.width) {
15928 this.currentBBox.w = boundingBox.width;
15929 this.svgElement.setAttribute('width', boundingBox.width);
15930 }
15931 if (this.currentBBox.h !== boundingBox.height) {
15932 this.currentBBox.h = boundingBox.height;
15933 this.svgElement.setAttribute('height', boundingBox.height);
15934 }
15935 var margin = 1;
15936 if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {
15937 this.currentBBox.w = boundingBox.width + margin * 2;
15938 this.currentBBox.h = boundingBox.height + margin * 2;
15939 this.currentBBox.x = boundingBox.x - margin;
15940 this.currentBBox.y = boundingBox.y - margin;
15941 this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);
15942 svgStyle = this.svgElement.style;
15943 var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';
15944 svgStyle.transform = svgTransform;
15945 svgStyle.webkitTransform = svgTransform;
15946 }
15947 }
15948 };
15949
15950 function HCameraElement(data, globalData, comp) {
15951 this.initFrame();
15952 this.initBaseData(data, globalData, comp);
15953 this.initHierarchy();
15954 var getProp = PropertyFactory.getProp;
15955 this.pe = getProp(this, data.pe, 0, 0, this);
15956 if (data.ks.p.s) {
15957 this.px = getProp(this, data.ks.p.x, 1, 0, this);
15958 this.py = getProp(this, data.ks.p.y, 1, 0, this);
15959 this.pz = getProp(this, data.ks.p.z, 1, 0, this);
15960 } else {
15961 this.p = getProp(this, data.ks.p, 1, 0, this);
15962 }
15963 if (data.ks.a) {
15964 this.a = getProp(this, data.ks.a, 1, 0, this);
15965 }
15966 if (data.ks.or.k.length && data.ks.or.k[0].to) {
15967 var i;
15968 var len = data.ks.or.k.length;
15969 for (i = 0; i < len; i += 1) {
15970 data.ks.or.k[i].to = null;
15971 data.ks.or.k[i].ti = null;
15972 }
15973 }
15974 this.or = getProp(this, data.ks.or, 1, degToRads, this);
15975 this.or.sh = true;
15976 this.rx = getProp(this, data.ks.rx, 0, degToRads, this);
15977 this.ry = getProp(this, data.ks.ry, 0, degToRads, this);
15978 this.rz = getProp(this, data.ks.rz, 0, degToRads, this);
15979 this.mat = new Matrix();
15980 this._prevMat = new Matrix();
15981 this._isFirstFrame = true;
15982
15983 // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.
15984 this.finalTransform = {
15985 mProp: this
15986 };
15987 }
15988 extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);
15989 HCameraElement.prototype.setup = function () {
15990 var i;
15991 var len = this.comp.threeDElements.length;
15992 var comp;
15993 var perspectiveStyle;
15994 var containerStyle;
15995 for (i = 0; i < len; i += 1) {
15996 // [perspectiveElem,container]
15997 comp = this.comp.threeDElements[i];
15998 if (comp.type === '3d') {
15999 perspectiveStyle = comp.perspectiveElem.style;
16000 containerStyle = comp.container.style;
16001 var perspective = this.pe.v + 'px';
16002 var origin = '0px 0px 0px';
16003 var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';
16004 perspectiveStyle.perspective = perspective;
16005 perspectiveStyle.webkitPerspective = perspective;
16006 containerStyle.transformOrigin = origin;
16007 containerStyle.mozTransformOrigin = origin;
16008 containerStyle.webkitTransformOrigin = origin;
16009 perspectiveStyle.transform = matrix;
16010 perspectiveStyle.webkitTransform = matrix;
16011 }
16012 }
16013 };
16014 HCameraElement.prototype.createElements = function () {};
16015 HCameraElement.prototype.hide = function () {};
16016 HCameraElement.prototype.renderFrame = function () {
16017 var _mdf = this._isFirstFrame;
16018 var i;
16019 var len;
16020 if (this.hierarchy) {
16021 len = this.hierarchy.length;
16022 for (i = 0; i < len; i += 1) {
16023 _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;
16024 }
16025 }
16026 if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {
16027 this.mat.reset();
16028 if (this.hierarchy) {
16029 len = this.hierarchy.length - 1;
16030 for (i = len; i >= 0; i -= 1) {
16031 var mTransf = this.hierarchy[i].finalTransform.mProp;
16032 this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);
16033 this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);
16034 this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);
16035 this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);
16036 this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);
16037 }
16038 }
16039 if (this.p) {
16040 this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);
16041 } else {
16042 this.mat.translate(-this.px.v, -this.py.v, this.pz.v);
16043 }
16044 if (this.a) {
16045 var diffVector;
16046 if (this.p) {
16047 diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];
16048 } else {
16049 diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];
16050 }
16051 var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2));
16052 // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));
16053 var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];
16054 var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);
16055 var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);
16056 var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);
16057 this.mat.rotateY(mRotationY).rotateX(-mRotationX);
16058 }
16059 this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);
16060 this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);
16061 this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);
16062 this.mat.translate(0, 0, this.pe.v);
16063 var hasMatrixChanged = !this._prevMat.equals(this.mat);
16064 if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {
16065 len = this.comp.threeDElements.length;
16066 var comp;
16067 var perspectiveStyle;
16068 var containerStyle;
16069 for (i = 0; i < len; i += 1) {
16070 comp = this.comp.threeDElements[i];
16071 if (comp.type === '3d') {
16072 if (hasMatrixChanged) {
16073 var matValue = this.mat.toCSS();
16074 containerStyle = comp.container.style;
16075 containerStyle.transform = matValue;
16076 containerStyle.webkitTransform = matValue;
16077 }
16078 if (this.pe._mdf) {
16079 perspectiveStyle = comp.perspectiveElem.style;
16080 perspectiveStyle.perspective = this.pe.v + 'px';
16081 perspectiveStyle.webkitPerspective = this.pe.v + 'px';
16082 }
16083 }
16084 }
16085 this.mat.clone(this._prevMat);
16086 }
16087 }
16088 this._isFirstFrame = false;
16089 };
16090 HCameraElement.prototype.prepareFrame = function (num) {
16091 this.prepareProperties(num, true);
16092 };
16093 HCameraElement.prototype.destroy = function () {};
16094 HCameraElement.prototype.getBaseElement = function () {
16095 return null;
16096 };
16097
16098 function HImageElement(data, globalData, comp) {
16099 this.assetData = globalData.getAssetData(data.refId);
16100 this.initElement(data, globalData, comp);
16101 }
16102 extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);
16103 HImageElement.prototype.createContent = function () {
16104 var assetPath = this.globalData.getAssetsPath(this.assetData);
16105 var img = new Image();
16106 if (this.data.hasMask) {
16107 this.imageElem = createNS('image');
16108 this.imageElem.setAttribute('width', this.assetData.w + 'px');
16109 this.imageElem.setAttribute('height', this.assetData.h + 'px');
16110 this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);
16111 this.layerElement.appendChild(this.imageElem);
16112 this.baseElement.setAttribute('width', this.assetData.w);
16113 this.baseElement.setAttribute('height', this.assetData.h);
16114 } else {
16115 this.layerElement.appendChild(img);
16116 }
16117 img.crossOrigin = 'anonymous';
16118 img.src = assetPath;
16119 if (this.data.ln) {
16120 this.baseElement.setAttribute('id', this.data.ln);
16121 }
16122 };
16123
16124 function HybridRendererBase(animationItem, config) {
16125 this.animationItem = animationItem;
16126 this.layers = null;
16127 this.renderedFrame = -1;
16128 this.renderConfig = {
16129 className: config && config.className || '',
16130 imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',
16131 hideOnTransparent: !(config && config.hideOnTransparent === false),
16132 filterSize: {
16133 width: config && config.filterSize && config.filterSize.width || '400%',
16134 height: config && config.filterSize && config.filterSize.height || '400%',
16135 x: config && config.filterSize && config.filterSize.x || '-100%',
16136 y: config && config.filterSize && config.filterSize.y || '-100%'
16137 }
16138 };
16139 this.globalData = {
16140 _mdf: false,
16141 frameNum: -1,
16142 renderConfig: this.renderConfig
16143 };
16144 this.pendingElements = [];
16145 this.elements = [];
16146 this.threeDElements = [];
16147 this.destroyed = false;
16148 this.camera = null;
16149 this.supports3d = true;
16150 this.rendererType = 'html';
16151 }
16152 extendPrototype([BaseRenderer], HybridRendererBase);
16153 HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;
16154 HybridRendererBase.prototype.checkPendingElements = function () {
16155 while (this.pendingElements.length) {
16156 var element = this.pendingElements.pop();
16157 element.checkParenting();
16158 }
16159 };
16160 HybridRendererBase.prototype.appendElementInPos = function (element, pos) {
16161 var newDOMElement = element.getBaseElement();
16162 if (!newDOMElement) {
16163 return;
16164 }
16165 var layer = this.layers[pos];
16166 if (!layer.ddd || !this.supports3d) {
16167 if (this.threeDElements) {
16168 this.addTo3dContainer(newDOMElement, pos);
16169 } else {
16170 var i = 0;
16171 var nextDOMElement;
16172 var nextLayer;
16173 var tmpDOMElement;
16174 while (i < pos) {
16175 if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {
16176 nextLayer = this.elements[i];
16177 tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();
16178 nextDOMElement = tmpDOMElement || nextDOMElement;
16179 }
16180 i += 1;
16181 }
16182 if (nextDOMElement) {
16183 if (!layer.ddd || !this.supports3d) {
16184 this.layerElement.insertBefore(newDOMElement, nextDOMElement);
16185 }
16186 } else if (!layer.ddd || !this.supports3d) {
16187 this.layerElement.appendChild(newDOMElement);
16188 }
16189 }
16190 } else {
16191 this.addTo3dContainer(newDOMElement, pos);
16192 }
16193 };
16194 HybridRendererBase.prototype.createShape = function (data) {
16195 if (!this.supports3d) {
16196 return new SVGShapeElement(data, this.globalData, this);
16197 }
16198 return new HShapeElement(data, this.globalData, this);
16199 };
16200 HybridRendererBase.prototype.createText = function (data) {
16201 if (!this.supports3d) {
16202 return new SVGTextLottieElement(data, this.globalData, this);
16203 }
16204 return new HTextElement(data, this.globalData, this);
16205 };
16206 HybridRendererBase.prototype.createCamera = function (data) {
16207 this.camera = new HCameraElement(data, this.globalData, this);
16208 return this.camera;
16209 };
16210 HybridRendererBase.prototype.createImage = function (data) {
16211 if (!this.supports3d) {
16212 return new IImageElement(data, this.globalData, this);
16213 }
16214 return new HImageElement(data, this.globalData, this);
16215 };
16216 HybridRendererBase.prototype.createSolid = function (data) {
16217 if (!this.supports3d) {
16218 return new ISolidElement(data, this.globalData, this);
16219 }
16220 return new HSolidElement(data, this.globalData, this);
16221 };
16222 HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;
16223 HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {
16224 var i = 0;
16225 var len = this.threeDElements.length;
16226 while (i < len) {
16227 if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {
16228 return this.threeDElements[i].perspectiveElem;
16229 }
16230 i += 1;
16231 }
16232 return null;
16233 };
16234 HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {
16235 var perspectiveElem = createTag('div');
16236 var style;
16237 var containerStyle;
16238 styleDiv(perspectiveElem);
16239 var container = createTag('div');
16240 styleDiv(container);
16241 if (type === '3d') {
16242 style = perspectiveElem.style;
16243 style.width = this.globalData.compSize.w + 'px';
16244 style.height = this.globalData.compSize.h + 'px';
16245 var center = '50% 50%';
16246 style.webkitTransformOrigin = center;
16247 style.mozTransformOrigin = center;
16248 style.transformOrigin = center;
16249 containerStyle = container.style;
16250 var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';
16251 containerStyle.transform = matrix;
16252 containerStyle.webkitTransform = matrix;
16253 }
16254 perspectiveElem.appendChild(container);
16255 // this.resizerElem.appendChild(perspectiveElem);
16256 var threeDContainerData = {
16257 container: container,
16258 perspectiveElem: perspectiveElem,
16259 startPos: pos,
16260 endPos: pos,
16261 type: type
16262 };
16263 this.threeDElements.push(threeDContainerData);
16264 return threeDContainerData;
16265 };
16266 HybridRendererBase.prototype.build3dContainers = function () {
16267 var i;
16268 var len = this.layers.length;
16269 var lastThreeDContainerData;
16270 var currentContainer = '';
16271 for (i = 0; i < len; i += 1) {
16272 if (this.layers[i].ddd && this.layers[i].ty !== 3) {
16273 if (currentContainer !== '3d') {
16274 currentContainer = '3d';
16275 lastThreeDContainerData = this.createThreeDContainer(i, '3d');
16276 }
16277 lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);
16278 } else {
16279 if (currentContainer !== '2d') {
16280 currentContainer = '2d';
16281 lastThreeDContainerData = this.createThreeDContainer(i, '2d');
16282 }
16283 lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);
16284 }
16285 }
16286 len = this.threeDElements.length;
16287 for (i = len - 1; i >= 0; i -= 1) {
16288 this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);
16289 }
16290 };
16291 HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {
16292 var i = 0;
16293 var len = this.threeDElements.length;
16294 while (i < len) {
16295 if (pos <= this.threeDElements[i].endPos) {
16296 var j = this.threeDElements[i].startPos;
16297 var nextElement;
16298 while (j < pos) {
16299 if (this.elements[j] && this.elements[j].getBaseElement) {
16300 nextElement = this.elements[j].getBaseElement();
16301 }
16302 j += 1;
16303 }
16304 if (nextElement) {
16305 this.threeDElements[i].container.insertBefore(elem, nextElement);
16306 } else {
16307 this.threeDElements[i].container.appendChild(elem);
16308 }
16309 break;
16310 }
16311 i += 1;
16312 }
16313 };
16314 HybridRendererBase.prototype.configAnimation = function (animData) {
16315 var resizerElem = createTag('div');
16316 var wrapper = this.animationItem.wrapper;
16317 var style = resizerElem.style;
16318 style.width = animData.w + 'px';
16319 style.height = animData.h + 'px';
16320 this.resizerElem = resizerElem;
16321 styleDiv(resizerElem);
16322 style.transformStyle = 'flat';
16323 style.mozTransformStyle = 'flat';
16324 style.webkitTransformStyle = 'flat';
16325 if (this.renderConfig.className) {
16326 resizerElem.setAttribute('class', this.renderConfig.className);
16327 }
16328 wrapper.appendChild(resizerElem);
16329 style.overflow = 'hidden';
16330 var svg = createNS('svg');
16331 svg.setAttribute('width', '1');
16332 svg.setAttribute('height', '1');
16333 styleDiv(svg);
16334 this.resizerElem.appendChild(svg);
16335 var defs = createNS('defs');
16336 svg.appendChild(defs);
16337 this.data = animData;
16338 // Mask animation
16339 this.setupGlobalData(animData, svg);
16340 this.globalData.defs = defs;
16341 this.layers = animData.layers;
16342 this.layerElement = this.resizerElem;
16343 this.build3dContainers();
16344 this.updateContainerSize();
16345 };
16346 HybridRendererBase.prototype.destroy = function () {
16347 if (this.animationItem.wrapper) {
16348 this.animationItem.wrapper.innerText = '';
16349 }
16350 this.animationItem.container = null;
16351 this.globalData.defs = null;
16352 var i;
16353 var len = this.layers ? this.layers.length : 0;
16354 for (i = 0; i < len; i += 1) {
16355 if (this.elements[i] && this.elements[i].destroy) {
16356 this.elements[i].destroy();
16357 }
16358 }
16359 this.elements.length = 0;
16360 this.destroyed = true;
16361 this.animationItem = null;
16362 };
16363 HybridRendererBase.prototype.updateContainerSize = function () {
16364 var elementWidth = this.animationItem.wrapper.offsetWidth;
16365 var elementHeight = this.animationItem.wrapper.offsetHeight;
16366 var elementRel = elementWidth / elementHeight;
16367 var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;
16368 var sx;
16369 var sy;
16370 var tx;
16371 var ty;
16372 if (animationRel > elementRel) {
16373 sx = elementWidth / this.globalData.compSize.w;
16374 sy = elementWidth / this.globalData.compSize.w;
16375 tx = 0;
16376 ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;
16377 } else {
16378 sx = elementHeight / this.globalData.compSize.h;
16379 sy = elementHeight / this.globalData.compSize.h;
16380 tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;
16381 ty = 0;
16382 }
16383 var style = this.resizerElem.style;
16384 style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';
16385 style.transform = style.webkitTransform;
16386 };
16387 HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;
16388 HybridRendererBase.prototype.hide = function () {
16389 this.resizerElem.style.display = 'none';
16390 };
16391 HybridRendererBase.prototype.show = function () {
16392 this.resizerElem.style.display = 'block';
16393 };
16394 HybridRendererBase.prototype.initItems = function () {
16395 this.buildAllItems();
16396 if (this.camera) {
16397 this.camera.setup();
16398 } else {
16399 var cWidth = this.globalData.compSize.w;
16400 var cHeight = this.globalData.compSize.h;
16401 var i;
16402 var len = this.threeDElements.length;
16403 for (i = 0; i < len; i += 1) {
16404 var style = this.threeDElements[i].perspectiveElem.style;
16405 style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';
16406 style.perspective = style.webkitPerspective;
16407 }
16408 }
16409 };
16410 HybridRendererBase.prototype.searchExtraCompositions = function (assets) {
16411 var i;
16412 var len = assets.length;
16413 var floatingContainer = createTag('div');
16414 for (i = 0; i < len; i += 1) {
16415 if (assets[i].xt) {
16416 var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);
16417 comp.initExpressions();
16418 this.globalData.projectInterface.registerComposition(comp);
16419 }
16420 }
16421 };
16422
16423 function HCompElement(data, globalData, comp) {
16424 this.layers = data.layers;
16425 this.supports3d = !data.hasMask;
16426 this.completeLayers = false;
16427 this.pendingElements = [];
16428 this.elements = this.layers ? createSizedArray(this.layers.length) : [];
16429 this.initElement(data, globalData, comp);
16430 this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {
16431 _placeholder: true
16432 };
16433 }
16434 extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);
16435 HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;
16436 HCompElement.prototype.createContainerElements = function () {
16437 this._createBaseContainerElements();
16438 // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';
16439 if (this.data.hasMask) {
16440 this.svgElement.setAttribute('width', this.data.w);
16441 this.svgElement.setAttribute('height', this.data.h);
16442 this.transformedElement = this.baseElement;
16443 } else {
16444 this.transformedElement = this.layerElement;
16445 }
16446 };
16447 HCompElement.prototype.addTo3dContainer = function (elem, pos) {
16448 var j = 0;
16449 var nextElement;
16450 while (j < pos) {
16451 if (this.elements[j] && this.elements[j].getBaseElement) {
16452 nextElement = this.elements[j].getBaseElement();
16453 }
16454 j += 1;
16455 }
16456 if (nextElement) {
16457 this.layerElement.insertBefore(elem, nextElement);
16458 } else {
16459 this.layerElement.appendChild(elem);
16460 }
16461 };
16462 HCompElement.prototype.createComp = function (data) {
16463 if (!this.supports3d) {
16464 return new SVGCompElement(data, this.globalData, this);
16465 }
16466 return new HCompElement(data, this.globalData, this);
16467 };
16468
16469 function HybridRenderer(animationItem, config) {
16470 this.animationItem = animationItem;
16471 this.layers = null;
16472 this.renderedFrame = -1;
16473 this.renderConfig = {
16474 className: config && config.className || '',
16475 imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',
16476 hideOnTransparent: !(config && config.hideOnTransparent === false),
16477 filterSize: {
16478 width: config && config.filterSize && config.filterSize.width || '400%',
16479 height: config && config.filterSize && config.filterSize.height || '400%',
16480 x: config && config.filterSize && config.filterSize.x || '-100%',
16481 y: config && config.filterSize && config.filterSize.y || '-100%'
16482 },
16483 runExpressions: !config || config.runExpressions === undefined || config.runExpressions
16484 };
16485 this.globalData = {
16486 _mdf: false,
16487 frameNum: -1,
16488 renderConfig: this.renderConfig
16489 };
16490 this.pendingElements = [];
16491 this.elements = [];
16492 this.threeDElements = [];
16493 this.destroyed = false;
16494 this.camera = null;
16495 this.supports3d = true;
16496 this.rendererType = 'html';
16497 }
16498 extendPrototype([HybridRendererBase], HybridRenderer);
16499 HybridRenderer.prototype.createComp = function (data) {
16500 if (!this.supports3d) {
16501 return new SVGCompElement(data, this.globalData, this);
16502 }
16503 return new HCompElement(data, this.globalData, this);
16504 };
16505
16506 var CompExpressionInterface = function () {
16507 return function (comp) {
16508 function _thisLayerFunction(name) {
16509 var i = 0;
16510 var len = comp.layers.length;
16511 while (i < len) {
16512 if (comp.layers[i].nm === name || comp.layers[i].ind === name) {
16513 return comp.elements[i].layerInterface;
16514 }
16515 i += 1;
16516 }
16517 return null;
16518 // return {active:false};
16519 }
16520 Object.defineProperty(_thisLayerFunction, '_name', {
16521 value: comp.data.nm
16522 });
16523 _thisLayerFunction.layer = _thisLayerFunction;
16524 _thisLayerFunction.pixelAspect = 1;
16525 _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;
16526 _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;
16527 _thisLayerFunction.pixelAspect = 1;
16528 _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;
16529 _thisLayerFunction.displayStartTime = 0;
16530 _thisLayerFunction.numLayers = comp.layers.length;
16531 return _thisLayerFunction;
16532 };
16533 }();
16534
16535 function _typeof$2(o) { "@babel/helpers - typeof"; return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$2(o); }
16536 /* eslint-disable */
16537 /*
16538 Copyright 2014 David Bau.
16539
16540 Permission is hereby granted, free of charge, to any person obtaining
16541 a copy of this software and associated documentation files (the
16542 "Software"), to deal in the Software without restriction, including
16543 without limitation the rights to use, copy, modify, merge, publish,
16544 distribute, sublicense, and/or sell copies of the Software, and to
16545 permit persons to whom the Software is furnished to do so, subject to
16546 the following conditions:
16547
16548 The above copyright notice and this permission notice shall be
16549 included in all copies or substantial portions of the Software.
16550
16551 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16552 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16553 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16554 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
16555 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
16556 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
16557 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16558
16559 */
16560
16561 function seedRandom(pool, math) {
16562 //
16563 // The following constants are related to IEEE 754 limits.
16564 //
16565 var global = this,
16566 width = 256,
16567 // each RC4 output is 0 <= x < 256
16568 chunks = 6,
16569 // at least six RC4 outputs for each double
16570 digits = 52,
16571 // there are 52 significant digits in a double
16572 rngname = 'random',
16573 // rngname: name for Math.random and Math.seedrandom
16574 startdenom = math.pow(width, chunks),
16575 significance = math.pow(2, digits),
16576 overflow = significance * 2,
16577 mask = width - 1,
16578 nodecrypto; // node.js crypto module, initialized at the bottom.
16579
16580 //
16581 // seedrandom()
16582 // This is the seedrandom function described above.
16583 //
16584 function seedrandom(seed, options, callback) {
16585 var key = [];
16586 options = options === true ? {
16587 entropy: true
16588 } : options || {};
16589
16590 // Flatten the seed string or build one from local entropy if needed.
16591 var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key);
16592
16593 // Use the seed to initialize an ARC4 generator.
16594 var arc4 = new ARC4(key);
16595
16596 // This function returns a random double in [0, 1) that contains
16597 // randomness in every bit of the mantissa of the IEEE 754 value.
16598 var prng = function prng() {
16599 var n = arc4.g(chunks),
16600 // Start with a numerator n < 2 ^ 48
16601 d = startdenom,
16602 // and denominator d = 2 ^ 48.
16603 x = 0; // and no 'extra last byte'.
16604 while (n < significance) {
16605 // Fill up all significant digits by
16606 n = (n + x) * width; // shifting numerator and
16607 d *= width; // denominator and generating a
16608 x = arc4.g(1); // new least-significant-byte.
16609 }
16610 while (n >= overflow) {
16611 // To avoid rounding up, before adding
16612 n /= 2; // last byte, shift everything
16613 d /= 2; // right using integer math until
16614 x >>>= 1; // we have exactly the desired bits.
16615 }
16616 return (n + x) / d; // Form the number within [0, 1).
16617 };
16618 prng.int32 = function () {
16619 return arc4.g(4) | 0;
16620 };
16621 prng.quick = function () {
16622 return arc4.g(4) / 0x100000000;
16623 };
16624 prng["double"] = prng;
16625
16626 // Mix the randomness into accumulated entropy.
16627 mixkey(tostring(arc4.S), pool);
16628
16629 // Calling convention: what to return as a function of prng, seed, is_math.
16630 return (options.pass || callback || function (prng, seed, is_math_call, state) {
16631 if (state) {
16632 // Load the arc4 state from the given state if it has an S array.
16633 if (state.S) {
16634 copy(state, arc4);
16635 }
16636 // Only provide the .state method if requested via options.state.
16637 prng.state = function () {
16638 return copy(arc4, {});
16639 };
16640 }
16641
16642 // If called as a method of Math (Math.seedrandom()), mutate
16643 // Math.random because that is how seedrandom.js has worked since v1.0.
16644 if (is_math_call) {
16645 math[rngname] = prng;
16646 return seed;
16647 }
16648
16649 // Otherwise, it is a newer calling convention, so return the
16650 // prng directly.
16651 else return prng;
16652 })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);
16653 }
16654 math['seed' + rngname] = seedrandom;
16655
16656 //
16657 // ARC4
16658 //
16659 // An ARC4 implementation. The constructor takes a key in the form of
16660 // an array of at most (width) integers that should be 0 <= x < (width).
16661 //
16662 // The g(count) method returns a pseudorandom integer that concatenates
16663 // the next (count) outputs from ARC4. Its return value is a number x
16664 // that is in the range 0 <= x < (width ^ count).
16665 //
16666 function ARC4(key) {
16667 var t,
16668 keylen = key.length,
16669 me = this,
16670 i = 0,
16671 j = me.i = me.j = 0,
16672 s = me.S = [];
16673
16674 // The empty key [] is treated as [0].
16675 if (!keylen) {
16676 key = [keylen++];
16677 }
16678
16679 // Set up S using the standard key scheduling algorithm.
16680 while (i < width) {
16681 s[i] = i++;
16682 }
16683 for (i = 0; i < width; i++) {
16684 s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];
16685 s[j] = t;
16686 }
16687
16688 // The "g" method returns the next (count) outputs as one number.
16689 me.g = function (count) {
16690 // Using instance members instead of closure state nearly doubles speed.
16691 var t,
16692 r = 0,
16693 i = me.i,
16694 j = me.j,
16695 s = me.S;
16696 while (count--) {
16697 t = s[i = mask & i + 1];
16698 r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];
16699 }
16700 me.i = i;
16701 me.j = j;
16702 return r;
16703 // For robust unpredictability, the function call below automatically
16704 // discards an initial batch of values. This is called RC4-drop[256].
16705 // See http://google.com/search?q=rsa+fluhrer+response&btnI
16706 };
16707 }
16708
16709 //
16710 // copy()
16711 // Copies internal state of ARC4 to or from a plain object.
16712 //
16713 function copy(f, t) {
16714 t.i = f.i;
16715 t.j = f.j;
16716 t.S = f.S.slice();
16717 return t;
16718 }
16719
16720 //
16721 // flatten()
16722 // Converts an object tree to nested arrays of strings.
16723 //
16724 function flatten(obj, depth) {
16725 var result = [],
16726 typ = _typeof$2(obj),
16727 prop;
16728 if (depth && typ == 'object') {
16729 for (prop in obj) {
16730 try {
16731 result.push(flatten(obj[prop], depth - 1));
16732 } catch (e) {}
16733 }
16734 }
16735 return result.length ? result : typ == 'string' ? obj : obj + '\0';
16736 }
16737
16738 //
16739 // mixkey()
16740 // Mixes a string seed into a key that is an array of integers, and
16741 // returns a shortened string seed that is equivalent to the result key.
16742 //
16743 function mixkey(seed, key) {
16744 var stringseed = seed + '',
16745 smear,
16746 j = 0;
16747 while (j < stringseed.length) {
16748 key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);
16749 }
16750 return tostring(key);
16751 }
16752
16753 //
16754 // autoseed()
16755 // Returns an object for autoseeding, using window.crypto and Node crypto
16756 // module if available.
16757 //
16758 function autoseed() {
16759 try {
16760 if (nodecrypto) {
16761 return tostring(nodecrypto.randomBytes(width));
16762 }
16763 var out = new Uint8Array(width);
16764 (global.crypto || global.msCrypto).getRandomValues(out);
16765 return tostring(out);
16766 } catch (e) {
16767 var browser = global.navigator,
16768 plugins = browser && browser.plugins;
16769 return [+new Date(), global, plugins, global.screen, tostring(pool)];
16770 }
16771 }
16772
16773 //
16774 // tostring()
16775 // Converts an array of charcodes to a string
16776 //
16777 function tostring(a) {
16778 return String.fromCharCode.apply(0, a);
16779 }
16780
16781 //
16782 // When seedrandom.js is loaded, we immediately mix a few bits
16783 // from the built-in RNG into the entropy pool. Because we do
16784 // not want to interfere with deterministic PRNG state later,
16785 // seedrandom will not call math.random on its own again after
16786 // initialization.
16787 //
16788 mixkey(math.random(), pool);
16789
16790 //
16791 // Nodejs and AMD support: export the implementation as a module using
16792 // either convention.
16793 //
16794
16795 // End anonymous scope, and pass initial values.
16796 }
16797 ;
16798 function initialize$2(BMMath) {
16799 seedRandom([], BMMath);
16800 }
16801
16802 var propTypes = {
16803 SHAPE: 'shape'
16804 };
16805
16806 function _typeof$1(o) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$1(o); }
16807 var ExpressionManager = function () {
16808 'use strict';
16809
16810 var ob = {};
16811 var Math = BMMath;
16812 var window = null;
16813 var document = null;
16814 var XMLHttpRequest = null;
16815 var fetch = null;
16816 var frames = null;
16817 var _lottieGlobal = {};
16818 initialize$2(BMMath);
16819 function resetFrame() {
16820 _lottieGlobal = {};
16821 }
16822 function $bm_isInstanceOfArray(arr) {
16823 return arr.constructor === Array || arr.constructor === Float32Array;
16824 }
16825 function isNumerable(tOfV, v) {
16826 return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';
16827 }
16828 function $bm_neg(a) {
16829 var tOfA = _typeof$1(a);
16830 if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {
16831 return -a;
16832 }
16833 if ($bm_isInstanceOfArray(a)) {
16834 var i;
16835 var lenA = a.length;
16836 var retArr = [];
16837 for (i = 0; i < lenA; i += 1) {
16838 retArr[i] = -a[i];
16839 }
16840 return retArr;
16841 }
16842 if (a.propType) {
16843 return a.v;
16844 }
16845 return -a;
16846 }
16847 var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;
16848 var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;
16849 var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;
16850 function sum(a, b) {
16851 var tOfA = _typeof$1(a);
16852 var tOfB = _typeof$1(b);
16853 if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {
16854 return a + b;
16855 }
16856 if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
16857 a = a.slice(0);
16858 a[0] += b;
16859 return a;
16860 }
16861 if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
16862 b = b.slice(0);
16863 b[0] = a + b[0];
16864 return b;
16865 }
16866 if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
16867 var i = 0;
16868 var lenA = a.length;
16869 var lenB = b.length;
16870 var retArr = [];
16871 while (i < lenA || i < lenB) {
16872 if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {
16873 retArr[i] = a[i] + b[i];
16874 } else {
16875 retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];
16876 }
16877 i += 1;
16878 }
16879 return retArr;
16880 }
16881 return 0;
16882 }
16883 var add = sum;
16884 function sub(a, b) {
16885 var tOfA = _typeof$1(a);
16886 var tOfB = _typeof$1(b);
16887 if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
16888 if (tOfA === 'string') {
16889 a = parseInt(a, 10);
16890 }
16891 if (tOfB === 'string') {
16892 b = parseInt(b, 10);
16893 }
16894 return a - b;
16895 }
16896 if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
16897 a = a.slice(0);
16898 a[0] -= b;
16899 return a;
16900 }
16901 if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
16902 b = b.slice(0);
16903 b[0] = a - b[0];
16904 return b;
16905 }
16906 if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
16907 var i = 0;
16908 var lenA = a.length;
16909 var lenB = b.length;
16910 var retArr = [];
16911 while (i < lenA || i < lenB) {
16912 if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {
16913 retArr[i] = a[i] - b[i];
16914 } else {
16915 retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];
16916 }
16917 i += 1;
16918 }
16919 return retArr;
16920 }
16921 return 0;
16922 }
16923 function mul(a, b) {
16924 var tOfA = _typeof$1(a);
16925 var tOfB = _typeof$1(b);
16926 var arr;
16927 if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
16928 return a * b;
16929 }
16930 var i;
16931 var len;
16932 if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
16933 len = a.length;
16934 arr = createTypedArray('float32', len);
16935 for (i = 0; i < len; i += 1) {
16936 arr[i] = a[i] * b;
16937 }
16938 return arr;
16939 }
16940 if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
16941 len = b.length;
16942 arr = createTypedArray('float32', len);
16943 for (i = 0; i < len; i += 1) {
16944 arr[i] = a * b[i];
16945 }
16946 return arr;
16947 }
16948 return 0;
16949 }
16950 function div(a, b) {
16951 var tOfA = _typeof$1(a);
16952 var tOfB = _typeof$1(b);
16953 var arr;
16954 if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
16955 return a / b;
16956 }
16957 var i;
16958 var len;
16959 if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
16960 len = a.length;
16961 arr = createTypedArray('float32', len);
16962 for (i = 0; i < len; i += 1) {
16963 arr[i] = a[i] / b;
16964 }
16965 return arr;
16966 }
16967 if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
16968 len = b.length;
16969 arr = createTypedArray('float32', len);
16970 for (i = 0; i < len; i += 1) {
16971 arr[i] = a / b[i];
16972 }
16973 return arr;
16974 }
16975 return 0;
16976 }
16977 function mod(a, b) {
16978 if (typeof a === 'string') {
16979 a = parseInt(a, 10);
16980 }
16981 if (typeof b === 'string') {
16982 b = parseInt(b, 10);
16983 }
16984 return a % b;
16985 }
16986 var $bm_sum = sum;
16987 var $bm_sub = sub;
16988 var $bm_mul = mul;
16989 var $bm_div = div;
16990 var $bm_mod = mod;
16991 function clamp(num, min, max) {
16992 if (min > max) {
16993 var mm = max;
16994 max = min;
16995 min = mm;
16996 }
16997 return Math.min(Math.max(num, min), max);
16998 }
16999 function radiansToDegrees(val) {
17000 return val / degToRads;
17001 }
17002 var radians_to_degrees = radiansToDegrees;
17003 function degreesToRadians(val) {
17004 return val * degToRads;
17005 }
17006 var degrees_to_radians = radiansToDegrees;
17007 var helperLengthArray = [0, 0, 0, 0, 0, 0];
17008 function length(arr1, arr2) {
17009 if (typeof arr1 === 'number' || arr1 instanceof Number) {
17010 arr2 = arr2 || 0;
17011 return Math.abs(arr1 - arr2);
17012 }
17013 if (!arr2) {
17014 arr2 = helperLengthArray;
17015 }
17016 var i;
17017 var len = Math.min(arr1.length, arr2.length);
17018 var addedLength = 0;
17019 for (i = 0; i < len; i += 1) {
17020 addedLength += Math.pow(arr2[i] - arr1[i], 2);
17021 }
17022 return Math.sqrt(addedLength);
17023 }
17024 function normalize(vec) {
17025 return div(vec, length(vec));
17026 }
17027 function rgbToHsl(val) {
17028 var r = val[0];
17029 var g = val[1];
17030 var b = val[2];
17031 var max = Math.max(r, g, b);
17032 var min = Math.min(r, g, b);
17033 var h;
17034 var s;
17035 var l = (max + min) / 2;
17036 if (max === min) {
17037 h = 0; // achromatic
17038 s = 0; // achromatic
17039 } else {
17040 var d = max - min;
17041 s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
17042 switch (max) {
17043 case r:
17044 h = (g - b) / d + (g < b ? 6 : 0);
17045 break;
17046 case g:
17047 h = (b - r) / d + 2;
17048 break;
17049 case b:
17050 h = (r - g) / d + 4;
17051 break;
17052 default:
17053 break;
17054 }
17055 h /= 6;
17056 }
17057 return [h, s, l, val[3]];
17058 }
17059 function hue2rgb(p, q, t) {
17060 if (t < 0) t += 1;
17061 if (t > 1) t -= 1;
17062 if (t < 1 / 6) return p + (q - p) * 6 * t;
17063 if (t < 1 / 2) return q;
17064 if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
17065 return p;
17066 }
17067 function hslToRgb(val) {
17068 var h = val[0];
17069 var s = val[1];
17070 var l = val[2];
17071 var r;
17072 var g;
17073 var b;
17074 if (s === 0) {
17075 r = l; // achromatic
17076 b = l; // achromatic
17077 g = l; // achromatic
17078 } else {
17079 var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
17080 var p = 2 * l - q;
17081 r = hue2rgb(p, q, h + 1 / 3);
17082 g = hue2rgb(p, q, h);
17083 b = hue2rgb(p, q, h - 1 / 3);
17084 }
17085 return [r, g, b, val[3]];
17086 }
17087 function linear(t, tMin, tMax, value1, value2) {
17088 if (value1 === undefined || value2 === undefined) {
17089 value1 = tMin;
17090 value2 = tMax;
17091 tMin = 0;
17092 tMax = 1;
17093 }
17094 if (tMax < tMin) {
17095 var _tMin = tMax;
17096 tMax = tMin;
17097 tMin = _tMin;
17098 }
17099 if (t <= tMin) {
17100 return value1;
17101 }
17102 if (t >= tMax) {
17103 return value2;
17104 }
17105 var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);
17106 if (!value1.length) {
17107 return value1 + (value2 - value1) * perc;
17108 }
17109 var i;
17110 var len = value1.length;
17111 var arr = createTypedArray('float32', len);
17112 for (i = 0; i < len; i += 1) {
17113 arr[i] = value1[i] + (value2[i] - value1[i]) * perc;
17114 }
17115 return arr;
17116 }
17117 function random(min, max) {
17118 if (max === undefined) {
17119 if (min === undefined) {
17120 min = 0;
17121 max = 1;
17122 } else {
17123 max = min;
17124 min = undefined;
17125 }
17126 }
17127 if (max.length) {
17128 var i;
17129 var len = max.length;
17130 if (!min) {
17131 min = createTypedArray('float32', len);
17132 }
17133 var arr = createTypedArray('float32', len);
17134 var rnd = BMMath.random();
17135 for (i = 0; i < len; i += 1) {
17136 arr[i] = min[i] + rnd * (max[i] - min[i]);
17137 }
17138 return arr;
17139 }
17140 if (min === undefined) {
17141 min = 0;
17142 }
17143 var rndm = BMMath.random();
17144 return min + rndm * (max - min);
17145 }
17146 function createPath(points, inTangents, outTangents, closed) {
17147 var i;
17148 var len = points.length;
17149 var path = shapePool.newElement();
17150 path.setPathData(!!closed, len);
17151 var arrPlaceholder = [0, 0];
17152 var inVertexPoint;
17153 var outVertexPoint;
17154 for (i = 0; i < len; i += 1) {
17155 inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;
17156 outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;
17157 path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);
17158 }
17159 return path;
17160 }
17161 function initiateExpression(elem, data, property) {
17162 // Bail out if we don't want expressions
17163 function noOp(_value) {
17164 return _value;
17165 }
17166 if (!elem.globalData.renderConfig.runExpressions) {
17167 return noOp;
17168 }
17169 var val = data.x;
17170 var needsVelocity = /velocity(?![\w\d])/.test(val);
17171 var _needsRandom = val.indexOf('random') !== -1;
17172 var elemType = elem.data.ty;
17173 var transform;
17174 var $bm_transform;
17175 var content;
17176 var effect;
17177 var thisProperty = property;
17178 thisProperty._name = elem.data.nm;
17179 thisProperty.valueAtTime = thisProperty.getValueAtTime;
17180 Object.defineProperty(thisProperty, 'value', {
17181 get: function get() {
17182 return thisProperty.v;
17183 }
17184 });
17185 elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;
17186 elem.comp.displayStartTime = 0;
17187 var inPoint = elem.data.ip / elem.comp.globalData.frameRate;
17188 var outPoint = elem.data.op / elem.comp.globalData.frameRate;
17189 var width = elem.data.sw ? elem.data.sw : 0;
17190 var height = elem.data.sh ? elem.data.sh : 0;
17191 var name = elem.data.nm;
17192 var loopIn;
17193 var loop_in;
17194 var loopOut;
17195 var loop_out;
17196 var smooth;
17197 var toWorld;
17198 var fromWorld;
17199 var fromComp;
17200 var toComp;
17201 var fromCompToSurface;
17202 var position;
17203 var rotation;
17204 var anchorPoint;
17205 var scale;
17206 var thisLayer;
17207 var thisComp;
17208 var mask;
17209 var valueAtTime;
17210 var velocityAtTime;
17211 var scoped_bm_rt;
17212 // val = val.replace(/(\\?"|')((http)(s)?(:\/))?\/.*?(\\?"|')/g, "\"\""); // deter potential network calls
17213 var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval
17214 var numKeys = property.kf ? data.k.length : 0;
17215 var active = !this.data || this.data.hd !== true;
17216 var wiggle = function wiggle(freq, amp) {
17217 var iWiggle;
17218 var j;
17219 var lenWiggle = this.pv.length ? this.pv.length : 1;
17220 var addedAmps = createTypedArray('float32', lenWiggle);
17221 freq = 5;
17222 var iterations = Math.floor(time * freq);
17223 iWiggle = 0;
17224 j = 0;
17225 while (iWiggle < iterations) {
17226 // var rnd = BMMath.random();
17227 for (j = 0; j < lenWiggle; j += 1) {
17228 addedAmps[j] += -amp + amp * 2 * BMMath.random();
17229 // addedAmps[j] += -amp + amp*2*rnd;
17230 }
17231 iWiggle += 1;
17232 }
17233 // var rnd2 = BMMath.random();
17234 var periods = time * freq;
17235 var perc = periods - Math.floor(periods);
17236 var arr = createTypedArray('float32', lenWiggle);
17237 if (lenWiggle > 1) {
17238 for (j = 0; j < lenWiggle; j += 1) {
17239 arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;
17240 // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;
17241 // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);
17242 }
17243 return arr;
17244 }
17245 return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;
17246 }.bind(this);
17247 if (thisProperty.loopIn) {
17248 loopIn = thisProperty.loopIn.bind(thisProperty);
17249 loop_in = loopIn;
17250 }
17251 if (thisProperty.loopOut) {
17252 loopOut = thisProperty.loopOut.bind(thisProperty);
17253 loop_out = loopOut;
17254 }
17255 if (thisProperty.smooth) {
17256 smooth = thisProperty.smooth.bind(thisProperty);
17257 }
17258 function loopInDuration(type, duration) {
17259 return loopIn(type, duration, true);
17260 }
17261 function loopOutDuration(type, duration) {
17262 return loopOut(type, duration, true);
17263 }
17264 if (this.getValueAtTime) {
17265 valueAtTime = this.getValueAtTime.bind(this);
17266 }
17267 if (this.getVelocityAtTime) {
17268 velocityAtTime = this.getVelocityAtTime.bind(this);
17269 }
17270 var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);
17271 function lookAt(elem1, elem2) {
17272 var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];
17273 var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;
17274 var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;
17275 return [yaw, pitch, 0];
17276 }
17277 function easeOut(t, tMin, tMax, val1, val2) {
17278 return applyEase(easeOutBez, t, tMin, tMax, val1, val2);
17279 }
17280 function easeIn(t, tMin, tMax, val1, val2) {
17281 return applyEase(easeInBez, t, tMin, tMax, val1, val2);
17282 }
17283 function ease(t, tMin, tMax, val1, val2) {
17284 return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);
17285 }
17286 function applyEase(fn, t, tMin, tMax, val1, val2) {
17287 if (val1 === undefined) {
17288 val1 = tMin;
17289 val2 = tMax;
17290 } else {
17291 t = (t - tMin) / (tMax - tMin);
17292 }
17293 if (t > 1) {
17294 t = 1;
17295 } else if (t < 0) {
17296 t = 0;
17297 }
17298 var mult = fn(t);
17299 if ($bm_isInstanceOfArray(val1)) {
17300 var iKey;
17301 var lenKey = val1.length;
17302 var arr = createTypedArray('float32', lenKey);
17303 for (iKey = 0; iKey < lenKey; iKey += 1) {
17304 arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];
17305 }
17306 return arr;
17307 }
17308 return (val2 - val1) * mult + val1;
17309 }
17310 function nearestKey(time) {
17311 var iKey;
17312 var lenKey = data.k.length;
17313 var index;
17314 var keyTime;
17315 if (!data.k.length || typeof data.k[0] === 'number') {
17316 index = 0;
17317 keyTime = 0;
17318 } else {
17319 index = -1;
17320 time *= elem.comp.globalData.frameRate;
17321 if (time < data.k[0].t) {
17322 index = 1;
17323 keyTime = data.k[0].t;
17324 } else {
17325 for (iKey = 0; iKey < lenKey - 1; iKey += 1) {
17326 if (time === data.k[iKey].t) {
17327 index = iKey + 1;
17328 keyTime = data.k[iKey].t;
17329 break;
17330 } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {
17331 if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {
17332 index = iKey + 2;
17333 keyTime = data.k[iKey + 1].t;
17334 } else {
17335 index = iKey + 1;
17336 keyTime = data.k[iKey].t;
17337 }
17338 break;
17339 }
17340 }
17341 if (index === -1) {
17342 index = iKey + 1;
17343 keyTime = data.k[iKey].t;
17344 }
17345 }
17346 }
17347 var obKey = {};
17348 obKey.index = index;
17349 obKey.time = keyTime / elem.comp.globalData.frameRate;
17350 return obKey;
17351 }
17352 function key(ind) {
17353 var obKey;
17354 var iKey;
17355 var lenKey;
17356 if (!data.k.length || typeof data.k[0] === 'number') {
17357 throw new Error('The property has no keyframe at index ' + ind);
17358 }
17359 ind -= 1;
17360 obKey = {
17361 time: data.k[ind].t / elem.comp.globalData.frameRate,
17362 value: []
17363 };
17364 var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;
17365 lenKey = arr.length;
17366 for (iKey = 0; iKey < lenKey; iKey += 1) {
17367 obKey[iKey] = arr[iKey];
17368 obKey.value[iKey] = arr[iKey];
17369 }
17370 return obKey;
17371 }
17372 function framesToTime(fr, fps) {
17373 if (!fps) {
17374 fps = elem.comp.globalData.frameRate;
17375 }
17376 return fr / fps;
17377 }
17378 function timeToFrames(t, fps) {
17379 if (!t && t !== 0) {
17380 t = time;
17381 }
17382 if (!fps) {
17383 fps = elem.comp.globalData.frameRate;
17384 }
17385 return t * fps;
17386 }
17387 function seedRandom(seed) {
17388 BMMath.seedrandom(randSeed + seed);
17389 }
17390 function sourceRectAtTime() {
17391 return elem.sourceRectAtTime();
17392 }
17393 function substring(init, end) {
17394 if (typeof value === 'string') {
17395 if (end === undefined) {
17396 return value.substring(init);
17397 }
17398 return value.substring(init, end);
17399 }
17400 return '';
17401 }
17402 function substr(init, end) {
17403 if (typeof value === 'string') {
17404 if (end === undefined) {
17405 return value.substr(init);
17406 }
17407 return value.substr(init, end);
17408 }
17409 return '';
17410 }
17411 function posterizeTime(framesPerSecond) {
17412 time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;
17413 value = valueAtTime(time);
17414 }
17415 var time;
17416 var velocity;
17417 var value;
17418 var text;
17419 var textIndex;
17420 var textTotal;
17421 var selectorValue;
17422 var index = elem.data.ind;
17423 var hasParent = !!(elem.hierarchy && elem.hierarchy.length);
17424 var parent;
17425 var randSeed = Math.floor(Math.random() * 1000000);
17426 var globalData = elem.globalData;
17427 function executeExpression(_value) {
17428 // globalData.pushExpression();
17429 value = _value;
17430 if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {
17431 return value;
17432 }
17433 if (this.propType === 'textSelector') {
17434 textIndex = this.textIndex;
17435 textTotal = this.textTotal;
17436 selectorValue = this.selectorValue;
17437 }
17438 if (!thisLayer) {
17439 text = elem.layerInterface.text;
17440 thisLayer = elem.layerInterface;
17441 thisComp = elem.comp.compInterface;
17442 toWorld = thisLayer.toWorld.bind(thisLayer);
17443 fromWorld = thisLayer.fromWorld.bind(thisLayer);
17444 fromComp = thisLayer.fromComp.bind(thisLayer);
17445 toComp = thisLayer.toComp.bind(thisLayer);
17446 mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;
17447 fromCompToSurface = fromComp;
17448 }
17449 if (!transform) {
17450 transform = elem.layerInterface('ADBE Transform Group');
17451 $bm_transform = transform;
17452 if (transform) {
17453 anchorPoint = transform.anchorPoint;
17454 /* position = transform.position;
17455 rotation = transform.rotation;
17456 scale = transform.scale; */
17457 }
17458 }
17459 if (elemType === 4 && !content) {
17460 content = thisLayer('ADBE Root Vectors Group');
17461 }
17462 if (!effect) {
17463 effect = thisLayer(4);
17464 }
17465 hasParent = !!(elem.hierarchy && elem.hierarchy.length);
17466 if (hasParent && !parent) {
17467 parent = elem.hierarchy[0].layerInterface;
17468 }
17469 time = this.comp.renderedFrame / this.comp.globalData.frameRate;
17470 if (_needsRandom) {
17471 seedRandom(randSeed + time);
17472 }
17473 if (needsVelocity) {
17474 velocity = velocityAtTime(time);
17475 }
17476 expression_function();
17477 this.frameExpressionId = elem.globalData.frameId;
17478
17479 // TODO: Check if it's possible to return on ShapeInterface the .v value
17480 // Changed this to a ternary operation because Rollup failed compiling it correctly
17481 scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;
17482 return scoped_bm_rt;
17483 }
17484 // Bundlers will see these as dead code and unless we reference them
17485 executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];
17486 return executeExpression;
17487 }
17488 ob.initiateExpression = initiateExpression;
17489 ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];
17490 ob.resetFrame = resetFrame;
17491 return ob;
17492 }();
17493
17494 var Expressions = function () {
17495 var ob = {};
17496 ob.initExpressions = initExpressions;
17497 ob.resetFrame = ExpressionManager.resetFrame;
17498 function initExpressions(animation) {
17499 var stackCount = 0;
17500 var registers = [];
17501 function pushExpression() {
17502 stackCount += 1;
17503 }
17504 function popExpression() {
17505 stackCount -= 1;
17506 if (stackCount === 0) {
17507 releaseInstances();
17508 }
17509 }
17510 function registerExpressionProperty(expression) {
17511 if (registers.indexOf(expression) === -1) {
17512 registers.push(expression);
17513 }
17514 }
17515 function releaseInstances() {
17516 var i;
17517 var len = registers.length;
17518 for (i = 0; i < len; i += 1) {
17519 registers[i].release();
17520 }
17521 registers.length = 0;
17522 }
17523 animation.renderer.compInterface = CompExpressionInterface(animation.renderer);
17524 animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);
17525 animation.renderer.globalData.pushExpression = pushExpression;
17526 animation.renderer.globalData.popExpression = popExpression;
17527 animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;
17528 }
17529 return ob;
17530 }();
17531
17532 var MaskManagerInterface = function () {
17533 function MaskInterface(mask, data) {
17534 this._mask = mask;
17535 this._data = data;
17536 }
17537 Object.defineProperty(MaskInterface.prototype, 'maskPath', {
17538 get: function get() {
17539 if (this._mask.prop.k) {
17540 this._mask.prop.getValue();
17541 }
17542 return this._mask.prop;
17543 }
17544 });
17545 Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {
17546 get: function get() {
17547 if (this._mask.op.k) {
17548 this._mask.op.getValue();
17549 }
17550 return this._mask.op.v * 100;
17551 }
17552 });
17553 var MaskManager = function MaskManager(maskManager) {
17554 var _masksInterfaces = createSizedArray(maskManager.viewData.length);
17555 var i;
17556 var len = maskManager.viewData.length;
17557 for (i = 0; i < len; i += 1) {
17558 _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);
17559 }
17560 var maskFunction = function maskFunction(name) {
17561 i = 0;
17562 while (i < len) {
17563 if (maskManager.masksProperties[i].nm === name) {
17564 return _masksInterfaces[i];
17565 }
17566 i += 1;
17567 }
17568 return null;
17569 };
17570 return maskFunction;
17571 };
17572 return MaskManager;
17573 }();
17574
17575 var ExpressionPropertyInterface = function () {
17576 var defaultUnidimensionalValue = {
17577 pv: 0,
17578 v: 0,
17579 mult: 1
17580 };
17581 var defaultMultidimensionalValue = {
17582 pv: [0, 0, 0],
17583 v: [0, 0, 0],
17584 mult: 1
17585 };
17586 function completeProperty(expressionValue, property, type) {
17587 Object.defineProperty(expressionValue, 'velocity', {
17588 get: function get() {
17589 return property.getVelocityAtTime(property.comp.currentFrame);
17590 }
17591 });
17592 expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;
17593 expressionValue.key = function (pos) {
17594 if (!expressionValue.numKeys) {
17595 return 0;
17596 }
17597 var value = '';
17598 if ('s' in property.keyframes[pos - 1]) {
17599 value = property.keyframes[pos - 1].s;
17600 } else if ('e' in property.keyframes[pos - 2]) {
17601 value = property.keyframes[pos - 2].e;
17602 } else {
17603 value = property.keyframes[pos - 2].s;
17604 }
17605 var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers
17606 valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;
17607 valueProp.value = type === 'unidimensional' ? value[0] : value;
17608 return valueProp;
17609 };
17610 expressionValue.valueAtTime = property.getValueAtTime;
17611 expressionValue.speedAtTime = property.getSpeedAtTime;
17612 expressionValue.velocityAtTime = property.getVelocityAtTime;
17613 expressionValue.propertyGroup = property.propertyGroup;
17614 }
17615 function UnidimensionalPropertyInterface(property) {
17616 if (!property || !('pv' in property)) {
17617 property = defaultUnidimensionalValue;
17618 }
17619 var mult = 1 / property.mult;
17620 var val = property.pv * mult;
17621 var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers
17622 expressionValue.value = val;
17623 completeProperty(expressionValue, property, 'unidimensional');
17624 return function () {
17625 if (property.k) {
17626 property.getValue();
17627 }
17628 val = property.v * mult;
17629 if (expressionValue.value !== val) {
17630 expressionValue = new Number(val); // eslint-disable-line no-new-wrappers
17631 expressionValue.value = val;
17632 expressionValue[0] = val;
17633 completeProperty(expressionValue, property, 'unidimensional');
17634 }
17635 return expressionValue;
17636 };
17637 }
17638 function MultidimensionalPropertyInterface(property) {
17639 if (!property || !('pv' in property)) {
17640 property = defaultMultidimensionalValue;
17641 }
17642 var mult = 1 / property.mult;
17643 var len = property.data && property.data.l || property.pv.length;
17644 var expressionValue = createTypedArray('float32', len);
17645 var arrValue = createTypedArray('float32', len);
17646 expressionValue.value = arrValue;
17647 completeProperty(expressionValue, property, 'multidimensional');
17648 return function () {
17649 if (property.k) {
17650 property.getValue();
17651 }
17652 for (var i = 0; i < len; i += 1) {
17653 arrValue[i] = property.v[i] * mult;
17654 expressionValue[i] = arrValue[i];
17655 }
17656 return expressionValue;
17657 };
17658 }
17659
17660 // TODO: try to avoid using this getter
17661 function defaultGetter() {
17662 return defaultUnidimensionalValue;
17663 }
17664 return function (property) {
17665 if (!property) {
17666 return defaultGetter;
17667 }
17668 if (property.propType === 'unidimensional') {
17669 return UnidimensionalPropertyInterface(property);
17670 }
17671 return MultidimensionalPropertyInterface(property);
17672 };
17673 }();
17674
17675 var TransformExpressionInterface = function () {
17676 return function (transform) {
17677 function _thisFunction(name) {
17678 switch (name) {
17679 case 'scale':
17680 case 'Scale':
17681 case 'ADBE Scale':
17682 case 6:
17683 return _thisFunction.scale;
17684 case 'rotation':
17685 case 'Rotation':
17686 case 'ADBE Rotation':
17687 case 'ADBE Rotate Z':
17688 case 10:
17689 return _thisFunction.rotation;
17690 case 'ADBE Rotate X':
17691 return _thisFunction.xRotation;
17692 case 'ADBE Rotate Y':
17693 return _thisFunction.yRotation;
17694 case 'position':
17695 case 'Position':
17696 case 'ADBE Position':
17697 case 2:
17698 return _thisFunction.position;
17699 case 'ADBE Position_0':
17700 return _thisFunction.xPosition;
17701 case 'ADBE Position_1':
17702 return _thisFunction.yPosition;
17703 case 'ADBE Position_2':
17704 return _thisFunction.zPosition;
17705 case 'anchorPoint':
17706 case 'AnchorPoint':
17707 case 'Anchor Point':
17708 case 'ADBE AnchorPoint':
17709 case 1:
17710 return _thisFunction.anchorPoint;
17711 case 'opacity':
17712 case 'Opacity':
17713 case 11:
17714 return _thisFunction.opacity;
17715 default:
17716 return null;
17717 }
17718 }
17719 Object.defineProperty(_thisFunction, 'rotation', {
17720 get: ExpressionPropertyInterface(transform.r || transform.rz)
17721 });
17722 Object.defineProperty(_thisFunction, 'zRotation', {
17723 get: ExpressionPropertyInterface(transform.rz || transform.r)
17724 });
17725 Object.defineProperty(_thisFunction, 'xRotation', {
17726 get: ExpressionPropertyInterface(transform.rx)
17727 });
17728 Object.defineProperty(_thisFunction, 'yRotation', {
17729 get: ExpressionPropertyInterface(transform.ry)
17730 });
17731 Object.defineProperty(_thisFunction, 'scale', {
17732 get: ExpressionPropertyInterface(transform.s)
17733 });
17734 var _px;
17735 var _py;
17736 var _pz;
17737 var _transformFactory;
17738 if (transform.p) {
17739 _transformFactory = ExpressionPropertyInterface(transform.p);
17740 } else {
17741 _px = ExpressionPropertyInterface(transform.px);
17742 _py = ExpressionPropertyInterface(transform.py);
17743 if (transform.pz) {
17744 _pz = ExpressionPropertyInterface(transform.pz);
17745 }
17746 }
17747 Object.defineProperty(_thisFunction, 'position', {
17748 get: function get() {
17749 if (transform.p) {
17750 return _transformFactory();
17751 }
17752 return [_px(), _py(), _pz ? _pz() : 0];
17753 }
17754 });
17755 Object.defineProperty(_thisFunction, 'xPosition', {
17756 get: ExpressionPropertyInterface(transform.px)
17757 });
17758 Object.defineProperty(_thisFunction, 'yPosition', {
17759 get: ExpressionPropertyInterface(transform.py)
17760 });
17761 Object.defineProperty(_thisFunction, 'zPosition', {
17762 get: ExpressionPropertyInterface(transform.pz)
17763 });
17764 Object.defineProperty(_thisFunction, 'anchorPoint', {
17765 get: ExpressionPropertyInterface(transform.a)
17766 });
17767 Object.defineProperty(_thisFunction, 'opacity', {
17768 get: ExpressionPropertyInterface(transform.o)
17769 });
17770 Object.defineProperty(_thisFunction, 'skew', {
17771 get: ExpressionPropertyInterface(transform.sk)
17772 });
17773 Object.defineProperty(_thisFunction, 'skewAxis', {
17774 get: ExpressionPropertyInterface(transform.sa)
17775 });
17776 Object.defineProperty(_thisFunction, 'orientation', {
17777 get: ExpressionPropertyInterface(transform.or)
17778 });
17779 return _thisFunction;
17780 };
17781 }();
17782
17783 var LayerExpressionInterface = function () {
17784 function getMatrix(time) {
17785 var toWorldMat = new Matrix();
17786 if (time !== undefined) {
17787 var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);
17788 propMatrix.clone(toWorldMat);
17789 } else {
17790 var transformMat = this._elem.finalTransform.mProp;
17791 transformMat.applyToMatrix(toWorldMat);
17792 }
17793 return toWorldMat;
17794 }
17795 function toWorldVec(arr, time) {
17796 var toWorldMat = this.getMatrix(time);
17797 toWorldMat.props[12] = 0;
17798 toWorldMat.props[13] = 0;
17799 toWorldMat.props[14] = 0;
17800 return this.applyPoint(toWorldMat, arr);
17801 }
17802 function toWorld(arr, time) {
17803 var toWorldMat = this.getMatrix(time);
17804 return this.applyPoint(toWorldMat, arr);
17805 }
17806 function fromWorldVec(arr, time) {
17807 var toWorldMat = this.getMatrix(time);
17808 toWorldMat.props[12] = 0;
17809 toWorldMat.props[13] = 0;
17810 toWorldMat.props[14] = 0;
17811 return this.invertPoint(toWorldMat, arr);
17812 }
17813 function fromWorld(arr, time) {
17814 var toWorldMat = this.getMatrix(time);
17815 return this.invertPoint(toWorldMat, arr);
17816 }
17817 function applyPoint(matrix, arr) {
17818 if (this._elem.hierarchy && this._elem.hierarchy.length) {
17819 var i;
17820 var len = this._elem.hierarchy.length;
17821 for (i = 0; i < len; i += 1) {
17822 this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);
17823 }
17824 }
17825 return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);
17826 }
17827 function invertPoint(matrix, arr) {
17828 if (this._elem.hierarchy && this._elem.hierarchy.length) {
17829 var i;
17830 var len = this._elem.hierarchy.length;
17831 for (i = 0; i < len; i += 1) {
17832 this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);
17833 }
17834 }
17835 return matrix.inversePoint(arr);
17836 }
17837 function fromComp(arr) {
17838 var toWorldMat = new Matrix();
17839 toWorldMat.reset();
17840 this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);
17841 if (this._elem.hierarchy && this._elem.hierarchy.length) {
17842 var i;
17843 var len = this._elem.hierarchy.length;
17844 for (i = 0; i < len; i += 1) {
17845 this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);
17846 }
17847 return toWorldMat.inversePoint(arr);
17848 }
17849 return toWorldMat.inversePoint(arr);
17850 }
17851 function sampleImage() {
17852 return [1, 1, 1, 1];
17853 }
17854 return function (elem) {
17855 var transformInterface;
17856 function _registerMaskInterface(maskManager) {
17857 _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);
17858 }
17859 function _registerEffectsInterface(effects) {
17860 _thisLayerFunction.effect = effects;
17861 }
17862 function _thisLayerFunction(name) {
17863 switch (name) {
17864 case 'ADBE Root Vectors Group':
17865 case 'Contents':
17866 case 2:
17867 return _thisLayerFunction.shapeInterface;
17868 case 1:
17869 case 6:
17870 case 'Transform':
17871 case 'transform':
17872 case 'ADBE Transform Group':
17873 return transformInterface;
17874 case 4:
17875 case 'ADBE Effect Parade':
17876 case 'effects':
17877 case 'Effects':
17878 return _thisLayerFunction.effect;
17879 case 'ADBE Text Properties':
17880 return _thisLayerFunction.textInterface;
17881 default:
17882 return null;
17883 }
17884 }
17885 _thisLayerFunction.getMatrix = getMatrix;
17886 _thisLayerFunction.invertPoint = invertPoint;
17887 _thisLayerFunction.applyPoint = applyPoint;
17888 _thisLayerFunction.toWorld = toWorld;
17889 _thisLayerFunction.toWorldVec = toWorldVec;
17890 _thisLayerFunction.fromWorld = fromWorld;
17891 _thisLayerFunction.fromWorldVec = fromWorldVec;
17892 _thisLayerFunction.toComp = toWorld;
17893 _thisLayerFunction.fromComp = fromComp;
17894 _thisLayerFunction.sampleImage = sampleImage;
17895 _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);
17896 _thisLayerFunction._elem = elem;
17897 transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);
17898 var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');
17899 Object.defineProperties(_thisLayerFunction, {
17900 hasParent: {
17901 get: function get() {
17902 return elem.hierarchy.length;
17903 }
17904 },
17905 parent: {
17906 get: function get() {
17907 return elem.hierarchy[0].layerInterface;
17908 }
17909 },
17910 rotation: getDescriptor(transformInterface, 'rotation'),
17911 scale: getDescriptor(transformInterface, 'scale'),
17912 position: getDescriptor(transformInterface, 'position'),
17913 opacity: getDescriptor(transformInterface, 'opacity'),
17914 anchorPoint: anchorPointDescriptor,
17915 anchor_point: anchorPointDescriptor,
17916 transform: {
17917 get: function get() {
17918 return transformInterface;
17919 }
17920 },
17921 active: {
17922 get: function get() {
17923 return elem.isInRange;
17924 }
17925 }
17926 });
17927 _thisLayerFunction.startTime = elem.data.st;
17928 _thisLayerFunction.index = elem.data.ind;
17929 _thisLayerFunction.source = elem.data.refId;
17930 _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;
17931 _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;
17932 _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;
17933 _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;
17934 _thisLayerFunction._name = elem.data.nm;
17935 _thisLayerFunction.registerMaskInterface = _registerMaskInterface;
17936 _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;
17937 return _thisLayerFunction;
17938 };
17939 }();
17940
17941 var propertyGroupFactory = function () {
17942 return function (interfaceFunction, parentPropertyGroup) {
17943 return function (val) {
17944 val = val === undefined ? 1 : val;
17945 if (val <= 0) {
17946 return interfaceFunction;
17947 }
17948 return parentPropertyGroup(val - 1);
17949 };
17950 };
17951 }();
17952
17953 var PropertyInterface = function () {
17954 return function (propertyName, propertyGroup) {
17955 var interfaceFunction = {
17956 _name: propertyName
17957 };
17958 function _propertyGroup(val) {
17959 val = val === undefined ? 1 : val;
17960 if (val <= 0) {
17961 return interfaceFunction;
17962 }
17963 return propertyGroup(val - 1);
17964 }
17965 return _propertyGroup;
17966 };
17967 }();
17968
17969 var EffectsExpressionInterface = function () {
17970 var ob = {
17971 createEffectsInterface: createEffectsInterface
17972 };
17973 function createEffectsInterface(elem, propertyGroup) {
17974 if (elem.effectsManager) {
17975 var effectElements = [];
17976 var effectsData = elem.data.ef;
17977 var i;
17978 var len = elem.effectsManager.effectElements.length;
17979 for (i = 0; i < len; i += 1) {
17980 effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));
17981 }
17982 var effects = elem.data.ef || [];
17983 var groupInterface = function groupInterface(name) {
17984 i = 0;
17985 len = effects.length;
17986 while (i < len) {
17987 if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {
17988 return effectElements[i];
17989 }
17990 i += 1;
17991 }
17992 return null;
17993 };
17994 Object.defineProperty(groupInterface, 'numProperties', {
17995 get: function get() {
17996 return effects.length;
17997 }
17998 });
17999 return groupInterface;
18000 }
18001 return null;
18002 }
18003 function createGroupInterface(data, elements, propertyGroup, elem) {
18004 function groupInterface(name) {
18005 var effects = data.ef;
18006 var i = 0;
18007 var len = effects.length;
18008 while (i < len) {
18009 if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {
18010 if (effects[i].ty === 5) {
18011 return effectElements[i];
18012 }
18013 return effectElements[i]();
18014 }
18015 i += 1;
18016 }
18017 throw new Error();
18018 }
18019 var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);
18020 var effectElements = [];
18021 var i;
18022 var len = data.ef.length;
18023 for (i = 0; i < len; i += 1) {
18024 if (data.ef[i].ty === 5) {
18025 effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));
18026 } else {
18027 effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));
18028 }
18029 }
18030 if (data.mn === 'ADBE Color Control') {
18031 Object.defineProperty(groupInterface, 'color', {
18032 get: function get() {
18033 return effectElements[0]();
18034 }
18035 });
18036 }
18037 Object.defineProperties(groupInterface, {
18038 numProperties: {
18039 get: function get() {
18040 return data.np;
18041 }
18042 },
18043 _name: {
18044 value: data.nm
18045 },
18046 propertyGroup: {
18047 value: _propertyGroup
18048 }
18049 });
18050 groupInterface.enabled = data.en !== 0;
18051 groupInterface.active = groupInterface.enabled;
18052 return groupInterface;
18053 }
18054 function createValueInterface(element, type, elem, propertyGroup) {
18055 var expressionProperty = ExpressionPropertyInterface(element.p);
18056 function interfaceFunction() {
18057 if (type === 10) {
18058 return elem.comp.compInterface(element.p.v);
18059 }
18060 return expressionProperty();
18061 }
18062 if (element.p.setGroupProperty) {
18063 element.p.setGroupProperty(PropertyInterface('', propertyGroup));
18064 }
18065 return interfaceFunction;
18066 }
18067 return ob;
18068 }();
18069
18070 var ShapePathInterface = function () {
18071 return function pathInterfaceFactory(shape, view, propertyGroup) {
18072 var prop = view.sh;
18073 function interfaceFunction(val) {
18074 if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {
18075 return interfaceFunction.path;
18076 }
18077 return null;
18078 }
18079 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18080 prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));
18081 Object.defineProperties(interfaceFunction, {
18082 path: {
18083 get: function get() {
18084 if (prop.k) {
18085 prop.getValue();
18086 }
18087 return prop;
18088 }
18089 },
18090 shape: {
18091 get: function get() {
18092 if (prop.k) {
18093 prop.getValue();
18094 }
18095 return prop;
18096 }
18097 },
18098 _name: {
18099 value: shape.nm
18100 },
18101 ix: {
18102 value: shape.ix
18103 },
18104 propertyIndex: {
18105 value: shape.ix
18106 },
18107 mn: {
18108 value: shape.mn
18109 },
18110 propertyGroup: {
18111 value: propertyGroup
18112 }
18113 });
18114 return interfaceFunction;
18115 };
18116 }();
18117
18118 var ShapeExpressionInterface = function () {
18119 function iterateElements(shapes, view, propertyGroup) {
18120 var arr = [];
18121 var i;
18122 var len = shapes ? shapes.length : 0;
18123 for (i = 0; i < len; i += 1) {
18124 if (shapes[i].ty === 'gr') {
18125 arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));
18126 } else if (shapes[i].ty === 'fl') {
18127 arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));
18128 } else if (shapes[i].ty === 'st') {
18129 arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));
18130 } else if (shapes[i].ty === 'tm') {
18131 arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));
18132 } else if (shapes[i].ty === 'tr') {
18133 // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));
18134 } else if (shapes[i].ty === 'el') {
18135 arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));
18136 } else if (shapes[i].ty === 'sr') {
18137 arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));
18138 } else if (shapes[i].ty === 'sh') {
18139 arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));
18140 } else if (shapes[i].ty === 'rc') {
18141 arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));
18142 } else if (shapes[i].ty === 'rd') {
18143 arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));
18144 } else if (shapes[i].ty === 'rp') {
18145 arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));
18146 } else if (shapes[i].ty === 'gf') {
18147 arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));
18148 } else {
18149 arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));
18150 }
18151 }
18152 return arr;
18153 }
18154 function contentsInterfaceFactory(shape, view, propertyGroup) {
18155 var interfaces;
18156 var interfaceFunction = function _interfaceFunction(value) {
18157 var i = 0;
18158 var len = interfaces.length;
18159 while (i < len) {
18160 if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {
18161 return interfaces[i];
18162 }
18163 i += 1;
18164 }
18165 if (typeof value === 'number') {
18166 return interfaces[value - 1];
18167 }
18168 return null;
18169 };
18170 interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18171 interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);
18172 interfaceFunction.numProperties = interfaces.length;
18173 var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);
18174 interfaceFunction.transform = transformInterface;
18175 interfaceFunction.propertyIndex = shape.cix;
18176 interfaceFunction._name = shape.nm;
18177 return interfaceFunction;
18178 }
18179 function groupInterfaceFactory(shape, view, propertyGroup) {
18180 var interfaceFunction = function _interfaceFunction(value) {
18181 switch (value) {
18182 case 'ADBE Vectors Group':
18183 case 'Contents':
18184 case 2:
18185 return interfaceFunction.content;
18186 // Not necessary for now. Keeping them here in case a new case appears
18187 // case 'ADBE Vector Transform Group':
18188 // case 3:
18189 default:
18190 return interfaceFunction.transform;
18191 }
18192 };
18193 interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18194 var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);
18195 var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);
18196 interfaceFunction.content = content;
18197 interfaceFunction.transform = transformInterface;
18198 Object.defineProperty(interfaceFunction, '_name', {
18199 get: function get() {
18200 return shape.nm;
18201 }
18202 });
18203 // interfaceFunction.content = interfaceFunction;
18204 interfaceFunction.numProperties = shape.np;
18205 interfaceFunction.propertyIndex = shape.ix;
18206 interfaceFunction.nm = shape.nm;
18207 interfaceFunction.mn = shape.mn;
18208 return interfaceFunction;
18209 }
18210 function fillInterfaceFactory(shape, view, propertyGroup) {
18211 function interfaceFunction(val) {
18212 if (val === 'Color' || val === 'color') {
18213 return interfaceFunction.color;
18214 }
18215 if (val === 'Opacity' || val === 'opacity') {
18216 return interfaceFunction.opacity;
18217 }
18218 return null;
18219 }
18220 Object.defineProperties(interfaceFunction, {
18221 color: {
18222 get: ExpressionPropertyInterface(view.c)
18223 },
18224 opacity: {
18225 get: ExpressionPropertyInterface(view.o)
18226 },
18227 _name: {
18228 value: shape.nm
18229 },
18230 mn: {
18231 value: shape.mn
18232 }
18233 });
18234 view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));
18235 view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));
18236 return interfaceFunction;
18237 }
18238 function gradientFillInterfaceFactory(shape, view, propertyGroup) {
18239 function interfaceFunction(val) {
18240 if (val === 'Start Point' || val === 'start point') {
18241 return interfaceFunction.startPoint;
18242 }
18243 if (val === 'End Point' || val === 'end point') {
18244 return interfaceFunction.endPoint;
18245 }
18246 if (val === 'Opacity' || val === 'opacity') {
18247 return interfaceFunction.opacity;
18248 }
18249 return null;
18250 }
18251 Object.defineProperties(interfaceFunction, {
18252 startPoint: {
18253 get: ExpressionPropertyInterface(view.s)
18254 },
18255 endPoint: {
18256 get: ExpressionPropertyInterface(view.e)
18257 },
18258 opacity: {
18259 get: ExpressionPropertyInterface(view.o)
18260 },
18261 type: {
18262 get: function get() {
18263 return 'a';
18264 }
18265 },
18266 _name: {
18267 value: shape.nm
18268 },
18269 mn: {
18270 value: shape.mn
18271 }
18272 });
18273 view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));
18274 view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));
18275 view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));
18276 return interfaceFunction;
18277 }
18278 function defaultInterfaceFactory() {
18279 function interfaceFunction() {
18280 return null;
18281 }
18282 return interfaceFunction;
18283 }
18284 function strokeInterfaceFactory(shape, view, propertyGroup) {
18285 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18286 var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);
18287 function addPropertyToDashOb(i) {
18288 Object.defineProperty(dashOb, shape.d[i].nm, {
18289 get: ExpressionPropertyInterface(view.d.dataProps[i].p)
18290 });
18291 }
18292 var i;
18293 var len = shape.d ? shape.d.length : 0;
18294 var dashOb = {};
18295 for (i = 0; i < len; i += 1) {
18296 addPropertyToDashOb(i);
18297 view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);
18298 }
18299 function interfaceFunction(val) {
18300 if (val === 'Color' || val === 'color') {
18301 return interfaceFunction.color;
18302 }
18303 if (val === 'Opacity' || val === 'opacity') {
18304 return interfaceFunction.opacity;
18305 }
18306 if (val === 'Stroke Width' || val === 'stroke width') {
18307 return interfaceFunction.strokeWidth;
18308 }
18309 return null;
18310 }
18311 Object.defineProperties(interfaceFunction, {
18312 color: {
18313 get: ExpressionPropertyInterface(view.c)
18314 },
18315 opacity: {
18316 get: ExpressionPropertyInterface(view.o)
18317 },
18318 strokeWidth: {
18319 get: ExpressionPropertyInterface(view.w)
18320 },
18321 dash: {
18322 get: function get() {
18323 return dashOb;
18324 }
18325 },
18326 _name: {
18327 value: shape.nm
18328 },
18329 mn: {
18330 value: shape.mn
18331 }
18332 });
18333 view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));
18334 view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));
18335 view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));
18336 return interfaceFunction;
18337 }
18338 function trimInterfaceFactory(shape, view, propertyGroup) {
18339 function interfaceFunction(val) {
18340 if (val === shape.e.ix || val === 'End' || val === 'end') {
18341 return interfaceFunction.end;
18342 }
18343 if (val === shape.s.ix) {
18344 return interfaceFunction.start;
18345 }
18346 if (val === shape.o.ix) {
18347 return interfaceFunction.offset;
18348 }
18349 return null;
18350 }
18351 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18352 interfaceFunction.propertyIndex = shape.ix;
18353 view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));
18354 view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));
18355 view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));
18356 interfaceFunction.propertyIndex = shape.ix;
18357 interfaceFunction.propertyGroup = propertyGroup;
18358 Object.defineProperties(interfaceFunction, {
18359 start: {
18360 get: ExpressionPropertyInterface(view.s)
18361 },
18362 end: {
18363 get: ExpressionPropertyInterface(view.e)
18364 },
18365 offset: {
18366 get: ExpressionPropertyInterface(view.o)
18367 },
18368 _name: {
18369 value: shape.nm
18370 }
18371 });
18372 interfaceFunction.mn = shape.mn;
18373 return interfaceFunction;
18374 }
18375 function transformInterfaceFactory(shape, view, propertyGroup) {
18376 function interfaceFunction(value) {
18377 if (shape.a.ix === value || value === 'Anchor Point') {
18378 return interfaceFunction.anchorPoint;
18379 }
18380 if (shape.o.ix === value || value === 'Opacity') {
18381 return interfaceFunction.opacity;
18382 }
18383 if (shape.p.ix === value || value === 'Position') {
18384 return interfaceFunction.position;
18385 }
18386 if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {
18387 return interfaceFunction.rotation;
18388 }
18389 if (shape.s.ix === value || value === 'Scale') {
18390 return interfaceFunction.scale;
18391 }
18392 if (shape.sk && shape.sk.ix === value || value === 'Skew') {
18393 return interfaceFunction.skew;
18394 }
18395 if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {
18396 return interfaceFunction.skewAxis;
18397 }
18398 return null;
18399 }
18400 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18401 view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));
18402 view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));
18403 view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));
18404 view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));
18405 view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));
18406 if (view.transform.mProps.sk) {
18407 view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));
18408 view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));
18409 }
18410 view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));
18411 Object.defineProperties(interfaceFunction, {
18412 opacity: {
18413 get: ExpressionPropertyInterface(view.transform.mProps.o)
18414 },
18415 position: {
18416 get: ExpressionPropertyInterface(view.transform.mProps.p)
18417 },
18418 anchorPoint: {
18419 get: ExpressionPropertyInterface(view.transform.mProps.a)
18420 },
18421 scale: {
18422 get: ExpressionPropertyInterface(view.transform.mProps.s)
18423 },
18424 rotation: {
18425 get: ExpressionPropertyInterface(view.transform.mProps.r)
18426 },
18427 skew: {
18428 get: ExpressionPropertyInterface(view.transform.mProps.sk)
18429 },
18430 skewAxis: {
18431 get: ExpressionPropertyInterface(view.transform.mProps.sa)
18432 },
18433 _name: {
18434 value: shape.nm
18435 }
18436 });
18437 interfaceFunction.ty = 'tr';
18438 interfaceFunction.mn = shape.mn;
18439 interfaceFunction.propertyGroup = propertyGroup;
18440 return interfaceFunction;
18441 }
18442 function ellipseInterfaceFactory(shape, view, propertyGroup) {
18443 function interfaceFunction(value) {
18444 if (shape.p.ix === value) {
18445 return interfaceFunction.position;
18446 }
18447 if (shape.s.ix === value) {
18448 return interfaceFunction.size;
18449 }
18450 return null;
18451 }
18452 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18453 interfaceFunction.propertyIndex = shape.ix;
18454 var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
18455 prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));
18456 prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));
18457 Object.defineProperties(interfaceFunction, {
18458 size: {
18459 get: ExpressionPropertyInterface(prop.s)
18460 },
18461 position: {
18462 get: ExpressionPropertyInterface(prop.p)
18463 },
18464 _name: {
18465 value: shape.nm
18466 }
18467 });
18468 interfaceFunction.mn = shape.mn;
18469 return interfaceFunction;
18470 }
18471 function starInterfaceFactory(shape, view, propertyGroup) {
18472 function interfaceFunction(value) {
18473 if (shape.p.ix === value) {
18474 return interfaceFunction.position;
18475 }
18476 if (shape.r.ix === value) {
18477 return interfaceFunction.rotation;
18478 }
18479 if (shape.pt.ix === value) {
18480 return interfaceFunction.points;
18481 }
18482 if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {
18483 return interfaceFunction.outerRadius;
18484 }
18485 if (shape.os.ix === value) {
18486 return interfaceFunction.outerRoundness;
18487 }
18488 if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {
18489 return interfaceFunction.innerRadius;
18490 }
18491 if (shape.is && shape.is.ix === value) {
18492 return interfaceFunction.innerRoundness;
18493 }
18494 return null;
18495 }
18496 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18497 var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
18498 interfaceFunction.propertyIndex = shape.ix;
18499 prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));
18500 prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));
18501 prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));
18502 prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));
18503 prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));
18504 if (shape.ir) {
18505 prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));
18506 prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));
18507 }
18508 Object.defineProperties(interfaceFunction, {
18509 position: {
18510 get: ExpressionPropertyInterface(prop.p)
18511 },
18512 rotation: {
18513 get: ExpressionPropertyInterface(prop.r)
18514 },
18515 points: {
18516 get: ExpressionPropertyInterface(prop.pt)
18517 },
18518 outerRadius: {
18519 get: ExpressionPropertyInterface(prop.or)
18520 },
18521 outerRoundness: {
18522 get: ExpressionPropertyInterface(prop.os)
18523 },
18524 innerRadius: {
18525 get: ExpressionPropertyInterface(prop.ir)
18526 },
18527 innerRoundness: {
18528 get: ExpressionPropertyInterface(prop.is)
18529 },
18530 _name: {
18531 value: shape.nm
18532 }
18533 });
18534 interfaceFunction.mn = shape.mn;
18535 return interfaceFunction;
18536 }
18537 function rectInterfaceFactory(shape, view, propertyGroup) {
18538 function interfaceFunction(value) {
18539 if (shape.p.ix === value) {
18540 return interfaceFunction.position;
18541 }
18542 if (shape.r.ix === value) {
18543 return interfaceFunction.roundness;
18544 }
18545 if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {
18546 return interfaceFunction.size;
18547 }
18548 return null;
18549 }
18550 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18551 var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
18552 interfaceFunction.propertyIndex = shape.ix;
18553 prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));
18554 prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));
18555 prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));
18556 Object.defineProperties(interfaceFunction, {
18557 position: {
18558 get: ExpressionPropertyInterface(prop.p)
18559 },
18560 roundness: {
18561 get: ExpressionPropertyInterface(prop.r)
18562 },
18563 size: {
18564 get: ExpressionPropertyInterface(prop.s)
18565 },
18566 _name: {
18567 value: shape.nm
18568 }
18569 });
18570 interfaceFunction.mn = shape.mn;
18571 return interfaceFunction;
18572 }
18573 function roundedInterfaceFactory(shape, view, propertyGroup) {
18574 function interfaceFunction(value) {
18575 if (shape.r.ix === value || value === 'Round Corners 1') {
18576 return interfaceFunction.radius;
18577 }
18578 return null;
18579 }
18580 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18581 var prop = view;
18582 interfaceFunction.propertyIndex = shape.ix;
18583 prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));
18584 Object.defineProperties(interfaceFunction, {
18585 radius: {
18586 get: ExpressionPropertyInterface(prop.rd)
18587 },
18588 _name: {
18589 value: shape.nm
18590 }
18591 });
18592 interfaceFunction.mn = shape.mn;
18593 return interfaceFunction;
18594 }
18595 function repeaterInterfaceFactory(shape, view, propertyGroup) {
18596 function interfaceFunction(value) {
18597 if (shape.c.ix === value || value === 'Copies') {
18598 return interfaceFunction.copies;
18599 }
18600 if (shape.o.ix === value || value === 'Offset') {
18601 return interfaceFunction.offset;
18602 }
18603 return null;
18604 }
18605 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
18606 var prop = view;
18607 interfaceFunction.propertyIndex = shape.ix;
18608 prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));
18609 prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));
18610 Object.defineProperties(interfaceFunction, {
18611 copies: {
18612 get: ExpressionPropertyInterface(prop.c)
18613 },
18614 offset: {
18615 get: ExpressionPropertyInterface(prop.o)
18616 },
18617 _name: {
18618 value: shape.nm
18619 }
18620 });
18621 interfaceFunction.mn = shape.mn;
18622 return interfaceFunction;
18623 }
18624 return function (shapes, view, propertyGroup) {
18625 var interfaces;
18626 function _interfaceFunction(value) {
18627 if (typeof value === 'number') {
18628 value = value === undefined ? 1 : value;
18629 if (value === 0) {
18630 return propertyGroup;
18631 }
18632 return interfaces[value - 1];
18633 }
18634 var i = 0;
18635 var len = interfaces.length;
18636 while (i < len) {
18637 if (interfaces[i]._name === value) {
18638 return interfaces[i];
18639 }
18640 i += 1;
18641 }
18642 return null;
18643 }
18644 function parentGroupWrapper() {
18645 return propertyGroup;
18646 }
18647 _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);
18648 interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);
18649 _interfaceFunction.numProperties = interfaces.length;
18650 _interfaceFunction._name = 'Contents';
18651 return _interfaceFunction;
18652 };
18653 }();
18654
18655 var TextExpressionInterface = function () {
18656 return function (elem) {
18657 var _sourceText;
18658 function _thisLayerFunction(name) {
18659 switch (name) {
18660 case 'ADBE Text Document':
18661 return _thisLayerFunction.sourceText;
18662 default:
18663 return null;
18664 }
18665 }
18666 Object.defineProperty(_thisLayerFunction, 'sourceText', {
18667 get: function get() {
18668 elem.textProperty.getValue();
18669 var stringValue = elem.textProperty.currentData.t;
18670 if (!_sourceText || stringValue !== _sourceText.value) {
18671 _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers
18672 // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive
18673 _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers
18674 Object.defineProperty(_sourceText, 'style', {
18675 get: function get() {
18676 return {
18677 fillColor: elem.textProperty.currentData.fc
18678 };
18679 }
18680 });
18681 }
18682 return _sourceText;
18683 }
18684 });
18685 return _thisLayerFunction;
18686 };
18687 }();
18688
18689 function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
18690 var FootageInterface = function () {
18691 var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {
18692 var currentPropertyName = '';
18693 var currentProperty = elem.getFootageData();
18694 function init() {
18695 currentPropertyName = '';
18696 currentProperty = elem.getFootageData();
18697 return searchProperty;
18698 }
18699 function searchProperty(value) {
18700 if (currentProperty[value]) {
18701 currentPropertyName = value;
18702 currentProperty = currentProperty[value];
18703 if (_typeof(currentProperty) === 'object') {
18704 return searchProperty;
18705 }
18706 return currentProperty;
18707 }
18708 var propertyNameIndex = value.indexOf(currentPropertyName);
18709 if (propertyNameIndex !== -1) {
18710 var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);
18711 currentProperty = currentProperty[index];
18712 if (_typeof(currentProperty) === 'object') {
18713 return searchProperty;
18714 }
18715 return currentProperty;
18716 }
18717 return '';
18718 }
18719 return init;
18720 };
18721 var dataInterfaceFactory = function dataInterfaceFactory(elem) {
18722 function interfaceFunction(value) {
18723 if (value === 'Outline') {
18724 return interfaceFunction.outlineInterface();
18725 }
18726 return null;
18727 }
18728 interfaceFunction._name = 'Outline';
18729 interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);
18730 return interfaceFunction;
18731 };
18732 return function (elem) {
18733 function _interfaceFunction(value) {
18734 if (value === 'Data') {
18735 return _interfaceFunction.dataInterface;
18736 }
18737 return null;
18738 }
18739 _interfaceFunction._name = 'Data';
18740 _interfaceFunction.dataInterface = dataInterfaceFactory(elem);
18741 return _interfaceFunction;
18742 };
18743 }();
18744
18745 var interfaces = {
18746 layer: LayerExpressionInterface,
18747 effects: EffectsExpressionInterface,
18748 comp: CompExpressionInterface,
18749 shape: ShapeExpressionInterface,
18750 text: TextExpressionInterface,
18751 footage: FootageInterface
18752 };
18753 function getInterface(type) {
18754 return interfaces[type] || null;
18755 }
18756
18757 var expressionHelpers = function () {
18758 function searchExpressions(elem, data, prop) {
18759 if (data.x) {
18760 prop.k = true;
18761 prop.x = true;
18762 prop.initiateExpression = ExpressionManager.initiateExpression;
18763 prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));
18764 }
18765 }
18766 function getValueAtTime(frameNum) {
18767 frameNum *= this.elem.globalData.frameRate;
18768 frameNum -= this.offsetTime;
18769 if (frameNum !== this._cachingAtTime.lastFrame) {
18770 this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;
18771 this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);
18772 this._cachingAtTime.lastFrame = frameNum;
18773 }
18774 return this._cachingAtTime.value;
18775 }
18776 function getSpeedAtTime(frameNum) {
18777 var delta = -0.01;
18778 var v1 = this.getValueAtTime(frameNum);
18779 var v2 = this.getValueAtTime(frameNum + delta);
18780 var speed = 0;
18781 if (v1.length) {
18782 var i;
18783 for (i = 0; i < v1.length; i += 1) {
18784 speed += Math.pow(v2[i] - v1[i], 2);
18785 }
18786 speed = Math.sqrt(speed) * 100;
18787 } else {
18788 speed = 0;
18789 }
18790 return speed;
18791 }
18792 function getVelocityAtTime(frameNum) {
18793 if (this.vel !== undefined) {
18794 return this.vel;
18795 }
18796 var delta = -0.001;
18797 // frameNum += this.elem.data.st;
18798 var v1 = this.getValueAtTime(frameNum);
18799 var v2 = this.getValueAtTime(frameNum + delta);
18800 var velocity;
18801 if (v1.length) {
18802 velocity = createTypedArray('float32', v1.length);
18803 var i;
18804 for (i = 0; i < v1.length; i += 1) {
18805 // removing frameRate
18806 // if needed, don't add it here
18807 // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);
18808 velocity[i] = (v2[i] - v1[i]) / delta;
18809 }
18810 } else {
18811 velocity = (v2 - v1) / delta;
18812 }
18813 return velocity;
18814 }
18815 function getStaticValueAtTime() {
18816 return this.pv;
18817 }
18818 function setGroupProperty(propertyGroup) {
18819 this.propertyGroup = propertyGroup;
18820 }
18821 return {
18822 searchExpressions: searchExpressions,
18823 getSpeedAtTime: getSpeedAtTime,
18824 getVelocityAtTime: getVelocityAtTime,
18825 getValueAtTime: getValueAtTime,
18826 getStaticValueAtTime: getStaticValueAtTime,
18827 setGroupProperty: setGroupProperty
18828 };
18829 }();
18830
18831 function addPropertyDecorator() {
18832 function loopOut(type, duration, durationFlag) {
18833 if (!this.k || !this.keyframes) {
18834 return this.pv;
18835 }
18836 type = type ? type.toLowerCase() : '';
18837 var currentFrame = this.comp.renderedFrame;
18838 var keyframes = this.keyframes;
18839 var lastKeyFrame = keyframes[keyframes.length - 1].t;
18840 if (currentFrame <= lastKeyFrame) {
18841 return this.pv;
18842 }
18843 var cycleDuration;
18844 var firstKeyFrame;
18845 if (!durationFlag) {
18846 if (!duration || duration > keyframes.length - 1) {
18847 duration = keyframes.length - 1;
18848 }
18849 firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;
18850 cycleDuration = lastKeyFrame - firstKeyFrame;
18851 } else {
18852 if (!duration) {
18853 cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);
18854 } else {
18855 cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);
18856 }
18857 firstKeyFrame = lastKeyFrame - cycleDuration;
18858 }
18859 var i;
18860 var len;
18861 var ret;
18862 if (type === 'pingpong') {
18863 var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);
18864 if (iterations % 2 !== 0) {
18865 return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line
18866 }
18867 } else if (type === 'offset') {
18868 var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);
18869 var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);
18870 var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line
18871 var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);
18872 if (this.pv.length) {
18873 ret = new Array(initV.length);
18874 len = ret.length;
18875 for (i = 0; i < len; i += 1) {
18876 ret[i] = (endV[i] - initV[i]) * repeats + current[i];
18877 }
18878 return ret;
18879 }
18880 return (endV - initV) * repeats + current;
18881 } else if (type === 'continue') {
18882 var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);
18883 var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);
18884 if (this.pv.length) {
18885 ret = new Array(lastValue.length);
18886 len = ret.length;
18887 for (i = 0; i < len; i += 1) {
18888 ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line
18889 }
18890 return ret;
18891 }
18892 return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);
18893 }
18894 return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line
18895 }
18896 function loopIn(type, duration, durationFlag) {
18897 if (!this.k) {
18898 return this.pv;
18899 }
18900 type = type ? type.toLowerCase() : '';
18901 var currentFrame = this.comp.renderedFrame;
18902 var keyframes = this.keyframes;
18903 var firstKeyFrame = keyframes[0].t;
18904 if (currentFrame >= firstKeyFrame) {
18905 return this.pv;
18906 }
18907 var cycleDuration;
18908 var lastKeyFrame;
18909 if (!durationFlag) {
18910 if (!duration || duration > keyframes.length - 1) {
18911 duration = keyframes.length - 1;
18912 }
18913 lastKeyFrame = keyframes[duration].t;
18914 cycleDuration = lastKeyFrame - firstKeyFrame;
18915 } else {
18916 if (!duration) {
18917 cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);
18918 } else {
18919 cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);
18920 }
18921 lastKeyFrame = firstKeyFrame + cycleDuration;
18922 }
18923 var i;
18924 var len;
18925 var ret;
18926 if (type === 'pingpong') {
18927 var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);
18928 if (iterations % 2 === 0) {
18929 return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line
18930 }
18931 } else if (type === 'offset') {
18932 var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);
18933 var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);
18934 var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);
18935 var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;
18936 if (this.pv.length) {
18937 ret = new Array(initV.length);
18938 len = ret.length;
18939 for (i = 0; i < len; i += 1) {
18940 ret[i] = current[i] - (endV[i] - initV[i]) * repeats;
18941 }
18942 return ret;
18943 }
18944 return current - (endV - initV) * repeats;
18945 } else if (type === 'continue') {
18946 var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);
18947 var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);
18948 if (this.pv.length) {
18949 ret = new Array(firstValue.length);
18950 len = ret.length;
18951 for (i = 0; i < len; i += 1) {
18952 ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;
18953 }
18954 return ret;
18955 }
18956 return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;
18957 }
18958 return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line
18959 }
18960 function smooth(width, samples) {
18961 if (!this.k) {
18962 return this.pv;
18963 }
18964 width = (width || 0.4) * 0.5;
18965 samples = Math.floor(samples || 5);
18966 if (samples <= 1) {
18967 return this.pv;
18968 }
18969 var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;
18970 var initFrame = currentTime - width;
18971 var endFrame = currentTime + width;
18972 var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;
18973 var i = 0;
18974 var j = 0;
18975 var value;
18976 if (this.pv.length) {
18977 value = createTypedArray('float32', this.pv.length);
18978 } else {
18979 value = 0;
18980 }
18981 var sampleValue;
18982 while (i < samples) {
18983 sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);
18984 if (this.pv.length) {
18985 for (j = 0; j < this.pv.length; j += 1) {
18986 value[j] += sampleValue[j];
18987 }
18988 } else {
18989 value += sampleValue;
18990 }
18991 i += 1;
18992 }
18993 if (this.pv.length) {
18994 for (j = 0; j < this.pv.length; j += 1) {
18995 value[j] /= samples;
18996 }
18997 } else {
18998 value /= samples;
18999 }
19000 return value;
19001 }
19002 function getTransformValueAtTime(time) {
19003 if (!this._transformCachingAtTime) {
19004 this._transformCachingAtTime = {
19005 v: new Matrix()
19006 };
19007 }
19008 /// /
19009 var matrix = this._transformCachingAtTime.v;
19010 matrix.cloneFromProps(this.pre.props);
19011 if (this.appliedTransformations < 1) {
19012 var anchor = this.a.getValueAtTime(time);
19013 matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);
19014 }
19015 if (this.appliedTransformations < 2) {
19016 var scale = this.s.getValueAtTime(time);
19017 matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);
19018 }
19019 if (this.sk && this.appliedTransformations < 3) {
19020 var skew = this.sk.getValueAtTime(time);
19021 var skewAxis = this.sa.getValueAtTime(time);
19022 matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);
19023 }
19024 if (this.r && this.appliedTransformations < 4) {
19025 var rotation = this.r.getValueAtTime(time);
19026 matrix.rotate(-rotation * this.r.mult);
19027 } else if (!this.r && this.appliedTransformations < 4) {
19028 var rotationZ = this.rz.getValueAtTime(time);
19029 var rotationY = this.ry.getValueAtTime(time);
19030 var rotationX = this.rx.getValueAtTime(time);
19031 var orientation = this.or.getValueAtTime(time);
19032 matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);
19033 }
19034 if (this.data.p && this.data.p.s) {
19035 var positionX = this.px.getValueAtTime(time);
19036 var positionY = this.py.getValueAtTime(time);
19037 if (this.data.p.z) {
19038 var positionZ = this.pz.getValueAtTime(time);
19039 matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);
19040 } else {
19041 matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);
19042 }
19043 } else {
19044 var position = this.p.getValueAtTime(time);
19045 matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);
19046 }
19047 return matrix;
19048 /// /
19049 }
19050 function getTransformStaticValueAtTime() {
19051 return this.v.clone(new Matrix());
19052 }
19053 var getTransformProperty = TransformPropertyFactory.getTransformProperty;
19054 TransformPropertyFactory.getTransformProperty = function (elem, data, container) {
19055 var prop = getTransformProperty(elem, data, container);
19056 if (prop.dynamicProperties.length) {
19057 prop.getValueAtTime = getTransformValueAtTime.bind(prop);
19058 } else {
19059 prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);
19060 }
19061 prop.setGroupProperty = expressionHelpers.setGroupProperty;
19062 return prop;
19063 };
19064 var propertyGetProp = PropertyFactory.getProp;
19065 PropertyFactory.getProp = function (elem, data, type, mult, container) {
19066 var prop = propertyGetProp(elem, data, type, mult, container);
19067 // prop.getVelocityAtTime = getVelocityAtTime;
19068 // prop.loopOut = loopOut;
19069 // prop.loopIn = loopIn;
19070 if (prop.kf) {
19071 prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);
19072 } else {
19073 prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);
19074 }
19075 prop.setGroupProperty = expressionHelpers.setGroupProperty;
19076 prop.loopOut = loopOut;
19077 prop.loopIn = loopIn;
19078 prop.smooth = smooth;
19079 prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);
19080 prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);
19081 prop.numKeys = data.a === 1 ? data.k.length : 0;
19082 prop.propertyIndex = data.ix;
19083 var value = 0;
19084 if (type !== 0) {
19085 value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);
19086 }
19087 prop._cachingAtTime = {
19088 lastFrame: initialDefaultFrame,
19089 lastIndex: 0,
19090 value: value
19091 };
19092 expressionHelpers.searchExpressions(elem, data, prop);
19093 if (prop.k) {
19094 container.addDynamicProperty(prop);
19095 }
19096 return prop;
19097 };
19098 function getShapeValueAtTime(frameNum) {
19099 // For now this caching object is created only when needed instead of creating it when the shape is initialized.
19100 if (!this._cachingAtTime) {
19101 this._cachingAtTime = {
19102 shapeValue: shapePool.clone(this.pv),
19103 lastIndex: 0,
19104 lastTime: initialDefaultFrame
19105 };
19106 }
19107 frameNum *= this.elem.globalData.frameRate;
19108 frameNum -= this.offsetTime;
19109 if (frameNum !== this._cachingAtTime.lastTime) {
19110 this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;
19111 this._cachingAtTime.lastTime = frameNum;
19112 this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);
19113 }
19114 return this._cachingAtTime.shapeValue;
19115 }
19116 var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();
19117 var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();
19118 function ShapeExpressions() {}
19119 ShapeExpressions.prototype = {
19120 vertices: function vertices(prop, time) {
19121 if (this.k) {
19122 this.getValue();
19123 }
19124 var shapePath = this.v;
19125 if (time !== undefined) {
19126 shapePath = this.getValueAtTime(time, 0);
19127 }
19128 var i;
19129 var len = shapePath._length;
19130 var vertices = shapePath[prop];
19131 var points = shapePath.v;
19132 var arr = createSizedArray(len);
19133 for (i = 0; i < len; i += 1) {
19134 if (prop === 'i' || prop === 'o') {
19135 arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];
19136 } else {
19137 arr[i] = [vertices[i][0], vertices[i][1]];
19138 }
19139 }
19140 return arr;
19141 },
19142 points: function points(time) {
19143 return this.vertices('v', time);
19144 },
19145 inTangents: function inTangents(time) {
19146 return this.vertices('i', time);
19147 },
19148 outTangents: function outTangents(time) {
19149 return this.vertices('o', time);
19150 },
19151 isClosed: function isClosed() {
19152 return this.v.c;
19153 },
19154 pointOnPath: function pointOnPath(perc, time) {
19155 var shapePath = this.v;
19156 if (time !== undefined) {
19157 shapePath = this.getValueAtTime(time, 0);
19158 }
19159 if (!this._segmentsLength) {
19160 this._segmentsLength = bez.getSegmentsLength(shapePath);
19161 }
19162 var segmentsLength = this._segmentsLength;
19163 var lengths = segmentsLength.lengths;
19164 var lengthPos = segmentsLength.totalLength * perc;
19165 var i = 0;
19166 var len = lengths.length;
19167 var accumulatedLength = 0;
19168 var pt;
19169 while (i < len) {
19170 if (accumulatedLength + lengths[i].addedLength > lengthPos) {
19171 var initIndex = i;
19172 var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;
19173 var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;
19174 pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);
19175 break;
19176 } else {
19177 accumulatedLength += lengths[i].addedLength;
19178 }
19179 i += 1;
19180 }
19181 if (!pt) {
19182 pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];
19183 }
19184 return pt;
19185 },
19186 vectorOnPath: function vectorOnPath(perc, time, vectorType) {
19187 // perc doesn't use triple equality because it can be a Number object as well as a primitive.
19188 if (perc == 1) {
19189 // eslint-disable-line eqeqeq
19190 perc = this.v.c;
19191 } else if (perc == 0) {
19192 // eslint-disable-line eqeqeq
19193 perc = 0.999;
19194 }
19195 var pt1 = this.pointOnPath(perc, time);
19196 var pt2 = this.pointOnPath(perc + 0.001, time);
19197 var xLength = pt2[0] - pt1[0];
19198 var yLength = pt2[1] - pt1[1];
19199 var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));
19200 if (magnitude === 0) {
19201 return [0, 0];
19202 }
19203 var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];
19204 return unitVector;
19205 },
19206 tangentOnPath: function tangentOnPath(perc, time) {
19207 return this.vectorOnPath(perc, time, 'tangent');
19208 },
19209 normalOnPath: function normalOnPath(perc, time) {
19210 return this.vectorOnPath(perc, time, 'normal');
19211 },
19212 setGroupProperty: expressionHelpers.setGroupProperty,
19213 getValueAtTime: expressionHelpers.getStaticValueAtTime
19214 };
19215 extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);
19216 extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);
19217 KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;
19218 KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;
19219 var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;
19220 ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {
19221 var prop = propertyGetShapeProp(elem, data, type, arr, trims);
19222 prop.propertyIndex = data.ix;
19223 prop.lock = false;
19224 if (type === 3) {
19225 expressionHelpers.searchExpressions(elem, data.pt, prop);
19226 } else if (type === 4) {
19227 expressionHelpers.searchExpressions(elem, data.ks, prop);
19228 }
19229 if (prop.k) {
19230 elem.addDynamicProperty(prop);
19231 }
19232 return prop;
19233 };
19234 }
19235 function initialize$1() {
19236 addPropertyDecorator();
19237 }
19238
19239 function addDecorator() {
19240 function searchExpressions() {
19241 if (this.data.d.x) {
19242 this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);
19243 this.addEffect(this.getExpressionValue.bind(this));
19244 return true;
19245 }
19246 return null;
19247 }
19248 TextProperty.prototype.getExpressionValue = function (currentValue, text) {
19249 var newValue = this.calculateExpression(text);
19250 if (currentValue.t !== newValue) {
19251 var newData = {};
19252 this.copyData(newData, currentValue);
19253 newData.t = newValue.toString();
19254 newData.__complete = false;
19255 return newData;
19256 }
19257 return currentValue;
19258 };
19259 TextProperty.prototype.searchProperty = function () {
19260 var isKeyframed = this.searchKeyframes();
19261 var hasExpressions = this.searchExpressions();
19262 this.kf = isKeyframed || hasExpressions;
19263 return this.kf;
19264 };
19265 TextProperty.prototype.searchExpressions = searchExpressions;
19266 }
19267 function initialize() {
19268 addDecorator();
19269 }
19270
19271 function SVGComposableEffect() {}
19272 SVGComposableEffect.prototype = {
19273 createMergeNode: function createMergeNode(resultId, ins) {
19274 var feMerge = createNS('feMerge');
19275 feMerge.setAttribute('result', resultId);
19276 var feMergeNode;
19277 var i;
19278 for (i = 0; i < ins.length; i += 1) {
19279 feMergeNode = createNS('feMergeNode');
19280 feMergeNode.setAttribute('in', ins[i]);
19281 feMerge.appendChild(feMergeNode);
19282 feMerge.appendChild(feMergeNode);
19283 }
19284 return feMerge;
19285 }
19286 };
19287
19288 var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';
19289 function SVGTintFilter(filter, filterManager, elem, id, source) {
19290 this.filterManager = filterManager;
19291 var feColorMatrix = createNS('feColorMatrix');
19292 feColorMatrix.setAttribute('type', 'matrix');
19293 feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');
19294 feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');
19295 this.linearFilter = feColorMatrix;
19296 feColorMatrix.setAttribute('result', id + '_tint_1');
19297 filter.appendChild(feColorMatrix);
19298 feColorMatrix = createNS('feColorMatrix');
19299 feColorMatrix.setAttribute('type', 'matrix');
19300 feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
19301 feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');
19302 feColorMatrix.setAttribute('result', id + '_tint_2');
19303 filter.appendChild(feColorMatrix);
19304 this.matrixFilter = feColorMatrix;
19305 var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);
19306 filter.appendChild(feMerge);
19307 }
19308 extendPrototype([SVGComposableEffect], SVGTintFilter);
19309 SVGTintFilter.prototype.renderFrame = function (forceRender) {
19310 if (forceRender || this.filterManager._mdf) {
19311 var colorBlack = this.filterManager.effectElements[0].p.v;
19312 var colorWhite = this.filterManager.effectElements[1].p.v;
19313 var opacity = this.filterManager.effectElements[2].p.v / 100;
19314 this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');
19315 this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');
19316 }
19317 };
19318
19319 function SVGFillFilter(filter, filterManager, elem, id) {
19320 this.filterManager = filterManager;
19321 var feColorMatrix = createNS('feColorMatrix');
19322 feColorMatrix.setAttribute('type', 'matrix');
19323 feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');
19324 feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');
19325 feColorMatrix.setAttribute('result', id);
19326 filter.appendChild(feColorMatrix);
19327 this.matrixFilter = feColorMatrix;
19328 }
19329 SVGFillFilter.prototype.renderFrame = function (forceRender) {
19330 if (forceRender || this.filterManager._mdf) {
19331 var color = this.filterManager.effectElements[2].p.v;
19332 var opacity = this.filterManager.effectElements[6].p.v;
19333 this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');
19334 }
19335 };
19336
19337 function SVGStrokeEffect(fil, filterManager, elem) {
19338 this.initialized = false;
19339 this.filterManager = filterManager;
19340 this.elem = elem;
19341 this.paths = [];
19342 }
19343 SVGStrokeEffect.prototype.initialize = function () {
19344 var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;
19345 var path;
19346 var groupPath;
19347 var i;
19348 var len;
19349 if (this.filterManager.effectElements[1].p.v === 1) {
19350 len = this.elem.maskManager.masksProperties.length;
19351 i = 0;
19352 } else {
19353 i = this.filterManager.effectElements[0].p.v - 1;
19354 len = i + 1;
19355 }
19356 groupPath = createNS('g');
19357 groupPath.setAttribute('fill', 'none');
19358 groupPath.setAttribute('stroke-linecap', 'round');
19359 groupPath.setAttribute('stroke-dashoffset', 1);
19360 for (i; i < len; i += 1) {
19361 path = createNS('path');
19362 groupPath.appendChild(path);
19363 this.paths.push({
19364 p: path,
19365 m: i
19366 });
19367 }
19368 if (this.filterManager.effectElements[10].p.v === 3) {
19369 var mask = createNS('mask');
19370 var id = createElementID();
19371 mask.setAttribute('id', id);
19372 mask.setAttribute('mask-type', 'alpha');
19373 mask.appendChild(groupPath);
19374 this.elem.globalData.defs.appendChild(mask);
19375 var g = createNS('g');
19376 g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');
19377 while (elemChildren[0]) {
19378 g.appendChild(elemChildren[0]);
19379 }
19380 this.elem.layerElement.appendChild(g);
19381 this.masker = mask;
19382 groupPath.setAttribute('stroke', '#fff');
19383 } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {
19384 if (this.filterManager.effectElements[10].p.v === 2) {
19385 elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;
19386 while (elemChildren.length) {
19387 this.elem.layerElement.removeChild(elemChildren[0]);
19388 }
19389 }
19390 this.elem.layerElement.appendChild(groupPath);
19391 this.elem.layerElement.removeAttribute('mask');
19392 groupPath.setAttribute('stroke', '#fff');
19393 }
19394 this.initialized = true;
19395 this.pathMasker = groupPath;
19396 };
19397 SVGStrokeEffect.prototype.renderFrame = function (forceRender) {
19398 if (!this.initialized) {
19399 this.initialize();
19400 }
19401 var i;
19402 var len = this.paths.length;
19403 var mask;
19404 var path;
19405 for (i = 0; i < len; i += 1) {
19406 if (this.paths[i].m !== -1) {
19407 mask = this.elem.maskManager.viewData[this.paths[i].m];
19408 path = this.paths[i].p;
19409 if (forceRender || this.filterManager._mdf || mask.prop._mdf) {
19410 path.setAttribute('d', mask.lastPath);
19411 }
19412 if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {
19413 var dasharrayValue;
19414 if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {
19415 var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;
19416 var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;
19417 var l = path.getTotalLength();
19418 dasharrayValue = '0 0 0 ' + l * s + ' ';
19419 var lineLength = l * (e - s);
19420 var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;
19421 var units = Math.floor(lineLength / segment);
19422 var j;
19423 for (j = 0; j < units; j += 1) {
19424 dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';
19425 }
19426 dasharrayValue += '0 ' + l * 10 + ' 0 0';
19427 } else {
19428 dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;
19429 }
19430 path.setAttribute('stroke-dasharray', dasharrayValue);
19431 }
19432 }
19433 }
19434 if (forceRender || this.filterManager.effectElements[4].p._mdf) {
19435 this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);
19436 }
19437 if (forceRender || this.filterManager.effectElements[6].p._mdf) {
19438 this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);
19439 }
19440 if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {
19441 if (forceRender || this.filterManager.effectElements[3].p._mdf) {
19442 var color = this.filterManager.effectElements[3].p.v;
19443 this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');
19444 }
19445 }
19446 };
19447
19448 function SVGTritoneFilter(filter, filterManager, elem, id) {
19449 this.filterManager = filterManager;
19450 var feColorMatrix = createNS('feColorMatrix');
19451 feColorMatrix.setAttribute('type', 'matrix');
19452 feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');
19453 feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');
19454 filter.appendChild(feColorMatrix);
19455 var feComponentTransfer = createNS('feComponentTransfer');
19456 feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
19457 feComponentTransfer.setAttribute('result', id);
19458 this.matrixFilter = feComponentTransfer;
19459 var feFuncR = createNS('feFuncR');
19460 feFuncR.setAttribute('type', 'table');
19461 feComponentTransfer.appendChild(feFuncR);
19462 this.feFuncR = feFuncR;
19463 var feFuncG = createNS('feFuncG');
19464 feFuncG.setAttribute('type', 'table');
19465 feComponentTransfer.appendChild(feFuncG);
19466 this.feFuncG = feFuncG;
19467 var feFuncB = createNS('feFuncB');
19468 feFuncB.setAttribute('type', 'table');
19469 feComponentTransfer.appendChild(feFuncB);
19470 this.feFuncB = feFuncB;
19471 filter.appendChild(feComponentTransfer);
19472 }
19473 SVGTritoneFilter.prototype.renderFrame = function (forceRender) {
19474 if (forceRender || this.filterManager._mdf) {
19475 var color1 = this.filterManager.effectElements[0].p.v;
19476 var color2 = this.filterManager.effectElements[1].p.v;
19477 var color3 = this.filterManager.effectElements[2].p.v;
19478 var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];
19479 var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];
19480 var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];
19481 this.feFuncR.setAttribute('tableValues', tableR);
19482 this.feFuncG.setAttribute('tableValues', tableG);
19483 this.feFuncB.setAttribute('tableValues', tableB);
19484 }
19485 };
19486
19487 function SVGProLevelsFilter(filter, filterManager, elem, id) {
19488 this.filterManager = filterManager;
19489 var effectElements = this.filterManager.effectElements;
19490 var feComponentTransfer = createNS('feComponentTransfer');
19491
19492 // Red
19493 if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {
19494 this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);
19495 }
19496 // Green
19497 if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {
19498 this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);
19499 }
19500 // Blue
19501 if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {
19502 this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);
19503 }
19504 // Alpha
19505 if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {
19506 this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);
19507 }
19508 // RGB
19509 if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {
19510 feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
19511 filter.appendChild(feComponentTransfer);
19512 }
19513 if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {
19514 feComponentTransfer = createNS('feComponentTransfer');
19515 feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
19516 feComponentTransfer.setAttribute('result', id);
19517 filter.appendChild(feComponentTransfer);
19518 this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);
19519 this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);
19520 this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);
19521 }
19522 }
19523 SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {
19524 var feFunc = createNS(type);
19525 feFunc.setAttribute('type', 'table');
19526 feComponentTransfer.appendChild(feFunc);
19527 return feFunc;
19528 };
19529 SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {
19530 var cnt = 0;
19531 var segments = 256;
19532 var perc;
19533 var min = Math.min(inputBlack, inputWhite);
19534 var max = Math.max(inputBlack, inputWhite);
19535 var table = Array.call(null, {
19536 length: segments
19537 });
19538 var colorValue;
19539 var pos = 0;
19540 var outputDelta = outputWhite - outputBlack;
19541 var inputDelta = inputWhite - inputBlack;
19542 while (cnt <= 256) {
19543 perc = cnt / 256;
19544 if (perc <= min) {
19545 colorValue = inputDelta < 0 ? outputWhite : outputBlack;
19546 } else if (perc >= max) {
19547 colorValue = inputDelta < 0 ? outputBlack : outputWhite;
19548 } else {
19549 colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);
19550 }
19551 table[pos] = colorValue;
19552 pos += 1;
19553 cnt += 256 / (segments - 1);
19554 }
19555 return table.join(' ');
19556 };
19557 SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {
19558 if (forceRender || this.filterManager._mdf) {
19559 var val;
19560 var effectElements = this.filterManager.effectElements;
19561 if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {
19562 val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);
19563 this.feFuncRComposed.setAttribute('tableValues', val);
19564 this.feFuncGComposed.setAttribute('tableValues', val);
19565 this.feFuncBComposed.setAttribute('tableValues', val);
19566 }
19567 if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {
19568 val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);
19569 this.feFuncR.setAttribute('tableValues', val);
19570 }
19571 if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {
19572 val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);
19573 this.feFuncG.setAttribute('tableValues', val);
19574 }
19575 if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {
19576 val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);
19577 this.feFuncB.setAttribute('tableValues', val);
19578 }
19579 if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {
19580 val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);
19581 this.feFuncA.setAttribute('tableValues', val);
19582 }
19583 }
19584 };
19585
19586 function SVGDropShadowEffect(filter, filterManager, elem, id, source) {
19587 var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;
19588 var filterSize = filterManager.data.fs || globalFilterSize;
19589 filter.setAttribute('x', filterSize.x || globalFilterSize.x);
19590 filter.setAttribute('y', filterSize.y || globalFilterSize.y);
19591 filter.setAttribute('width', filterSize.width || globalFilterSize.width);
19592 filter.setAttribute('height', filterSize.height || globalFilterSize.height);
19593 this.filterManager = filterManager;
19594 var feGaussianBlur = createNS('feGaussianBlur');
19595 feGaussianBlur.setAttribute('in', 'SourceAlpha');
19596 feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');
19597 feGaussianBlur.setAttribute('stdDeviation', '0');
19598 this.feGaussianBlur = feGaussianBlur;
19599 filter.appendChild(feGaussianBlur);
19600 var feOffset = createNS('feOffset');
19601 feOffset.setAttribute('dx', '25');
19602 feOffset.setAttribute('dy', '0');
19603 feOffset.setAttribute('in', id + '_drop_shadow_1');
19604 feOffset.setAttribute('result', id + '_drop_shadow_2');
19605 this.feOffset = feOffset;
19606 filter.appendChild(feOffset);
19607 var feFlood = createNS('feFlood');
19608 feFlood.setAttribute('flood-color', '#00ff00');
19609 feFlood.setAttribute('flood-opacity', '1');
19610 feFlood.setAttribute('result', id + '_drop_shadow_3');
19611 this.feFlood = feFlood;
19612 filter.appendChild(feFlood);
19613 var feComposite = createNS('feComposite');
19614 feComposite.setAttribute('in', id + '_drop_shadow_3');
19615 feComposite.setAttribute('in2', id + '_drop_shadow_2');
19616 feComposite.setAttribute('operator', 'in');
19617 feComposite.setAttribute('result', id + '_drop_shadow_4');
19618 filter.appendChild(feComposite);
19619 var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);
19620 filter.appendChild(feMerge);
19621 //
19622 }
19623 extendPrototype([SVGComposableEffect], SVGDropShadowEffect);
19624 SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {
19625 if (forceRender || this.filterManager._mdf) {
19626 if (forceRender || this.filterManager.effectElements[4].p._mdf) {
19627 this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);
19628 }
19629 if (forceRender || this.filterManager.effectElements[0].p._mdf) {
19630 var col = this.filterManager.effectElements[0].p.v;
19631 this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));
19632 }
19633 if (forceRender || this.filterManager.effectElements[1].p._mdf) {
19634 this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);
19635 }
19636 if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {
19637 var distance = this.filterManager.effectElements[3].p.v;
19638 var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;
19639 var x = distance * Math.cos(angle);
19640 var y = distance * Math.sin(angle);
19641 this.feOffset.setAttribute('dx', x);
19642 this.feOffset.setAttribute('dy', y);
19643 }
19644 }
19645 };
19646
19647 var _svgMatteSymbols = [];
19648 function SVGMatte3Effect(filterElem, filterManager, elem) {
19649 this.initialized = false;
19650 this.filterManager = filterManager;
19651 this.filterElem = filterElem;
19652 this.elem = elem;
19653 elem.matteElement = createNS('g');
19654 elem.matteElement.appendChild(elem.layerElement);
19655 elem.matteElement.appendChild(elem.transformedElement);
19656 elem.baseElement = elem.matteElement;
19657 }
19658 SVGMatte3Effect.prototype.findSymbol = function (mask) {
19659 var i = 0;
19660 var len = _svgMatteSymbols.length;
19661 while (i < len) {
19662 if (_svgMatteSymbols[i] === mask) {
19663 return _svgMatteSymbols[i];
19664 }
19665 i += 1;
19666 }
19667 return null;
19668 };
19669 SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {
19670 var parentNode = mask.layerElement.parentNode;
19671 if (!parentNode) {
19672 return;
19673 }
19674 var children = parentNode.children;
19675 var i = 0;
19676 var len = children.length;
19677 while (i < len) {
19678 if (children[i] === mask.layerElement) {
19679 break;
19680 }
19681 i += 1;
19682 }
19683 var nextChild;
19684 if (i <= len - 2) {
19685 nextChild = children[i + 1];
19686 }
19687 var useElem = createNS('use');
19688 useElem.setAttribute('href', '#' + symbolId);
19689 if (nextChild) {
19690 parentNode.insertBefore(useElem, nextChild);
19691 } else {
19692 parentNode.appendChild(useElem);
19693 }
19694 };
19695 SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {
19696 if (!this.findSymbol(mask)) {
19697 var symbolId = createElementID();
19698 var masker = createNS('mask');
19699 masker.setAttribute('id', mask.layerId);
19700 masker.setAttribute('mask-type', 'alpha');
19701 _svgMatteSymbols.push(mask);
19702 var defs = elem.globalData.defs;
19703 defs.appendChild(masker);
19704 var symbol = createNS('symbol');
19705 symbol.setAttribute('id', symbolId);
19706 this.replaceInParent(mask, symbolId);
19707 symbol.appendChild(mask.layerElement);
19708 defs.appendChild(symbol);
19709 var useElem = createNS('use');
19710 useElem.setAttribute('href', '#' + symbolId);
19711 masker.appendChild(useElem);
19712 mask.data.hd = false;
19713 mask.show();
19714 }
19715 elem.setMatte(mask.layerId);
19716 };
19717 SVGMatte3Effect.prototype.initialize = function () {
19718 var ind = this.filterManager.effectElements[0].p.v;
19719 var elements = this.elem.comp.elements;
19720 var i = 0;
19721 var len = elements.length;
19722 while (i < len) {
19723 if (elements[i] && elements[i].data.ind === ind) {
19724 this.setElementAsMask(this.elem, elements[i]);
19725 }
19726 i += 1;
19727 }
19728 this.initialized = true;
19729 };
19730 SVGMatte3Effect.prototype.renderFrame = function () {
19731 if (!this.initialized) {
19732 this.initialize();
19733 }
19734 };
19735
19736 function SVGGaussianBlurEffect(filter, filterManager, elem, id) {
19737 // Outset the filter region by 100% on all sides to accommodate blur expansion.
19738 filter.setAttribute('x', '-100%');
19739 filter.setAttribute('y', '-100%');
19740 filter.setAttribute('width', '300%');
19741 filter.setAttribute('height', '300%');
19742 this.filterManager = filterManager;
19743 var feGaussianBlur = createNS('feGaussianBlur');
19744 feGaussianBlur.setAttribute('result', id);
19745 filter.appendChild(feGaussianBlur);
19746 this.feGaussianBlur = feGaussianBlur;
19747 }
19748 SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {
19749 if (forceRender || this.filterManager._mdf) {
19750 // Empirical value, matching AE's blur appearance.
19751 var kBlurrinessToSigma = 0.3;
19752 var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;
19753
19754 // Dimensions mapping:
19755 //
19756 // 1 -> horizontal & vertical
19757 // 2 -> horizontal only
19758 // 3 -> vertical only
19759 //
19760 var dimensions = this.filterManager.effectElements[1].p.v;
19761 var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq
19762 var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq
19763
19764 this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);
19765
19766 // Repeat edges mapping:
19767 //
19768 // 0 -> off -> duplicate
19769 // 1 -> on -> wrap
19770 var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq
19771 this.feGaussianBlur.setAttribute('edgeMode', edgeMode);
19772 }
19773 };
19774
19775 function TransformEffect() {}
19776 TransformEffect.prototype.init = function (effectsManager) {
19777 this.effectsManager = effectsManager;
19778 this.type = effectTypes.TRANSFORM_EFFECT;
19779 this.matrix = new Matrix();
19780 this.opacity = -1;
19781 this._mdf = false;
19782 this._opMdf = false;
19783 };
19784 TransformEffect.prototype.renderFrame = function (forceFrame) {
19785 this._opMdf = false;
19786 this._mdf = false;
19787 if (forceFrame || this.effectsManager._mdf) {
19788 var effectElements = this.effectsManager.effectElements;
19789 var anchor = effectElements[0].p.v;
19790 var position = effectElements[1].p.v;
19791 var isUniformScale = effectElements[2].p.v === 1;
19792 var scaleHeight = effectElements[3].p.v;
19793 var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;
19794 var skew = effectElements[5].p.v;
19795 var skewAxis = effectElements[6].p.v;
19796 var rotation = effectElements[7].p.v;
19797 this.matrix.reset();
19798 this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);
19799 this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);
19800 this.matrix.rotate(-rotation * degToRads);
19801 this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);
19802 this.matrix.translate(position[0], position[1], 0);
19803 this._mdf = true;
19804 if (this.opacity !== effectElements[8].p.v) {
19805 this.opacity = effectElements[8].p.v;
19806 this._opMdf = true;
19807 }
19808 }
19809 };
19810
19811 function SVGTransformEffect(_, filterManager) {
19812 this.init(filterManager);
19813 }
19814 extendPrototype([TransformEffect], SVGTransformEffect);
19815
19816 function CVTransformEffect(effectsManager) {
19817 this.init(effectsManager);
19818 }
19819 extendPrototype([TransformEffect], CVTransformEffect);
19820
19821 // Registering renderers
19822 registerRenderer('canvas', CanvasRenderer);
19823 registerRenderer('html', HybridRenderer);
19824 registerRenderer('svg', SVGRenderer);
19825
19826 // Registering shape modifiers
19827 ShapeModifiers.registerModifier('tm', TrimModifier);
19828 ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);
19829 ShapeModifiers.registerModifier('rp', RepeaterModifier);
19830 ShapeModifiers.registerModifier('rd', RoundCornersModifier);
19831 ShapeModifiers.registerModifier('zz', ZigZagModifier);
19832 ShapeModifiers.registerModifier('op', OffsetPathModifier);
19833
19834 // Registering expression plugin
19835 setExpressionsPlugin(Expressions);
19836 setExpressionInterfaces(getInterface);
19837 initialize$1();
19838 initialize();
19839
19840 // Registering svg effects
19841 registerEffect$1(20, SVGTintFilter, true);
19842 registerEffect$1(21, SVGFillFilter, true);
19843 registerEffect$1(22, SVGStrokeEffect, false);
19844 registerEffect$1(23, SVGTritoneFilter, true);
19845 registerEffect$1(24, SVGProLevelsFilter, true);
19846 registerEffect$1(25, SVGDropShadowEffect, true);
19847 registerEffect$1(28, SVGMatte3Effect, false);
19848 registerEffect$1(29, SVGGaussianBlurEffect, true);
19849 registerEffect$1(35, SVGTransformEffect, false);
19850 registerEffect(35, CVTransformEffect);
19851
19852 return lottie;
19853
19854 }));
19855
19856
19857 /***/ }),
19858
19859 /***/ "../node_modules/object-assign/index.js":
19860 /*!**********************************************!*\
19861 !*** ../node_modules/object-assign/index.js ***!
19862 \**********************************************/
19863 /***/ ((module) => {
19864
19865 "use strict";
19866 /*
19867 object-assign
19868 (c) Sindre Sorhus
19869 @license MIT
19870 */
19871
19872
19873 /* eslint-disable no-unused-vars */
19874 var getOwnPropertySymbols = Object.getOwnPropertySymbols;
19875 var hasOwnProperty = Object.prototype.hasOwnProperty;
19876 var propIsEnumerable = Object.prototype.propertyIsEnumerable;
19877
19878 function toObject(val) {
19879 if (val === null || val === undefined) {
19880 throw new TypeError('Object.assign cannot be called with null or undefined');
19881 }
19882
19883 return Object(val);
19884 }
19885
19886 function shouldUseNative() {
19887 try {
19888 if (!Object.assign) {
19889 return false;
19890 }
19891
19892 // Detect buggy property enumeration order in older V8 versions.
19893
19894 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
19895 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
19896 test1[5] = 'de';
19897 if (Object.getOwnPropertyNames(test1)[0] === '5') {
19898 return false;
19899 }
19900
19901 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
19902 var test2 = {};
19903 for (var i = 0; i < 10; i++) {
19904 test2['_' + String.fromCharCode(i)] = i;
19905 }
19906 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
19907 return test2[n];
19908 });
19909 if (order2.join('') !== '0123456789') {
19910 return false;
19911 }
19912
19913 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
19914 var test3 = {};
19915 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
19916 test3[letter] = letter;
19917 });
19918 if (Object.keys(Object.assign({}, test3)).join('') !==
19919 'abcdefghijklmnopqrst') {
19920 return false;
19921 }
19922
19923 return true;
19924 } catch (err) {
19925 // We don't expect any of the above to throw, but better to be safe.
19926 return false;
19927 }
19928 }
19929
19930 module.exports = shouldUseNative() ? Object.assign : function (target, source) {
19931 var from;
19932 var to = toObject(target);
19933 var symbols;
19934
19935 for (var s = 1; s < arguments.length; s++) {
19936 from = Object(arguments[s]);
19937
19938 for (var key in from) {
19939 if (hasOwnProperty.call(from, key)) {
19940 to[key] = from[key];
19941 }
19942 }
19943
19944 if (getOwnPropertySymbols) {
19945 symbols = getOwnPropertySymbols(from);
19946 for (var i = 0; i < symbols.length; i++) {
19947 if (propIsEnumerable.call(from, symbols[i])) {
19948 to[symbols[i]] = from[symbols[i]];
19949 }
19950 }
19951 }
19952 }
19953
19954 return to;
19955 };
19956
19957
19958 /***/ }),
19959
19960 /***/ "../node_modules/prop-types/checkPropTypes.js":
19961 /*!****************************************************!*\
19962 !*** ../node_modules/prop-types/checkPropTypes.js ***!
19963 \****************************************************/
19964 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19965
19966 "use strict";
19967 /**
19968 * Copyright (c) 2013-present, Facebook, Inc.
19969 *
19970 * This source code is licensed under the MIT license found in the
19971 * LICENSE file in the root directory of this source tree.
19972 */
19973
19974
19975
19976 var printWarning = function() {};
19977
19978 if (true) {
19979 var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js");
19980 var loggedTypeFailures = {};
19981 var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js");
19982
19983 printWarning = function(text) {
19984 var message = 'Warning: ' + text;
19985 if (typeof console !== 'undefined') {
19986 console.error(message);
19987 }
19988 try {
19989 // --- Welcome to debugging React ---
19990 // This error was thrown as a convenience so that you can use this stack
19991 // to find the callsite that caused this warning to fire.
19992 throw new Error(message);
19993 } catch (x) { /**/ }
19994 };
19995 }
19996
19997 /**
19998 * Assert that the values match with the type specs.
19999 * Error messages are memorized and will only be shown once.
20000 *
20001 * @param {object} typeSpecs Map of name to a ReactPropType
20002 * @param {object} values Runtime values that need to be type-checked
20003 * @param {string} location e.g. "prop", "context", "child context"
20004 * @param {string} componentName Name of the component for error messages.
20005 * @param {?Function} getStack Returns the component stack.
20006 * @private
20007 */
20008 function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
20009 if (true) {
20010 for (var typeSpecName in typeSpecs) {
20011 if (has(typeSpecs, typeSpecName)) {
20012 var error;
20013 // Prop type validation may throw. In case they do, we don't want to
20014 // fail the render phase where it didn't fail before. So we log it.
20015 // After these have been cleaned up, we'll let them throw.
20016 try {
20017 // This is intentionally an invariant that gets caught. It's the same
20018 // behavior as without this statement except with a better message.
20019 if (typeof typeSpecs[typeSpecName] !== 'function') {
20020 var err = Error(
20021 (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
20022 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
20023 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
20024 );
20025 err.name = 'Invariant Violation';
20026 throw err;
20027 }
20028 error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
20029 } catch (ex) {
20030 error = ex;
20031 }
20032 if (error && !(error instanceof Error)) {
20033 printWarning(
20034 (componentName || 'React class') + ': type specification of ' +
20035 location + ' `' + typeSpecName + '` is invalid; the type checker ' +
20036 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
20037 'You may have forgotten to pass an argument to the type checker ' +
20038 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
20039 'shape all require an argument).'
20040 );
20041 }
20042 if (error instanceof Error && !(error.message in loggedTypeFailures)) {
20043 // Only monitor this failure once because there tends to be a lot of the
20044 // same error.
20045 loggedTypeFailures[error.message] = true;
20046
20047 var stack = getStack ? getStack() : '';
20048
20049 printWarning(
20050 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
20051 );
20052 }
20053 }
20054 }
20055 }
20056 }
20057
20058 /**
20059 * Resets warning cache when testing.
20060 *
20061 * @private
20062 */
20063 checkPropTypes.resetWarningCache = function() {
20064 if (true) {
20065 loggedTypeFailures = {};
20066 }
20067 }
20068
20069 module.exports = checkPropTypes;
20070
20071
20072 /***/ }),
20073
20074 /***/ "../node_modules/prop-types/factoryWithTypeCheckers.js":
20075 /*!*************************************************************!*\
20076 !*** ../node_modules/prop-types/factoryWithTypeCheckers.js ***!
20077 \*************************************************************/
20078 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20079
20080 "use strict";
20081 /**
20082 * Copyright (c) 2013-present, Facebook, Inc.
20083 *
20084 * This source code is licensed under the MIT license found in the
20085 * LICENSE file in the root directory of this source tree.
20086 */
20087
20088
20089
20090 var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js");
20091 var assign = __webpack_require__(/*! object-assign */ "../node_modules/object-assign/index.js");
20092
20093 var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js");
20094 var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js");
20095 var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "../node_modules/prop-types/checkPropTypes.js");
20096
20097 var printWarning = function() {};
20098
20099 if (true) {
20100 printWarning = function(text) {
20101 var message = 'Warning: ' + text;
20102 if (typeof console !== 'undefined') {
20103 console.error(message);
20104 }
20105 try {
20106 // --- Welcome to debugging React ---
20107 // This error was thrown as a convenience so that you can use this stack
20108 // to find the callsite that caused this warning to fire.
20109 throw new Error(message);
20110 } catch (x) {}
20111 };
20112 }
20113
20114 function emptyFunctionThatReturnsNull() {
20115 return null;
20116 }
20117
20118 module.exports = function(isValidElement, throwOnDirectAccess) {
20119 /* global Symbol */
20120 var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
20121 var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
20122
20123 /**
20124 * Returns the iterator method function contained on the iterable object.
20125 *
20126 * Be sure to invoke the function with the iterable as context:
20127 *
20128 * var iteratorFn = getIteratorFn(myIterable);
20129 * if (iteratorFn) {
20130 * var iterator = iteratorFn.call(myIterable);
20131 * ...
20132 * }
20133 *
20134 * @param {?object} maybeIterable
20135 * @return {?function}
20136 */
20137 function getIteratorFn(maybeIterable) {
20138 var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
20139 if (typeof iteratorFn === 'function') {
20140 return iteratorFn;
20141 }
20142 }
20143
20144 /**
20145 * Collection of methods that allow declaration and validation of props that are
20146 * supplied to React components. Example usage:
20147 *
20148 * var Props = require('ReactPropTypes');
20149 * var MyArticle = React.createClass({
20150 * propTypes: {
20151 * // An optional string prop named "description".
20152 * description: Props.string,
20153 *
20154 * // A required enum prop named "category".
20155 * category: Props.oneOf(['News','Photos']).isRequired,
20156 *
20157 * // A prop named "dialog" that requires an instance of Dialog.
20158 * dialog: Props.instanceOf(Dialog).isRequired
20159 * },
20160 * render: function() { ... }
20161 * });
20162 *
20163 * A more formal specification of how these methods are used:
20164 *
20165 * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
20166 * decl := ReactPropTypes.{type}(.isRequired)?
20167 *
20168 * Each and every declaration produces a function with the same signature. This
20169 * allows the creation of custom validation functions. For example:
20170 *
20171 * var MyLink = React.createClass({
20172 * propTypes: {
20173 * // An optional string or URI prop named "href".
20174 * href: function(props, propName, componentName) {
20175 * var propValue = props[propName];
20176 * if (propValue != null && typeof propValue !== 'string' &&
20177 * !(propValue instanceof URI)) {
20178 * return new Error(
20179 * 'Expected a string or an URI for ' + propName + ' in ' +
20180 * componentName
20181 * );
20182 * }
20183 * }
20184 * },
20185 * render: function() {...}
20186 * });
20187 *
20188 * @internal
20189 */
20190
20191 var ANONYMOUS = '<<anonymous>>';
20192
20193 // Important!
20194 // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
20195 var ReactPropTypes = {
20196 array: createPrimitiveTypeChecker('array'),
20197 bigint: createPrimitiveTypeChecker('bigint'),
20198 bool: createPrimitiveTypeChecker('boolean'),
20199 func: createPrimitiveTypeChecker('function'),
20200 number: createPrimitiveTypeChecker('number'),
20201 object: createPrimitiveTypeChecker('object'),
20202 string: createPrimitiveTypeChecker('string'),
20203 symbol: createPrimitiveTypeChecker('symbol'),
20204
20205 any: createAnyTypeChecker(),
20206 arrayOf: createArrayOfTypeChecker,
20207 element: createElementTypeChecker(),
20208 elementType: createElementTypeTypeChecker(),
20209 instanceOf: createInstanceTypeChecker,
20210 node: createNodeChecker(),
20211 objectOf: createObjectOfTypeChecker,
20212 oneOf: createEnumTypeChecker,
20213 oneOfType: createUnionTypeChecker,
20214 shape: createShapeTypeChecker,
20215 exact: createStrictShapeTypeChecker,
20216 };
20217
20218 /**
20219 * inlined Object.is polyfill to avoid requiring consumers ship their own
20220 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
20221 */
20222 /*eslint-disable no-self-compare*/
20223 function is(x, y) {
20224 // SameValue algorithm
20225 if (x === y) {
20226 // Steps 1-5, 7-10
20227 // Steps 6.b-6.e: +0 != -0
20228 return x !== 0 || 1 / x === 1 / y;
20229 } else {
20230 // Step 6.a: NaN == NaN
20231 return x !== x && y !== y;
20232 }
20233 }
20234 /*eslint-enable no-self-compare*/
20235
20236 /**
20237 * We use an Error-like object for backward compatibility as people may call
20238 * PropTypes directly and inspect their output. However, we don't use real
20239 * Errors anymore. We don't inspect their stack anyway, and creating them
20240 * is prohibitively expensive if they are created too often, such as what
20241 * happens in oneOfType() for any type before the one that matched.
20242 */
20243 function PropTypeError(message, data) {
20244 this.message = message;
20245 this.data = data && typeof data === 'object' ? data: {};
20246 this.stack = '';
20247 }
20248 // Make `instanceof Error` still work for returned errors.
20249 PropTypeError.prototype = Error.prototype;
20250
20251 function createChainableTypeChecker(validate) {
20252 if (true) {
20253 var manualPropTypeCallCache = {};
20254 var manualPropTypeWarningCount = 0;
20255 }
20256 function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
20257 componentName = componentName || ANONYMOUS;
20258 propFullName = propFullName || propName;
20259
20260 if (secret !== ReactPropTypesSecret) {
20261 if (throwOnDirectAccess) {
20262 // New behavior only for users of `prop-types` package
20263 var err = new Error(
20264 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
20265 'Use `PropTypes.checkPropTypes()` to call them. ' +
20266 'Read more at http://fb.me/use-check-prop-types'
20267 );
20268 err.name = 'Invariant Violation';
20269 throw err;
20270 } else if ( true && typeof console !== 'undefined') {
20271 // Old behavior for people using React.PropTypes
20272 var cacheKey = componentName + ':' + propName;
20273 if (
20274 !manualPropTypeCallCache[cacheKey] &&
20275 // Avoid spamming the console because they are often not actionable except for lib authors
20276 manualPropTypeWarningCount < 3
20277 ) {
20278 printWarning(
20279 'You are manually calling a React.PropTypes validation ' +
20280 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
20281 'and will throw in the standalone `prop-types` package. ' +
20282 'You may be seeing this warning due to a third-party PropTypes ' +
20283 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
20284 );
20285 manualPropTypeCallCache[cacheKey] = true;
20286 manualPropTypeWarningCount++;
20287 }
20288 }
20289 }
20290 if (props[propName] == null) {
20291 if (isRequired) {
20292 if (props[propName] === null) {
20293 return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
20294 }
20295 return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
20296 }
20297 return null;
20298 } else {
20299 return validate(props, propName, componentName, location, propFullName);
20300 }
20301 }
20302
20303 var chainedCheckType = checkType.bind(null, false);
20304 chainedCheckType.isRequired = checkType.bind(null, true);
20305
20306 return chainedCheckType;
20307 }
20308
20309 function createPrimitiveTypeChecker(expectedType) {
20310 function validate(props, propName, componentName, location, propFullName, secret) {
20311 var propValue = props[propName];
20312 var propType = getPropType(propValue);
20313 if (propType !== expectedType) {
20314 // `propValue` being instance of, say, date/regexp, pass the 'object'
20315 // check, but we can offer a more precise error message here rather than
20316 // 'of type `object`'.
20317 var preciseType = getPreciseType(propValue);
20318
20319 return new PropTypeError(
20320 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
20321 {expectedType: expectedType}
20322 );
20323 }
20324 return null;
20325 }
20326 return createChainableTypeChecker(validate);
20327 }
20328
20329 function createAnyTypeChecker() {
20330 return createChainableTypeChecker(emptyFunctionThatReturnsNull);
20331 }
20332
20333 function createArrayOfTypeChecker(typeChecker) {
20334 function validate(props, propName, componentName, location, propFullName) {
20335 if (typeof typeChecker !== 'function') {
20336 return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
20337 }
20338 var propValue = props[propName];
20339 if (!Array.isArray(propValue)) {
20340 var propType = getPropType(propValue);
20341 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
20342 }
20343 for (var i = 0; i < propValue.length; i++) {
20344 var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
20345 if (error instanceof Error) {
20346 return error;
20347 }
20348 }
20349 return null;
20350 }
20351 return createChainableTypeChecker(validate);
20352 }
20353
20354 function createElementTypeChecker() {
20355 function validate(props, propName, componentName, location, propFullName) {
20356 var propValue = props[propName];
20357 if (!isValidElement(propValue)) {
20358 var propType = getPropType(propValue);
20359 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
20360 }
20361 return null;
20362 }
20363 return createChainableTypeChecker(validate);
20364 }
20365
20366 function createElementTypeTypeChecker() {
20367 function validate(props, propName, componentName, location, propFullName) {
20368 var propValue = props[propName];
20369 if (!ReactIs.isValidElementType(propValue)) {
20370 var propType = getPropType(propValue);
20371 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
20372 }
20373 return null;
20374 }
20375 return createChainableTypeChecker(validate);
20376 }
20377
20378 function createInstanceTypeChecker(expectedClass) {
20379 function validate(props, propName, componentName, location, propFullName) {
20380 if (!(props[propName] instanceof expectedClass)) {
20381 var expectedClassName = expectedClass.name || ANONYMOUS;
20382 var actualClassName = getClassName(props[propName]);
20383 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
20384 }
20385 return null;
20386 }
20387 return createChainableTypeChecker(validate);
20388 }
20389
20390 function createEnumTypeChecker(expectedValues) {
20391 if (!Array.isArray(expectedValues)) {
20392 if (true) {
20393 if (arguments.length > 1) {
20394 printWarning(
20395 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
20396 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
20397 );
20398 } else {
20399 printWarning('Invalid argument supplied to oneOf, expected an array.');
20400 }
20401 }
20402 return emptyFunctionThatReturnsNull;
20403 }
20404
20405 function validate(props, propName, componentName, location, propFullName) {
20406 var propValue = props[propName];
20407 for (var i = 0; i < expectedValues.length; i++) {
20408 if (is(propValue, expectedValues[i])) {
20409 return null;
20410 }
20411 }
20412
20413 var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
20414 var type = getPreciseType(value);
20415 if (type === 'symbol') {
20416 return String(value);
20417 }
20418 return value;
20419 });
20420 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
20421 }
20422 return createChainableTypeChecker(validate);
20423 }
20424
20425 function createObjectOfTypeChecker(typeChecker) {
20426 function validate(props, propName, componentName, location, propFullName) {
20427 if (typeof typeChecker !== 'function') {
20428 return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
20429 }
20430 var propValue = props[propName];
20431 var propType = getPropType(propValue);
20432 if (propType !== 'object') {
20433 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
20434 }
20435 for (var key in propValue) {
20436 if (has(propValue, key)) {
20437 var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
20438 if (error instanceof Error) {
20439 return error;
20440 }
20441 }
20442 }
20443 return null;
20444 }
20445 return createChainableTypeChecker(validate);
20446 }
20447
20448 function createUnionTypeChecker(arrayOfTypeCheckers) {
20449 if (!Array.isArray(arrayOfTypeCheckers)) {
20450 true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0;
20451 return emptyFunctionThatReturnsNull;
20452 }
20453
20454 for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
20455 var checker = arrayOfTypeCheckers[i];
20456 if (typeof checker !== 'function') {
20457 printWarning(
20458 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
20459 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
20460 );
20461 return emptyFunctionThatReturnsNull;
20462 }
20463 }
20464
20465 function validate(props, propName, componentName, location, propFullName) {
20466 var expectedTypes = [];
20467 for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
20468 var checker = arrayOfTypeCheckers[i];
20469 var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
20470 if (checkerResult == null) {
20471 return null;
20472 }
20473 if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
20474 expectedTypes.push(checkerResult.data.expectedType);
20475 }
20476 }
20477 var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
20478 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
20479 }
20480 return createChainableTypeChecker(validate);
20481 }
20482
20483 function createNodeChecker() {
20484 function validate(props, propName, componentName, location, propFullName) {
20485 if (!isNode(props[propName])) {
20486 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
20487 }
20488 return null;
20489 }
20490 return createChainableTypeChecker(validate);
20491 }
20492
20493 function invalidValidatorError(componentName, location, propFullName, key, type) {
20494 return new PropTypeError(
20495 (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
20496 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
20497 );
20498 }
20499
20500 function createShapeTypeChecker(shapeTypes) {
20501 function validate(props, propName, componentName, location, propFullName) {
20502 var propValue = props[propName];
20503 var propType = getPropType(propValue);
20504 if (propType !== 'object') {
20505 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
20506 }
20507 for (var key in shapeTypes) {
20508 var checker = shapeTypes[key];
20509 if (typeof checker !== 'function') {
20510 return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
20511 }
20512 var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
20513 if (error) {
20514 return error;
20515 }
20516 }
20517 return null;
20518 }
20519 return createChainableTypeChecker(validate);
20520 }
20521
20522 function createStrictShapeTypeChecker(shapeTypes) {
20523 function validate(props, propName, componentName, location, propFullName) {
20524 var propValue = props[propName];
20525 var propType = getPropType(propValue);
20526 if (propType !== 'object') {
20527 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
20528 }
20529 // We need to check all keys in case some are required but missing from props.
20530 var allKeys = assign({}, props[propName], shapeTypes);
20531 for (var key in allKeys) {
20532 var checker = shapeTypes[key];
20533 if (has(shapeTypes, key) && typeof checker !== 'function') {
20534 return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
20535 }
20536 if (!checker) {
20537 return new PropTypeError(
20538 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
20539 '\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
20540 '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
20541 );
20542 }
20543 var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
20544 if (error) {
20545 return error;
20546 }
20547 }
20548 return null;
20549 }
20550
20551 return createChainableTypeChecker(validate);
20552 }
20553
20554 function isNode(propValue) {
20555 switch (typeof propValue) {
20556 case 'number':
20557 case 'string':
20558 case 'undefined':
20559 return true;
20560 case 'boolean':
20561 return !propValue;
20562 case 'object':
20563 if (Array.isArray(propValue)) {
20564 return propValue.every(isNode);
20565 }
20566 if (propValue === null || isValidElement(propValue)) {
20567 return true;
20568 }
20569
20570 var iteratorFn = getIteratorFn(propValue);
20571 if (iteratorFn) {
20572 var iterator = iteratorFn.call(propValue);
20573 var step;
20574 if (iteratorFn !== propValue.entries) {
20575 while (!(step = iterator.next()).done) {
20576 if (!isNode(step.value)) {
20577 return false;
20578 }
20579 }
20580 } else {
20581 // Iterator will provide entry [k,v] tuples rather than values.
20582 while (!(step = iterator.next()).done) {
20583 var entry = step.value;
20584 if (entry) {
20585 if (!isNode(entry[1])) {
20586 return false;
20587 }
20588 }
20589 }
20590 }
20591 } else {
20592 return false;
20593 }
20594
20595 return true;
20596 default:
20597 return false;
20598 }
20599 }
20600
20601 function isSymbol(propType, propValue) {
20602 // Native Symbol.
20603 if (propType === 'symbol') {
20604 return true;
20605 }
20606
20607 // falsy value can't be a Symbol
20608 if (!propValue) {
20609 return false;
20610 }
20611
20612 // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
20613 if (propValue['@@toStringTag'] === 'Symbol') {
20614 return true;
20615 }
20616
20617 // Fallback for non-spec compliant Symbols which are polyfilled.
20618 if (typeof Symbol === 'function' && propValue instanceof Symbol) {
20619 return true;
20620 }
20621
20622 return false;
20623 }
20624
20625 // Equivalent of `typeof` but with special handling for array and regexp.
20626 function getPropType(propValue) {
20627 var propType = typeof propValue;
20628 if (Array.isArray(propValue)) {
20629 return 'array';
20630 }
20631 if (propValue instanceof RegExp) {
20632 // Old webkits (at least until Android 4.0) return 'function' rather than
20633 // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
20634 // passes PropTypes.object.
20635 return 'object';
20636 }
20637 if (isSymbol(propType, propValue)) {
20638 return 'symbol';
20639 }
20640 return propType;
20641 }
20642
20643 // This handles more types than `getPropType`. Only used for error messages.
20644 // See `createPrimitiveTypeChecker`.
20645 function getPreciseType(propValue) {
20646 if (typeof propValue === 'undefined' || propValue === null) {
20647 return '' + propValue;
20648 }
20649 var propType = getPropType(propValue);
20650 if (propType === 'object') {
20651 if (propValue instanceof Date) {
20652 return 'date';
20653 } else if (propValue instanceof RegExp) {
20654 return 'regexp';
20655 }
20656 }
20657 return propType;
20658 }
20659
20660 // Returns a string that is postfixed to a warning about an invalid type.
20661 // For example, "undefined" or "of type array"
20662 function getPostfixForTypeWarning(value) {
20663 var type = getPreciseType(value);
20664 switch (type) {
20665 case 'array':
20666 case 'object':
20667 return 'an ' + type;
20668 case 'boolean':
20669 case 'date':
20670 case 'regexp':
20671 return 'a ' + type;
20672 default:
20673 return type;
20674 }
20675 }
20676
20677 // Returns class name of the object, if any.
20678 function getClassName(propValue) {
20679 if (!propValue.constructor || !propValue.constructor.name) {
20680 return ANONYMOUS;
20681 }
20682 return propValue.constructor.name;
20683 }
20684
20685 ReactPropTypes.checkPropTypes = checkPropTypes;
20686 ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
20687 ReactPropTypes.PropTypes = ReactPropTypes;
20688
20689 return ReactPropTypes;
20690 };
20691
20692
20693 /***/ }),
20694
20695 /***/ "../node_modules/prop-types/index.js":
20696 /*!*******************************************!*\
20697 !*** ../node_modules/prop-types/index.js ***!
20698 \*******************************************/
20699 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20700
20701 /**
20702 * Copyright (c) 2013-present, Facebook, Inc.
20703 *
20704 * This source code is licensed under the MIT license found in the
20705 * LICENSE file in the root directory of this source tree.
20706 */
20707
20708 if (true) {
20709 var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js");
20710
20711 // By explicitly using `prop-types` you are opting into new development behavior.
20712 // http://fb.me/prop-types-in-prod
20713 var throwOnDirectAccess = true;
20714 module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "../node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess);
20715 } else // removed by dead control flow
20716 {}
20717
20718
20719 /***/ }),
20720
20721 /***/ "../node_modules/prop-types/lib/ReactPropTypesSecret.js":
20722 /*!**************************************************************!*\
20723 !*** ../node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
20724 \**************************************************************/
20725 /***/ ((module) => {
20726
20727 "use strict";
20728 /**
20729 * Copyright (c) 2013-present, Facebook, Inc.
20730 *
20731 * This source code is licensed under the MIT license found in the
20732 * LICENSE file in the root directory of this source tree.
20733 */
20734
20735
20736
20737 var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
20738
20739 module.exports = ReactPropTypesSecret;
20740
20741
20742 /***/ }),
20743
20744 /***/ "../node_modules/prop-types/lib/has.js":
20745 /*!*********************************************!*\
20746 !*** ../node_modules/prop-types/lib/has.js ***!
20747 \*********************************************/
20748 /***/ ((module) => {
20749
20750 module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
20751
20752
20753 /***/ }),
20754
20755 /***/ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js":
20756 /*!************************************************************************************!*\
20757 !*** ../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js ***!
20758 \************************************************************************************/
20759 /***/ ((__unused_webpack_module, exports) => {
20760
20761 "use strict";
20762 /** @license React v16.13.1
20763 * react-is.development.js
20764 *
20765 * Copyright (c) Facebook, Inc. and its affiliates.
20766 *
20767 * This source code is licensed under the MIT license found in the
20768 * LICENSE file in the root directory of this source tree.
20769 */
20770
20771
20772
20773
20774
20775 if (true) {
20776 (function() {
20777 'use strict';
20778
20779 // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
20780 // nor polyfill, then a plain number is used for performance.
20781 var hasSymbol = typeof Symbol === 'function' && Symbol.for;
20782 var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
20783 var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
20784 var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
20785 var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
20786 var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
20787 var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
20788 var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
20789 // (unstable) APIs that have been removed. Can we remove the symbols?
20790
20791 var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
20792 var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
20793 var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
20794 var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
20795 var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
20796 var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
20797 var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
20798 var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
20799 var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
20800 var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
20801 var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
20802
20803 function isValidElementType(type) {
20804 return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
20805 type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
20806 }
20807
20808 function typeOf(object) {
20809 if (typeof object === 'object' && object !== null) {
20810 var $$typeof = object.$$typeof;
20811
20812 switch ($$typeof) {
20813 case REACT_ELEMENT_TYPE:
20814 var type = object.type;
20815
20816 switch (type) {
20817 case REACT_ASYNC_MODE_TYPE:
20818 case REACT_CONCURRENT_MODE_TYPE:
20819 case REACT_FRAGMENT_TYPE:
20820 case REACT_PROFILER_TYPE:
20821 case REACT_STRICT_MODE_TYPE:
20822 case REACT_SUSPENSE_TYPE:
20823 return type;
20824
20825 default:
20826 var $$typeofType = type && type.$$typeof;
20827
20828 switch ($$typeofType) {
20829 case REACT_CONTEXT_TYPE:
20830 case REACT_FORWARD_REF_TYPE:
20831 case REACT_LAZY_TYPE:
20832 case REACT_MEMO_TYPE:
20833 case REACT_PROVIDER_TYPE:
20834 return $$typeofType;
20835
20836 default:
20837 return $$typeof;
20838 }
20839
20840 }
20841
20842 case REACT_PORTAL_TYPE:
20843 return $$typeof;
20844 }
20845 }
20846
20847 return undefined;
20848 } // AsyncMode is deprecated along with isAsyncMode
20849
20850 var AsyncMode = REACT_ASYNC_MODE_TYPE;
20851 var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
20852 var ContextConsumer = REACT_CONTEXT_TYPE;
20853 var ContextProvider = REACT_PROVIDER_TYPE;
20854 var Element = REACT_ELEMENT_TYPE;
20855 var ForwardRef = REACT_FORWARD_REF_TYPE;
20856 var Fragment = REACT_FRAGMENT_TYPE;
20857 var Lazy = REACT_LAZY_TYPE;
20858 var Memo = REACT_MEMO_TYPE;
20859 var Portal = REACT_PORTAL_TYPE;
20860 var Profiler = REACT_PROFILER_TYPE;
20861 var StrictMode = REACT_STRICT_MODE_TYPE;
20862 var Suspense = REACT_SUSPENSE_TYPE;
20863 var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
20864
20865 function isAsyncMode(object) {
20866 {
20867 if (!hasWarnedAboutDeprecatedIsAsyncMode) {
20868 hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
20869
20870 console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
20871 }
20872 }
20873
20874 return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
20875 }
20876 function isConcurrentMode(object) {
20877 return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
20878 }
20879 function isContextConsumer(object) {
20880 return typeOf(object) === REACT_CONTEXT_TYPE;
20881 }
20882 function isContextProvider(object) {
20883 return typeOf(object) === REACT_PROVIDER_TYPE;
20884 }
20885 function isElement(object) {
20886 return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
20887 }
20888 function isForwardRef(object) {
20889 return typeOf(object) === REACT_FORWARD_REF_TYPE;
20890 }
20891 function isFragment(object) {
20892 return typeOf(object) === REACT_FRAGMENT_TYPE;
20893 }
20894 function isLazy(object) {
20895 return typeOf(object) === REACT_LAZY_TYPE;
20896 }
20897 function isMemo(object) {
20898 return typeOf(object) === REACT_MEMO_TYPE;
20899 }
20900 function isPortal(object) {
20901 return typeOf(object) === REACT_PORTAL_TYPE;
20902 }
20903 function isProfiler(object) {
20904 return typeOf(object) === REACT_PROFILER_TYPE;
20905 }
20906 function isStrictMode(object) {
20907 return typeOf(object) === REACT_STRICT_MODE_TYPE;
20908 }
20909 function isSuspense(object) {
20910 return typeOf(object) === REACT_SUSPENSE_TYPE;
20911 }
20912
20913 exports.AsyncMode = AsyncMode;
20914 exports.ConcurrentMode = ConcurrentMode;
20915 exports.ContextConsumer = ContextConsumer;
20916 exports.ContextProvider = ContextProvider;
20917 exports.Element = Element;
20918 exports.ForwardRef = ForwardRef;
20919 exports.Fragment = Fragment;
20920 exports.Lazy = Lazy;
20921 exports.Memo = Memo;
20922 exports.Portal = Portal;
20923 exports.Profiler = Profiler;
20924 exports.StrictMode = StrictMode;
20925 exports.Suspense = Suspense;
20926 exports.isAsyncMode = isAsyncMode;
20927 exports.isConcurrentMode = isConcurrentMode;
20928 exports.isContextConsumer = isContextConsumer;
20929 exports.isContextProvider = isContextProvider;
20930 exports.isElement = isElement;
20931 exports.isForwardRef = isForwardRef;
20932 exports.isFragment = isFragment;
20933 exports.isLazy = isLazy;
20934 exports.isMemo = isMemo;
20935 exports.isPortal = isPortal;
20936 exports.isProfiler = isProfiler;
20937 exports.isStrictMode = isStrictMode;
20938 exports.isSuspense = isSuspense;
20939 exports.isValidElementType = isValidElementType;
20940 exports.typeOf = typeOf;
20941 })();
20942 }
20943
20944
20945 /***/ }),
20946
20947 /***/ "../node_modules/prop-types/node_modules/react-is/index.js":
20948 /*!*****************************************************************!*\
20949 !*** ../node_modules/prop-types/node_modules/react-is/index.js ***!
20950 \*****************************************************************/
20951 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20952
20953 "use strict";
20954
20955
20956 if (false) // removed by dead control flow
20957 {} else {
20958 module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js");
20959 }
20960
20961
20962 /***/ }),
20963
20964 /***/ "../node_modules/react-dom/client.js":
20965 /*!*******************************************!*\
20966 !*** ../node_modules/react-dom/client.js ***!
20967 \*******************************************/
20968 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
20969
20970 "use strict";
20971
20972
20973 var m = __webpack_require__(/*! react-dom */ "react-dom");
20974 if (false) // removed by dead control flow
20975 {} else {
20976 var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
20977 exports.createRoot = function(c, o) {
20978 i.usingClientEntryPoint = true;
20979 try {
20980 return m.createRoot(c, o);
20981 } finally {
20982 i.usingClientEntryPoint = false;
20983 }
20984 };
20985 exports.hydrateRoot = function(c, h, o) {
20986 i.usingClientEntryPoint = true;
20987 try {
20988 return m.hydrateRoot(c, h, o);
20989 } finally {
20990 i.usingClientEntryPoint = false;
20991 }
20992 };
20993 }
20994
20995
20996 /***/ }),
20997
20998 /***/ "@elementor/icons":
20999 /*!************************************!*\
21000 !*** external "elementorV2.icons" ***!
21001 \************************************/
21002 /***/ ((module) => {
21003
21004 "use strict";
21005 module.exports = elementorV2.icons;
21006
21007 /***/ }),
21008
21009 /***/ "@elementor/ui":
21010 /*!*********************************!*\
21011 !*** external "elementorV2.ui" ***!
21012 \*********************************/
21013 /***/ ((module) => {
21014
21015 "use strict";
21016 module.exports = elementorV2.ui;
21017
21018 /***/ }),
21019
21020 /***/ "@wordpress/i18n":
21021 /*!**************************!*\
21022 !*** external "wp.i18n" ***!
21023 \**************************/
21024 /***/ ((module) => {
21025
21026 "use strict";
21027 module.exports = wp.i18n;
21028
21029 /***/ }),
21030
21031 /***/ "react":
21032 /*!************************!*\
21033 !*** external "React" ***!
21034 \************************/
21035 /***/ ((module) => {
21036
21037 "use strict";
21038 module.exports = React;
21039
21040 /***/ }),
21041
21042 /***/ "react-dom":
21043 /*!***************************!*\
21044 !*** external "ReactDOM" ***!
21045 \***************************/
21046 /***/ ((module) => {
21047
21048 "use strict";
21049 module.exports = ReactDOM;
21050
21051 /***/ })
21052
21053 /******/ });
21054 /************************************************************************/
21055 /******/ // The module cache
21056 /******/ var __webpack_module_cache__ = {};
21057 /******/
21058 /******/ // The require function
21059 /******/ function __webpack_require__(moduleId) {
21060 /******/ // Check if module is in cache
21061 /******/ var cachedModule = __webpack_module_cache__[moduleId];
21062 /******/ if (cachedModule !== undefined) {
21063 /******/ return cachedModule.exports;
21064 /******/ }
21065 /******/ // Create a new module (and put it into the cache)
21066 /******/ var module = __webpack_module_cache__[moduleId] = {
21067 /******/ // no module.id needed
21068 /******/ // no module.loaded needed
21069 /******/ exports: {}
21070 /******/ };
21071 /******/
21072 /******/ // Execute the module function
21073 /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21074 /******/
21075 /******/ // Return the exports of the module
21076 /******/ return module.exports;
21077 /******/ }
21078 /******/
21079 /************************************************************************/
21080 /******/ /* webpack/runtime/amd options */
21081 /******/ (() => {
21082 /******/ __webpack_require__.amdO = {};
21083 /******/ })();
21084 /******/
21085 /************************************************************************/
21086 var __webpack_exports__ = {};
21087 // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
21088 (() => {
21089 "use strict";
21090 /*!******************************************************!*\
21091 !*** ../modules/promotions/assets/js/react/index.js ***!
21092 \******************************************************/
21093
21094
21095 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
21096 var _module = _interopRequireDefault(__webpack_require__(/*! ./module.js */ "../modules/promotions/assets/js/react/module.js"));
21097 new _module.default();
21098 })();
21099
21100 /******/ })()
21101 ;
21102 //# sourceMappingURL=e-react-promotions.js.map