LearnPress – WordPress LMS Plugin - Version 2.1.7.4

Version Description

~ Fixed some bugs

Download this release

Release Info

Developer tunnhn
Plugin Icon 128x128 LearnPress – WordPress LMS Plugin
Version 2.1.7.4
Comparing to
See all releases

Code changes from version 2.1.3 to 2.1.7.4

Files changed (86) hide show
  1. assets/css/_icons.css +77 -75
  2. assets/css/admin/admin.css +158 -50
  3. assets/css/admin/attributes.css +2 -0
  4. assets/css/admin/course-editor.css +253 -251
  5. assets/css/admin/meta-box-course.css +78 -141
  6. assets/css/admin/meta-box-order.css +151 -149
  7. assets/css/admin/meta-box-question.css +0 -52
  8. assets/css/learnpress.css +450 -101
  9. assets/css/owl.carousel.css +0 -71
  10. assets/js/Chart.bundle.min.js +16 -0
  11. assets/js/admin/admin.js +2 -2
  12. assets/js/admin/attributes.js +6 -1
  13. assets/js/admin/course-editor.js +6 -6
  14. assets/js/admin/meta-box-course.js +46 -102
  15. assets/js/admin/meta-box-order.js +68 -18
  16. assets/js/admin/meta-box-quiz.js +13 -1
  17. assets/js/admin/modal-search-items.js +17 -6
  18. assets/js/admin/settings.js +29 -3
  19. assets/js/frontend/add-to-cart.js +27 -26
  20. assets/js/frontend/bak.course-lesson.js +0 -223
  21. assets/js/frontend/bak.course-quiz.js +0 -45
  22. assets/js/frontend/bak.single-course.v2.js +0 -245
  23. assets/js/frontend/bak.single-quiz.js +0 -731
  24. assets/js/frontend/checkout.js +4 -2
  25. assets/js/frontend/course-filters.js +146 -0
  26. assets/js/frontend/course_coming_soon.js +0 -28
  27. assets/js/frontend/course_coming_soon.min.js +0 -28
  28. assets/js/frontend/learnpress.js +1 -2
  29. assets/js/frontend/lesson.js +3 -6
  30. assets/js/frontend/profile.js +0 -236
  31. assets/js/frontend/quiz.js +9 -3
  32. assets/js/frontend/single-course.js +77 -24
  33. assets/js/global.js +126 -29
  34. assets/js/global.min.js +2 -2
  35. assets/js/jquery.cropit.js +0 -1207
  36. assets/js/jquery.mb-comingsoon.js +0 -346
  37. assets/js/jquery.mb-comingsoon.min.js +0 -1
  38. assets/js/jquery.ocupload.js +0 -277
  39. assets/{css → less}/_icons.less +0 -0
  40. assets/{css → less}/admin/admin.less +150 -36
  41. assets/{css → less}/admin/attributes.less +3 -2
  42. assets/{css → less}/admin/course-editor.less +0 -0
  43. {inc/libraries/meta-box/css → assets/less/admin}/index.php +0 -0
  44. assets/{css → less}/admin/meta-box-course.less +108 -176
  45. {inc/libraries/meta-box/css/jqueryui → assets/less}/index.php +0 -0
  46. assets/{css → less}/learnpress.less +438 -44
  47. inc/admin/class-lp-admin-ajax.php +112 -38
  48. inc/admin/class-lp-admin-menu.php +25 -3
  49. inc/admin/class-lp-admin.php +1 -0
  50. inc/admin/class-lp-meta-box-tabs.php +2 -1
  51. inc/admin/class-lp-profile.php +0 -139
  52. inc/admin/dashboard-statistics/class-lp-statistic-status.php +4 -4
  53. inc/admin/includes/class-markdown-parse.php +7 -5
  54. inc/admin/lp-admin-actions.php +26 -18
  55. inc/admin/lp-admin-functions.php +1980 -1664
  56. inc/admin/meta-boxes/class-course-tabs-field.php +1 -1
  57. inc/admin/meta-boxes/class-curriculum-field.php +0 -316
  58. inc/admin/meta-boxes/class-meta-box-tabs.php +0 -18
  59. inc/{libraries/meta-box/inc/fields → admin/meta-boxes}/duration.php +80 -67
  60. inc/admin/settings/class-lp-settings-courses.php +32 -4
  61. inc/admin/settings/class-lp-settings-emails.php +44 -21
  62. inc/admin/settings/class-lp-settings-general.php +11 -1
  63. inc/admin/settings/class-lp-settings-pages.php +1 -1
  64. inc/admin/sub-menus/settings.php +11 -0
  65. inc/admin/sub-menus/statistics.php +10 -1
  66. inc/admin/sub-menus/tools.php +24 -16
  67. inc/admin/views/html-admin-notice-templates.php +13 -9
  68. inc/admin/views/meta-boxes/course/attributes.php +0 -7
  69. inc/admin/views/meta-boxes/course/curriculum.php +33 -33
  70. inc/admin/views/meta-boxes/course/loop-item.php +56 -36
  71. inc/admin/views/meta-boxes/course/loop-section.php +26 -55
  72. inc/admin/views/meta-boxes/course/review-logs.php +2 -2
  73. inc/admin/views/meta-boxes/order/actions.php +33 -10
  74. inc/admin/views/meta-boxes/order/details.php +25 -12
  75. inc/admin/views/meta-boxes/order/order-item.php +5 -0
  76. inc/admin/views/meta-boxes/question/multi-choice-options.php +75 -7
  77. inc/admin/views/meta-boxes/tabs.php +13 -2
  78. inc/admin/views/question/html-base-option.php +137 -0
  79. inc/admin/views/settings/emails/enrolled-course-admin.php +76 -0
  80. inc/admin/views/settings/emails/update-course.php +50 -0
  81. inc/admin/views/settings/emails/user-order-changed-status.php +68 -0
  82. inc/admin/views/settings/fields/course-permalink.php +16 -13
  83. inc/admin/views/statistics/general.php +72 -0
  84. inc/api/class-lp-api.php +4 -0
  85. inc/attributes/lp-attributes-functions.php +82 -5
  86. inc/class-lp-ajax.php +109 -27
assets/css/_icons.css CHANGED
@@ -1,75 +1,77 @@
1
- @font-face {
2
- font-family: 'lp-icons';
3
- src: url('fonts/icons.eot?6gvjr0');
4
- src: url('fonts/icons.eot?6gvjr0#iefix') format('embedded-opentype'), url('fonts/icons.ttf?6gvjr0') format('truetype'), url('fonts/icons.woff?6gvjr0') format('woff'), url('fonts/icons.svg?6gvjr0#icons') format('svg');
5
- font-weight: normal;
6
- font-style: normal;
7
- }
8
- [class^="lp-icon-"],
9
- [class*=" lp-icon-"] {
10
- /* use !important to prevent issues with browser extensions that change fonts */
11
- font-family: 'lp-icons' !important;
12
- speak: none;
13
- font-style: normal;
14
- font-weight: normal;
15
- font-variant: normal;
16
- text-transform: none;
17
- line-height: 1;
18
- /* Better Font Rendering =========== */
19
- -webkit-font-smoothing: antialiased;
20
- -moz-osx-font-smoothing: grayscale;
21
- }
22
- .lp-icon-file-text:before {
23
- content: "\e926";
24
- }
25
- .icon-file-picture:before {
26
- content: "\e927";
27
- }
28
- .icon-file-music:before {
29
- content: "\e928";
30
- }
31
- .icon-file-video:before {
32
- content: "\e92a";
33
- }
34
- .icon-file-zip:before {
35
- content: "\e92b";
36
- }
37
- .icon-paste:before {
38
- content: "\e92d";
39
- }
40
- .icon-alarm:before {
41
- content: "\e950";
42
- }
43
- @font-face {
44
- font-family: 'learnpress';
45
- src: url('../fonts/icon.eot?ym8b3w');
46
- src: url('../fonts/icon.eot?ym8b3w#iefix') format('embedded-opentype'), url('../fonts/icon.ttf?ym8b3w') format('truetype'), url('../fonts/icon.woff?ym8b3w') format('woff'), url('../fonts/icon.svg?ym8b3w#icon') format('svg');
47
- font-weight: normal;
48
- font-style: normal;
49
- }
50
- [class^="learn-press-icon-"],
51
- [class*=" learn-press-icon-"],
52
- .learn-press-icon {
53
- font-family: 'learnpress';
54
- /*speak: none;*/
55
- font-style: normal;
56
- font-weight: normal;
57
- font-variant: normal;
58
- text-transform: none;
59
- line-height: 1;
60
- /* Better Font Rendering =========== */
61
- -webkit-font-smoothing: antialiased;
62
- -moz-osx-font-smoothing: grayscale;
63
- }
64
- .icon-checkmark:before {
65
- content: "\e903";
66
- }
67
- .icon-books:before {
68
- content: "\e900";
69
- }
70
- .icon-alarm:before {
71
- content: "\e901";
72
- }
73
- .icon-spinner:before {
74
- content: "\e902";
75
- }
 
 
1
+ @font-face {
2
+ font-family: 'lp-icons';
3
+ src: url('fonts/icons.eot?6gvjr0');
4
+ src: url('fonts/icons.eot?6gvjr0#iefix') format('embedded-opentype'), url('fonts/icons.ttf?6gvjr0') format('truetype'), url('fonts/icons.woff?6gvjr0') format('woff'), url('fonts/icons.svg?6gvjr0#icons') format('svg');
5
+ font-weight: normal;
6
+ font-style: normal;
7
+ }
8
+ [class^="lp-icon-"],
9
+ [class*=" lp-icon-"] {
10
+ /* use !important to prevent issues with browser extensions that change fonts */
11
+ font-family: 'lp-icons' !important;
12
+ speak: none;
13
+ font-style: normal;
14
+ font-weight: normal;
15
+ font-variant: normal;
16
+ text-transform: none;
17
+ line-height: 1;
18
+ /* Better Font Rendering =========== */
19
+ -webkit-font-smoothing: antialiased;
20
+ -moz-osx-font-smoothing: grayscale;
21
+ }
22
+ .lp-icon-file-text:before {
23
+ content: "\e926";
24
+ }
25
+ .icon-file-picture:before {
26
+ content: "\e927";
27
+ }
28
+ .icon-file-music:before {
29
+ content: "\e928";
30
+ }
31
+ .icon-file-video:before {
32
+ content: "\e92a";
33
+ }
34
+ .icon-file-zip:before {
35
+ content: "\e92b";
36
+ }
37
+ .icon-paste:before {
38
+ content: "\e92d";
39
+ }
40
+ .icon-alarm:before {
41
+ content: "\e950";
42
+ }
43
+ @font-face {
44
+ font-family: 'learnpress';
45
+ src: url('../fonts/icon.eot?ym8b3w');
46
+ src: url('../fonts/icon.eot?ym8b3w#iefix') format('embedded-opentype'), url('../fonts/icon.ttf?ym8b3w') format('truetype'), url('../fonts/icon.woff?ym8b3w') format('woff'), url('../fonts/icon.svg?ym8b3w#icon') format('svg');
47
+ font-weight: normal;
48
+ font-style: normal;
49
+ }
50
+ [class^="learn-press-icon-"],
51
+ [class*=" learn-press-icon-"],
52
+ .learn-press-icon {
53
+ font-family: 'learnpress';
54
+ /*speak: none;*/
55
+ font-style: normal;
56
+ font-weight: normal;
57
+ font-variant: normal;
58
+ text-transform: none;
59
+ line-height: 1;
60
+ /* Better Font Rendering =========== */
61
+ -webkit-font-smoothing: antialiased;
62
+ -moz-osx-font-smoothing: grayscale;
63
+ }
64
+ .icon-checkmark:before {
65
+ content: "\e903";
66
+ }
67
+ .icon-books:before {
68
+ content: "\e900";
69
+ }
70
+ .icon-alarm:before {
71
+ content: "\e901";
72
+ }
73
+ .icon-spinner:before {
74
+ content: "\e902";
75
+ }
76
+
77
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9pY29ucy5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksYUFBYSxVQUFiO0VBQ0EsU0FBWSx5QkFBWjtFQUNBLFNBQVksZ0NBQWdDLE9BQU8sMEJBQy9DLDBCQUEwQixPQUFPLGlCQUNqQywyQkFBMkIsT0FBTyxhQUNsQyxnQ0FBZ0MsT0FBTyxNQUgzQztFQUlBLG1CQUFBO0VBQ0Esa0JBQUE7O0FBR0o7QUFBcUI7O0VBRWpCLGFBQWEsVUFBYjtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGNBQUE7O0VBR0EsbUNBQUE7RUFDQSxrQ0FBQTs7QUFHSixrQkFBa0I7RUFDZCxTQUFTLE9BQVQ7O0FBRUosa0JBQWtCO0VBQ2QsU0FBUyxPQUFUOztBQUVKLGdCQUFnQjtFQUNaLFNBQVMsT0FBVDs7QUFFSixnQkFBZ0I7RUFDWixTQUFTLE9BQVQ7O0FBRUosY0FBYztFQUNWLFNBQVMsT0FBVDs7QUFFSixXQUFXO0VBQ1AsU0FBUyxPQUFUOztBQUVKLFdBQVc7RUFDUCxTQUFTLE9BQVQ7O0FBR0o7RUFDSSxhQUFhLFlBQWI7RUFDQSxTQUFTLDJCQUFUO0VBQ0EsU0FBUyxrQ0FBa0MsT0FBTywwQkFDOUMsNEJBQTRCLE9BQU8saUJBQ25DLDZCQUE2QixPQUFPLGFBQ3BDLGlDQUFpQyxPQUFPLE1BSDVDO0VBSUEsbUJBQUE7RUFDQSxrQkFBQTs7QUFHSjtBQUE4QjtBQUErQjtFQUN6RCxhQUFhLFlBQWI7O0VBRUEsa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxjQUFBOztFQUdBLG1DQUFBO0VBQ0Esa0NBQUE7O0FBRUosZUFBZTtFQUNYLFNBQVMsT0FBVDs7QUFFSixXQUFXO0VBQ1AsU0FBUyxPQUFUOztBQUVKLFdBQVc7RUFDUCxTQUFTLE9BQVQ7O0FBRUosYUFBYTtFQUNULFNBQVMsT0FBVCIsInNvdXJjZXNDb250ZW50IjpbIkBmb250LWZhY2Uge1xyXG4gICAgZm9udC1mYW1pbHk6ICdscC1pY29ucyc7XHJcbiAgICBzcmM6ICAgIHVybCgnZm9udHMvaWNvbnMuZW90PzZndmpyMCcpO1xyXG4gICAgc3JjOiAgICB1cmwoJ2ZvbnRzL2ljb25zLmVvdD82Z3ZqcjAjaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXHJcbiAgICB1cmwoJ2ZvbnRzL2ljb25zLnR0Zj82Z3ZqcjAnKSBmb3JtYXQoJ3RydWV0eXBlJyksXHJcbiAgICB1cmwoJ2ZvbnRzL2ljb25zLndvZmY/Nmd2anIwJykgZm9ybWF0KCd3b2ZmJyksXHJcbiAgICB1cmwoJ2ZvbnRzL2ljb25zLnN2Zz82Z3ZqcjAjaWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxufVxyXG5cclxuW2NsYXNzXj1cImxwLWljb24tXCJdLCBbY2xhc3MqPVwiIGxwLWljb24tXCJdIHtcclxuICAgIC8qIHVzZSAhaW1wb3J0YW50IHRvIHByZXZlbnQgaXNzdWVzIHdpdGggYnJvd3NlciBleHRlbnNpb25zIHRoYXQgY2hhbmdlIGZvbnRzICovXHJcbiAgICBmb250LWZhbWlseTogJ2xwLWljb25zJyAhaW1wb3J0YW50O1xyXG4gICAgc3BlYWs6IG5vbmU7XHJcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XHJcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgZm9udC12YXJpYW50OiBub3JtYWw7XHJcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG5cclxuICAgIC8qIEJldHRlciBGb250IFJlbmRlcmluZyA9PT09PT09PT09PSAqL1xyXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XHJcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xyXG59XHJcblxyXG4ubHAtaWNvbi1maWxlLXRleHQ6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXFxlOTI2XCI7XHJcbn1cclxuLmljb24tZmlsZS1waWN0dXJlOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiBcIlxcZTkyN1wiO1xyXG59XHJcbi5pY29uLWZpbGUtbXVzaWM6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXFxlOTI4XCI7XHJcbn1cclxuLmljb24tZmlsZS12aWRlbzpiZWZvcmUge1xyXG4gICAgY29udGVudDogXCJcXGU5MmFcIjtcclxufVxyXG4uaWNvbi1maWxlLXppcDpiZWZvcmUge1xyXG4gICAgY29udGVudDogXCJcXGU5MmJcIjtcclxufVxyXG4uaWNvbi1wYXN0ZTpiZWZvcmUge1xyXG4gICAgY29udGVudDogXCJcXGU5MmRcIjtcclxufVxyXG4uaWNvbi1hbGFybTpiZWZvcmUge1xyXG4gICAgY29udGVudDogXCJcXGU5NTBcIjtcclxufVxyXG5cclxuQGZvbnQtZmFjZSB7XHJcbiAgICBmb250LWZhbWlseTogJ2xlYXJucHJlc3MnO1xyXG4gICAgc3JjOiB1cmwoJy4uL2ZvbnRzL2ljb24uZW90P3ltOGIzdycpO1xyXG4gICAgc3JjOiB1cmwoJy4uL2ZvbnRzL2ljb24uZW90P3ltOGIzdyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcclxuICAgIHVybCgnLi4vZm9udHMvaWNvbi50dGY/eW04YjN3JykgZm9ybWF0KCd0cnVldHlwZScpLFxyXG4gICAgdXJsKCcuLi9mb250cy9pY29uLndvZmY/eW04YjN3JykgZm9ybWF0KCd3b2ZmJyksXHJcbiAgICB1cmwoJy4uL2ZvbnRzL2ljb24uc3ZnP3ltOGIzdyNpY29uJykgZm9ybWF0KCdzdmcnKTtcclxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XHJcbn1cclxuXHJcbltjbGFzc149XCJsZWFybi1wcmVzcy1pY29uLVwiXSwgW2NsYXNzKj1cIiBsZWFybi1wcmVzcy1pY29uLVwiXSwgLmxlYXJuLXByZXNzLWljb24ge1xyXG4gICAgZm9udC1mYW1pbHk6ICdsZWFybnByZXNzJztcclxuICAgIC8qc3BlYWs6IG5vbmU7Ki9cclxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcclxuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcblxyXG4gICAgLyogQmV0dGVyIEZvbnQgUmVuZGVyaW5nID09PT09PT09PT09ICovXHJcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcclxuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XHJcbn1cclxuLmljb24tY2hlY2ttYXJrOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiBcIlxcZTkwM1wiO1xyXG59XHJcbi5pY29uLWJvb2tzOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiBcIlxcZTkwMFwiO1xyXG59XHJcbi5pY29uLWFsYXJtOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiBcIlxcZTkwMVwiO1xyXG59XHJcbi5pY29uLXNwaW5uZXI6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXFxlOTAyXCI7XHJcbn0iXSwiZmlsZSI6Il9pY29ucy5jc3MifQ== */
assets/css/admin/admin.css CHANGED
@@ -4,12 +4,30 @@
4
  * @author ThimPress
5
  * @version 1.0
6
  */
 
 
 
 
 
 
 
 
 
7
  .rwmb-field {
8
  margin: 20px 0 20px 0;
9
  }
10
  .rwmb-field .rwmb-input .rwmb-label {
11
  margin-top: 0;
12
  }
 
 
 
 
 
 
 
 
 
13
  .lp-nav-tab-wrapper {
14
  border-bottom: 1px solid #ccc;
15
  margin: 0;
@@ -24,19 +42,6 @@
24
  .learn-press-quick-add-page-inline > * {
25
  vertical-align: top;
26
  }
27
- .post-type-lp_course .column-price,
28
- .post-type-lp_course .column-students {
29
- width: 10%;
30
- }
31
- .post-type-lp_course #course_curriculum .curriculum-section-items .lp-item-empty td.section-item-input {
32
- padding-left: 40px;
33
- }
34
- .post-type-lp_course #course_curriculum .curriculum-section-items .lp-item-empty td.section-item-input.hover {
35
- padding-left: 0;
36
- }
37
- .post-type-lp_course .type-lp_course.status-pending .row-actions .view {
38
- display: none;
39
- }
40
  #learn-press-admin-settings {
41
  /*input[name="learn_press_single_course_image_size[width]"],
42
  input[name="learn_press_single_course_image_size[height]"],
@@ -92,6 +97,9 @@
92
  box-sizing: border-box;
93
  opacity: 0;
94
  }
 
 
 
95
  #learn-press-admin-settings .learn-press-settings-wrap:before {
96
  content: '';
97
  position: absolute;
@@ -108,10 +116,18 @@
108
  #learn-press-admin-settings .learn-press-settings-wrap.ready {
109
  opacity: 1;
110
  }
 
 
 
 
 
 
 
111
  #learn-press-admin-settings.no-subtabs .learn-press-settings-wrap {
112
  float: none;
113
  margin-left: 0;
114
  padding-left: 25px;
 
115
  }
116
  #learn-press-admin-settings.no-subtabs .learn-press-settings-wrap:before {
117
  display: none;
@@ -153,6 +169,40 @@
153
  #learn-press-admin-settings .lp-setting-field .lp-sign-times {
154
  font-size: 19px;
155
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  /* message box */
157
  #learn-press-message-box-block {
158
  position: fixed;
@@ -222,15 +272,39 @@
222
  .meta_box_course_lesson_quiz li select {
223
  min-width: 250px;
224
  }
225
- .description {
226
- margin-top: 5px;
227
- }
228
  .dashed-placeholder {
229
  border: 2px dashed #999;
230
  padding: 10px;
231
  }
232
  .learn-press-message {
233
  position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  }
235
  .learn-press-message .learn-press-admin-notice-dismiss {
236
  position: absolute;
@@ -274,58 +348,70 @@ li.quick_quiz {
274
  .column-taxonomy-course_category {
275
  width: 15%;
276
  }
277
- /**/
278
- #lpr-block {
279
- position: fixed;
280
- top: 0;
281
- left: 0;
282
- right: 0;
283
- bottom: 0;
284
- background-color: #000;
285
- display: none;
286
- z-index: 200;
287
- opacity: 0.2;
288
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  .lpr-quick-add-form {
290
- background-color: #FFF;
291
- padding: 5px;
292
- position: absolute;
293
- z-index: 210;
294
- border: 1px solid #DDD;
295
  }
 
296
  .lpr-quick-add-form input {
297
- font-size: 15px;
298
- border-radius: 3px;
299
- border: 1px solid #DDD;
300
- width: 350px;
301
  }
 
302
  .lpr-quick-add-form input,
303
  .lpr-quick-add-form select {
304
- vertical-align: top;
305
  }
 
306
  .lpr-quick-add-form .lpr-ajaxload {
307
- display: none;
308
- background: url(../../images/spinner.gif) no-repeat center;
309
- width: 30px;
310
- color: #FFF;
311
- margin-top: 6px;
312
  }
 
313
  .lpr-quick-add-form.working .lpr-ajaxload {
314
- display: inline-block;
315
  }
 
316
  .lpr-quick-add-form.working button {
317
- display: none;
318
  }
 
319
  .post-type-lpr_question .lpr-question-option-label {
320
- display: none;
321
  }
 
322
  #lpr-question-options-wrap {
323
- margin-top: 8px;
324
  }
 
325
  .lpr-question tr.lpr-disabled .dashicons-trash,
326
  .lpr-question tr.lpr-disabled .dashicons-sort {
327
- display: none;
328
- }
329
  /*
330
  * Add on page
331
  */
@@ -1463,7 +1549,8 @@ body.post-type-lp_question #question_answer_ .inside {
1463
  }
1464
  .post-type-lp_order #submitpost .misc-pub-section label {
1465
  display: block;
1466
- font-weight: bold;
 
1467
  }
1468
  #learn-press-order {
1469
  margin: 15px;
@@ -1819,7 +1906,7 @@ input.regular-text[id^="learn-press-emails"] {
1819
  margin: 0;
1820
  }
1821
  .learn-press-tabs .learn-press-tab-content > li {
1822
- padding: 0 20px 0px 20px;
1823
  float: left;
1824
  width: 100%;
1825
  margin-right: -100%;
@@ -1865,6 +1952,25 @@ input.regular-text[id^="learn-press-emails"] {
1865
  content: '';
1866
  display: block;
1867
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1868
  @keyframes learn-press-meta-box-tabs-initialize-animation {
1869
  0% {
1870
  opacity: 0;
@@ -1920,3 +2026,5 @@ input.regular-text[id^="learn-press-emails"] {
1920
  opacity: 0;
1921
  }
1922
  }
 
 
4
  * @author ThimPress
5
  * @version 1.0
6
  */
7
+ input:focus::-webkit-input-placeholder {
8
+ color: transparent !important;
9
+ }
10
+ input:focus::-moz-placeholder {
11
+ color: transparent !important;
12
+ }
13
+ input:focus:-moz-placeholder {
14
+ color: transparent !important;
15
+ }
16
  .rwmb-field {
17
  margin: 20px 0 20px 0;
18
  }
19
  .rwmb-field .rwmb-input .rwmb-label {
20
  margin-top: 0;
21
  }
22
+ .rwmb-field .rwmb-input .description {
23
+ margin-top: 5px;
24
+ }
25
+ .rwmb-field .rwmb-input .description.option-desc {
26
+ font-weight: normal;
27
+ margin: 8px 0 10px 24px;
28
+ font-size: smaller;
29
+ font-style: italic;
30
+ }
31
  .lp-nav-tab-wrapper {
32
  border-bottom: 1px solid #ccc;
33
  margin: 0;
42
  .learn-press-quick-add-page-inline > * {
43
  vertical-align: top;
44
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  #learn-press-admin-settings {
46
  /*input[name="learn_press_single_course_image_size[width]"],
47
  input[name="learn_press_single_course_image_size[height]"],
97
  box-sizing: border-box;
98
  opacity: 0;
99
  }
100
+ #learn-press-admin-settings .learn-press-settings-wrap input[name="learn_press_auto_redirect_message"] {
101
+ width: 80%;
102
+ }
103
  #learn-press-admin-settings .learn-press-settings-wrap:before {
104
  content: '';
105
  position: absolute;
116
  #learn-press-admin-settings .learn-press-settings-wrap.ready {
117
  opacity: 1;
118
  }
119
+ #learn-press-admin-settings .learn-press-settings-wrap #learn-press-reset-settings {
120
+ float: right;
121
+ opacity: 0.5;
122
+ }
123
+ #learn-press-admin-settings .learn-press-settings-wrap #learn-press-reset-settings:hover {
124
+ opacity: 1;
125
+ }
126
  #learn-press-admin-settings.no-subtabs .learn-press-settings-wrap {
127
  float: none;
128
  margin-left: 0;
129
  padding-left: 25px;
130
+ padding-right: 25px;
131
  }
132
  #learn-press-admin-settings.no-subtabs .learn-press-settings-wrap:before {
133
  display: none;
169
  #learn-press-admin-settings .lp-setting-field .lp-sign-times {
170
  font-size: 19px;
171
  }
172
+ .learnpress_page_learn-press-settings .select2-result .select2-result-label {
173
+ position: relative;
174
+ }
175
+ .learnpress_page_learn-press-settings .select2-result .select2-result-label:before {
176
+ display: inline-block;
177
+ border-bottom: 1px solid #23282d;
178
+ width: 20px;
179
+ position: absolute;
180
+ top: 50%;
181
+ left: 8px;
182
+ }
183
+ .learnpress_page_learn-press-settings .select2-result .select2-result-label:hover:before {
184
+ border-color: #FFF;
185
+ }
186
+ .learnpress_page_learn-press-settings .select2-result.level-1 .select2-result-label {
187
+ padding-left: 35px;
188
+ }
189
+ .learnpress_page_learn-press-settings .select2-result.level-1 .select2-result-label:before {
190
+ content: '';
191
+ }
192
+ .learnpress_page_learn-press-settings .select2-result.level-2 .select2-result-label {
193
+ padding-left: 60px;
194
+ }
195
+ .learnpress_page_learn-press-settings .select2-result.level-2 .select2-result-label:before {
196
+ left: 35px;
197
+ content: '';
198
+ }
199
+ .learnpress_page_learn-press-settings .select2-result.level-3 .select2-result-label {
200
+ padding-left: 85px;
201
+ }
202
+ .learnpress_page_learn-press-settings .select2-result.level-3 .select2-result-label:before {
203
+ left: 60px;
204
+ content: '';
205
+ }
206
  /* message box */
207
  #learn-press-message-box-block {
208
  position: fixed;
272
  .meta_box_course_lesson_quiz li select {
273
  min-width: 250px;
274
  }
 
 
 
275
  .dashed-placeholder {
276
  border: 2px dashed #999;
277
  padding: 10px;
278
  }
279
  .learn-press-message {
280
  position: relative;
281
+ background: #FFF;
282
+ border-left: 5px solid #00A0D2;
283
+ padding: 10px 10px 0px 10px;
284
+ margin-bottom: 20px;
285
+ overflow: hidden;
286
+ color: #777;
287
+ }
288
+ .learn-press-message button {
289
+ float: right;
290
+ }
291
+ .learn-press-message p {
292
+ margin: 0 0 10px;
293
+ }
294
+ .learn-press-message:after {
295
+ clear: both;
296
+ content: '';
297
+ display: block;
298
+ }
299
+ .learn-press-message.notice {
300
+ border-left-color: #b3d20a;
301
+ }
302
+ .learn-press-message.lp-error,
303
+ .learn-press-message.error {
304
+ border-left-color: #b81c23;
305
+ }
306
+ .learn-press-message ul {
307
+ list-style-type: none;
308
  }
309
  .learn-press-message .learn-press-admin-notice-dismiss {
310
  position: absolute;
348
  .column-taxonomy-course_category {
349
  width: 15%;
350
  }
351
+ .tools-button {
352
+ text-align: right;
 
 
 
 
 
 
 
 
 
353
  }
354
+ /*
355
+ #lpr-block {
356
+ position: fixed;
357
+ top: 0;
358
+ left: 0;
359
+ right: 0;
360
+ bottom: 0;
361
+ background-color: #000;
362
+ display: none;
363
+ z-index: 200;
364
+ opacity: 0.2;
365
+ }
366
+
367
  .lpr-quick-add-form {
368
+ background-color: #FFF;
369
+ padding: 5px;
370
+ position: absolute;
371
+ z-index: 210;
372
+ border: 1px solid #DDD;
373
  }
374
+
375
  .lpr-quick-add-form input {
376
+ font-size: 15px;
377
+ border-radius: 3px;
378
+ border: 1px solid #DDD;
379
+ width: 350px;
380
  }
381
+
382
  .lpr-quick-add-form input,
383
  .lpr-quick-add-form select {
384
+ vertical-align: top;
385
  }
386
+
387
  .lpr-quick-add-form .lpr-ajaxload {
388
+ display: none;
389
+ background: url(../../images/spinner.gif) no-repeat center;
390
+ width: 30px;
391
+ color: #FFF;
392
+ margin-top: 6px;
393
  }
394
+
395
  .lpr-quick-add-form.working .lpr-ajaxload {
396
+ display: inline-block;
397
  }
398
+
399
  .lpr-quick-add-form.working button {
400
+ display: none;
401
  }
402
+
403
  .post-type-lpr_question .lpr-question-option-label {
404
+ display: none;
405
  }
406
+
407
  #lpr-question-options-wrap {
408
+ margin-top: 8px;
409
  }
410
+
411
  .lpr-question tr.lpr-disabled .dashicons-trash,
412
  .lpr-question tr.lpr-disabled .dashicons-sort {
413
+ display: none;
414
+ }*/
415
  /*
416
  * Add on page
417
  */
1549
  }
1550
  .post-type-lp_order #submitpost .misc-pub-section label {
1551
  display: block;
1552
+ font-weight: 600;
1553
+ margin-bottom: 8px;
1554
  }
1555
  #learn-press-order {
1556
  margin: 15px;
1906
  margin: 0;
1907
  }
1908
  .learn-press-tabs .learn-press-tab-content > li {
1909
+ padding: 0 20px 10px 20px;
1910
  float: left;
1911
  width: 100%;
1912
  margin-right: -100%;
1952
  content: '';
1953
  display: block;
1954
  }
1955
+ /* Metabox Widget */
1956
+ #widgets-right .widgets-holder-wrap .rwmb-label {
1957
+ margin-bottom: 5px;
1958
+ }
1959
+ #widgets-right .widgets-holder-wrap .rwmb-input input[type="text"] {
1960
+ width: 100%;
1961
+ }
1962
+ #widgets-right .widgets-holder-wrap .description {
1963
+ padding: 0;
1964
+ margin-top: 5px;
1965
+ font-size: small;
1966
+ font-style: italic;
1967
+ }
1968
+ .outdated-readmore-link {
1969
+ font-style: italic;
1970
+ }
1971
+ .learn-press-message.notice-warning {
1972
+ border-left-color: #ffb900;
1973
+ }
1974
  @keyframes learn-press-meta-box-tabs-initialize-animation {
1975
  0% {
1976
  opacity: 0;
2026
  opacity: 0;
2027
  }
2028
  }
2029
+
2030
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluL2FkbWluLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBVUEsS0FBSyxNQUFNO0VBQ1AsNkJBQUE7O0FBR0osS0FBSyxNQUFNO0VBQ1AsNkJBQUE7O0FBR0osS0FBSyxNQUFNO0VBQ1AsNkJBQUE7O0FBR0o7RUFDSSxxQkFBQTs7QUFESixXQUVJLFlBQ0k7RUFDSSxhQUFBOztBQUpaLFdBRUksWUFJSTtFQUNJLGVBQUE7O0FBQ0EsV0FOUixZQUlJLGFBRUs7RUFDRyxtQkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTs7QUFNaEI7RUFDSSw2QkFBQTtFQUNBLFNBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBOztBQUdKO0VBQ0kscUJBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBOztBQUdKLGtDQUFtQztFQUMvQixtQkFBQTs7QUFHSjs7Ozs7Ozs7Ozs7O0FBQUEsMkJBQ0k7RUFDSSxtQkFBQTs7QUFGUiwyQkFJSTtFQUNJLGNBQUE7RUFDQSxlQUFBOztBQU5SLDJCQUlJLDZCQUdJO0VBQ0kscUJBQUE7RUFDQSxlQUFBOztBQUNBLDJCQU5SLDZCQUdJLEdBR0s7RUFDRyxjQUFBOztBQVhoQiwyQkFlSTtFQUNJLG1CQUFBOztBQWhCUiwyQkFrQkk7RUFDSSxXQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHVCQUFBO0VBQ0EsaUJBQUE7O0FBeEJSLDJCQWtCSSxXQU9JO0VBQ0ksY0FBQTs7QUExQlosMkJBa0JJLFdBT0ksR0FFSTtFQUNJLGNBQUE7RUFDQSxhQUFBO0VBQ0EsZ0JBQUE7O0FBOUJoQiwyQkFrQ0k7RUFDSSxXQUFBO0VBQ0EseUJBQUE7RUFDQSxnQkFBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxzQkFBQTtFQUNBLFVBQUE7O0FBMUNSLDJCQWtDSSwyQkFTSSxNQUFLO0VBQ0QsVUFBQTs7QUFFSiwyQkFaSiwyQkFZSztFQUNHLFNBQVMsRUFBVDtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLFNBQUE7RUFDQSwyQkFBQTtFQUNBLGtCQUFBOztBQUVKLDJCQXBCSiwyQkFvQks7RUFDRyxTQUFTLEVBQVQ7RUFDQSxjQUFBO0VBQ0EsV0FBQTs7QUFFSiwyQkF6QkosMkJBeUJLO0VBQ0csVUFBQTs7QUE1RFosMkJBa0NJLDJCQTRCSTtFQUNJLFlBQUE7RUFDQSxZQUFBOztBQUNBLDJCQS9CUiwyQkE0QkksNEJBR0s7RUFDRyxVQUFBOztBQUlaLDJCQUFDLFdBQ0c7RUFDSSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7O0FBRUEsMkJBUFAsV0FDRywyQkFNSztFQUNHLGFBQUE7O0FBUlosMkJBQUMsV0FXRztFQUNJLGFBQUE7O0FBbEZaLDJCQXFGSSxNQUFLO0VBQ0Qsb0JBQUE7O0FBdEZSLDJCQXdGSTtFQUNJLGNBQUE7O0FBekZSLDJCQXNHSSxNQUFLO0VBQ0QsZUFBQTtFQUNBLGlCQUFBOztBQXhHUiwyQkEwR0k7RUFDSSxpQkFBQTtFQUNBLGdDQUFBO0VBQ0EscUJBQUE7RUFDQSxTQUFBOztBQTlHUiwyQkFnSEksTUFBSztBQWhIVCwyQkFpSEksTUFBSztBQWpIVCwyQkFrSEksTUFBSztBQWxIVCwyQkFtSEksTUFBSztBQW5IVCwyQkFvSEksTUFBSztBQXBIVCwyQkFxSEk7RUFDSSxtQkFBQTs7QUF0SFIsMkJBd0hJLE1BQUs7RUFDRCxVQUFBOztBQXpIUiwyQkEySEksa0JBQ0k7RUFDSSxtQkFBQTtFQUNBLGlCQUFBOztBQTlIWiwyQkEySEksa0JBS0k7RUFDSSxlQUFBOztBQUtaLHFDQUNJLGdCQUNJO0VBQ0ksa0JBQUE7O0FBQ0EscUNBSFIsZ0JBQ0ksc0JBRUs7RUFDRyxxQkFBQTtFQUNBLGdDQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7O0FBR0EscUNBWlosZ0JBQ0ksc0JBVUssTUFDSTtFQUNHLGtCQUFBOztBQUlaLHFDQWpCSixnQkFpQkssUUFDRztFQUNJLGtCQUFBOztBQUNBLHFDQXBCWixnQkFpQkssUUFDRyxzQkFFSztFQUNHLFNBQVMsRUFBVDs7QUFJWixxQ0F6QkosZ0JBeUJLLFFBQ0c7RUFDSSxrQkFBQTs7QUFDQSxxQ0E1QlosZ0JBeUJLLFFBQ0csc0JBRUs7RUFDRyxVQUFBO0VBQ0EsU0FBUyxFQUFUOztBQUlaLHFDQWxDSixnQkFrQ0ssUUFDRztFQUNJLGtCQUFBOztBQUNBLHFDQXJDWixnQkFrQ0ssUUFDRyxzQkFFSztFQUNHLFVBQUE7RUFDQSxTQUFTLEVBQVQ7OztBQVFwQjtFQUNJLGVBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxTQUFBO0VBQ0Esc0JBQUE7RUFDQSxjQUFBO0VBQ0EsWUFBQTs7QUFHSjtFQUNJLGVBQUE7RUFDQSxNQUFBO0VBQ0EsU0FBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsZUFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTs7QUFHSjtFQUNJLGNBQUE7O0VBRUEscUJBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7O0FBR0o7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBOztBQUdKO0VBQ0ksZUFBQTtFQUNBLGdCQUFBOztBQUdKO0VBQ0ksc0JBQXNCLDZCQUF0QjtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7O0FBR0o7RUFDSSxnQkFBQTtFQUNBLDZCQUFBO0VBQ0EsaUJBQUE7O0FBR0o7RUFDSSw2QkFBQTs7QUFHSixvQkFBcUIsZUFBZTtFQUNoQyxlQUFBOzs7QUFJSjtFQUNJLGFBQUE7O0FBR0osT0FBTztFQUNILFlBQUE7RUFDQSxrQkFBQTs7QUFHSixnQkFBaUI7RUFDYix3QkFBQTs7QUFHSiw0QkFBNkIsR0FBRztBQUNoQyw0QkFBNkIsR0FBRztFQUM1QixnQkFBQTs7QUFHSjtFQUNJLHVCQUFBO0VBQ0EsYUFBQTs7QUFHSjtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw4QkFBQTtFQUNBLDJCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLFdBQUE7O0FBUEosb0JBUUk7RUFDSSxZQUFBOztBQVRSLG9CQVdJO0VBQ0ksZ0JBQUE7O0FBRUosb0JBQUM7RUFDRyxXQUFBO0VBQ0EsU0FBUyxFQUFUO0VBQ0EsY0FBQTs7QUFFSixvQkFBQztFQUNHLDBCQUFBOztBQUVKLG9CQUFDO0FBQ0Qsb0JBQUM7RUFDRywwQkFBQTs7QUF4QlIsb0JBMEJJO0VBQ0kscUJBQUE7O0FBM0JSLG9CQTZCSTtFQUNJLGtCQUFBO0VBQ0EscUJBQUE7RUFDQSx5QkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUNBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxxQkFBQTtFQUNBLFFBQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7RUFDQSxVQUFBOztBQUNBLG9CQWZKLGtDQWVLO0VBQ0csc0JBQUE7RUFDQSxTQUFTLE9BQVQ7RUFDQSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTs7Ozs7QUFRWixFQUFFO0FBQU8sRUFBRTtBQUFTLEVBQUU7QUFBZSxFQUFFO0VBQ25DLGlCQUFBOztBQUdKLFdBQVk7QUFDWixXQUFZO0FBQ1osV0FBWTtBQUNaLFdBQVk7QUFDWixXQUFZO0VBQ1Isa0JBQUE7O0FBR0o7RUFDSSxVQUFBOztBQUdKO0VBQ0ksaUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9FSjtFQUVJLGtCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBOztBQUxKLDBCQU9JO0VBQ0ksYUFBQTs7QUFSUiwwQkFVSSxRQUFPO0VBQ0gsY0FBQTs7QUFYUiwwQkFjSTtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw2Q0FBQTtFQUNBLHFDQUFBO0VBQ0EsYUFBQTtFQUNBLHNCQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTs7QUF0QlIsMEJBd0JJO0VBQ0ksV0FBQTtFQUNBLFVBQUE7O0FBMUJSLDBCQTRCSTtFQUNJLGdCQUFBO0VBQ0Esa0JBQUE7O0FBOUJSLDBCQWdDSTtFQUNJLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxVQUFBO0VBQ0EsK0RBQUE7RUFDQSx1REFBQTs7QUF6Q1IsMEJBNENJO0VBQ0ksV0FBQTtFQUNBLFlBQUE7RUFDQSxXQUFBOztBQS9DUiwwQkFpREk7RUFDSSxtQkFBQTtFQUNBLFVBQUE7O0FBbkRSLDBCQXNESTtFQVFJLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLFFBQUE7RUFDQSxZQUFBO0VBQ0EsZUFBZSxnQkFBZjtFQUNBLG1CQUFtQixnQkFBbkI7RUFDQSxXQUFXLGdCQUFYOztBQVpBLDBCQUZKLHFCQUVLO0VBQ0csU0FBUyxFQUFUO0VBQ0EsV0FBQTtFQUNBLGNBQUE7O0FBM0RaLDBCQXNESSxxQkFnQkk7QUF0RVIsMEJBc0RJLHFCQWlCSTtFQUNJLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLGFBQWEsV0FBYjtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTs7QUFqRlosMEJBc0RJLHFCQTZCSTtFQUNJLFdBQUE7O0FBQ0EsMEJBL0JSLHFCQTZCSSxXQUVLO0VBQ0csU0FBUyxPQUFUO0VBQ0EsY0FBQTtFQUNBLGtCQUFBOztBQXhGaEIsMEJBc0RJLHFCQXFDSTtFQUNJLFdBQUE7O0FBRUEsMEJBeENSLHFCQXFDSSxXQUdLO0VBQ0csU0FBUyxPQUFUO0VBQ0EsY0FBQTtFQUNBLGtCQUFBOztBQUlaLHdCQUEyQztFQTh4RC9DLDBCQTd4RFE7SUFDSSxVQUFBOztFQTR4RFosMEJBenhEUTtJQUNJLGdCQUFBOzs7QUFJUix3QkFBMEM7RUFveEQ5QztJQW54RFEsaUJBQUE7O0VBbXhEUiwwQkFqeERRO0lBQ0ksV0FBQTtJQUNBLFdBQUE7O0VBK3dEWiwwQkE1d0RRO0lBQ0ksZ0JBQUE7SUFDQSxjQUFBO0lBQ0EsZUFBQTs7O0FBSVIsbUJBQXFDO0VBcXdEekM7SUFwd0RRLGNBQUE7OztBQUlSLG9CQUFxQjtFQUNqQixVQUFBO0VBQ0EscUJBQUE7O0FBR0osb0JBQXFCO0VBQ2pCLFlBQUE7O0FBR0osb0JBQXFCLGVBQWU7RUFDaEMscUJBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBOztBQUdKLG9CQUFxQixlQUFlO0VBQ2hDLGtCQUFBO0VBQ0EsWUFBQTs7QUFHSixvQkFBcUIsZUFBZTtFQUNoQyxrQkFBQTtFQUNBLFlBQUE7O0FBR0osb0JBQXFCLGVBQWUsRUFBQztFQUNqQyxxQkFBQTtFQUNBLFNBQVMsdUJBQVQ7O0FBR0o7RUFDSSxTQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBOztBQUdKO0VBQ0ksZ0JBQUE7O0FBREosb0JBR0k7RUFDSSx3QkFBQTs7QUFKUixvQkFNSSxXQUFVLFlBQVk7RUFDbEIsV0FBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTs7QUFUUixvQkFXSSxXQUFVLFlBQVk7RUFDbEIsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsY0FBQTs7QUFHSixvQkFBQywwQkFFRztFQU1JLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDRCQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGlCQUFBOztBQWRSLG9CQUFDLDBCQUVHLG9CQUVJO0VBQ0ksU0FBQTtFQUNBLG9CQUFBOztBQWFoQixvQkFBb0I7RUFDaEIsY0FBQTtFQUNBLFdBQUE7RUFDQSxTQUFTLEVBQVQ7O0FBR0osb0JBQXFCOzs7OztBQU1yQixvQkFBcUIsS0FBSztFQUN0Qix3QkFBQTtFQUNBLHNCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTs7QUFHSixvQkFBcUIsS0FBSztFQUN0QixrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0NBQUE7O0FBR0osb0JBQXFCLEtBQUssa0JBQWtCO0VBQ3hDLFdBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7O0FBR0osb0JBQXFCLEtBQUssa0JBQWtCO0VBQ3hDLGtCQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxZQUFBO0VBQ0EsTUFBQTtFQUNBLDZCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBOztBQUdKLG9CQUFxQixLQUFLLGtCQUFrQjtFQUN4QyxrQkFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLDZCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7O0FBR0osb0JBQXFCLEtBQUksTUFBTztFQUM1QixZQUFBOztBQUdKLG9CQUFxQixLQUFJLE1BQU87RUFDNUIsVUFBQTs7QUFHSixvQkFBcUIsS0FBSztFQUN0QixnQkFBQTtFQUNBLGFBQUE7RUFDQSx5QkFBQTtFQUNBLDBCQUFBOztBQUdKLG9CQUFxQixLQUFLLGFBQWE7RUFDbkMsYUFBQTs7QUFHSixvQkFBcUIsS0FBSztFQUN0QixrQkFBQTtFQUNBLFlBQUE7O0FBR0osb0JBQXFCLEtBQUssZ0JBQWdCO0VBQ3RDLGVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTs7QUFHSixvQkFBcUIsS0FBSyxnQkFBZ0IsY0FBYTtFQUNuRCxxQkFBQTs7QUFHSixvQkFBcUI7RUFDakIsaUJBQUE7O0FBR0osZ0JBQWdCLE9BQVEsb0JBQW9CO0VBQ3hDLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDRCQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGVBQUE7O0FBR0osb0JBQXFCLFFBQU87RUFDeEIsdURBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTs7QUFHSixvQkFBcUIsY0FBYztFQUMvQixjQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTs7QUFHSixvQkFBcUIsY0FBYyxPQUFNO0VBQ3JDLGNBQUE7O0FBR0osb0JBQXFCLGNBQWMsT0FBTTtFQUNyQyxjQUFBOztBQUdKLG9CQUFxQixjQUFjO0VBQy9CLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTs7QUFHSixvQkFBcUIsY0FBYyxPQUFPO0VBQ3RDLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBOztBQUdKLG9CQUFxQixhQUFhO0VBQzlCLGVBQUE7O0FBR0osb0NBQW9DO0VBQ2hDLHNCQUFBOztBQUdKLG9CQUFxQjtFQUNqQixpQkFBQTs7QUFHSix5QkFBMEI7RUFDdEIsVUFBQTs7QUFHSixvQkFBcUIsRUFBQztFQUNsQixTQUFTLEVBQVQ7O0FBR0oseUJBQTBCO0VBQ3RCLGFBQUE7RUFDQSxzQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTs7QUFHSix5QkFBMEI7RUFDdEIsZ0JBQUE7RUFDQSxnQkFBQTs7QUFHSix5QkFBMEIsT0FBTztFQUM3QixrQkFBQTtFQUNBLGdCQUFBOztBQUdKLHlCQUEwQixPQUFPO0VBQzdCLFlBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7O0FBR0osZUFDSTtFQUNJLGlCQUFBOztBQUZSLGVBSUk7RUFDSSxrQkFBQTs7QUFMUixlQU9JLGlCQUFpQjtFQUNiLFdBQUE7O0FBUlIsZUFVSTtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsNEJBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7O0FBbEJSLGVBcUJJO0VBQ0ksbUJBQUE7RUFDQSxhQUFhLDhDQUFiO0VBQ0EsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTs7QUEzQlIsZUE2QkksYUFBYTtFQUVULGNBQUE7O0FBL0JSLGVBaUNJO0VBQ0ksWUFBQTtFQUNBLHFCQUFBOztBQW5DUixlQXFDSTtFQUNJLHFCQUFBOztBQXRDUixlQXdDSTtFQUNJLGVBQUE7RUFDQSxrQkFBQTtFQUNBLFFBQUE7O0FBM0NSLGVBNkNJO0VBQ0ksa0JBQUE7RUFDQSxVQUFBO0VBQ0EsTUFBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7O0FBRUEsZUFQSixjQU9LO0VBQ0csU0FBUyxFQUFUO0VBQ0EsY0FBQTtFQUNBLFdBQUE7O0FBdkRaLGVBNkNJLGNBYUk7RUFDSSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTs7QUEvRFosZUFvRUk7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSx5QkFBQTtFQUNBLDBCQUFBO0VBQ0EsZ0JBQUE7O0FBSVIsUUFBMkI7RUFDdkIsb0JBQXFCOzs7O0FBS3pCLG1CQUFxQztFQUNqQyxvQkFBcUI7SUFDakIsWUFBQTs7RUFJSixvQkFBcUIsWUFBVztJQUM1QixvQkFBQTs7RUFHSixvQkFBcUIsWUFBVztJQUM1QixvQkFBQTs7RUFHSix5QkFBMEIsT0FBTztJQUM3QixVQUFBOzs7QUFLUixRQUEwQjtFQUN0QixvQkFBcUI7OztFQUlyQixvQkFBcUIsS0FBSztJQUN0QixtQkFBQTs7O0FBSVIsUUFBMEI7RUFDdEIsb0JBQXFCO0lBQ2pCLFdBQUE7O0VBR0oseUJBQTBCLE9BQU87SUFDN0IsV0FBQTtJQUNBLGtCQUFBOzs7O0FBTVIsd0JBQXlCLG1CQUFtQjtFQUN4QyxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBOztBQUdKLFdBQVc7RUFDUCxpQkFBQTs7QUFHSjtFQUNJLHFCQUFBO0VBQ0Esa0JBQUE7O0FBR0o7RUFDSSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxPQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFQUNBLHNCQUFBO0VBQ0EsVUFBQTtFQUNBLFNBQUE7RUFDQSxhQUFBOztBQUdKLHdCQUF5QjtFQUNyQixTQUFBOztBQUdKLHdCQUF5QixLQUFLO0VBQzFCLGNBQUE7RUFDQSxZQUFBOztBQUdKLGdCQUFpQjtFQUNiLG1CQUFBO0VBQ0Esa0JBQUE7O0FBR0osZ0JBQWlCLElBQUc7RUFDaEIsUUFBQTtFQUNBLFNBQUE7RUFDQSw2QkFBQTtFQUNBLHNCQUFBO0VBQ0EsU0FBUyxFQUFUO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtFQUNBLFFBQUE7RUFDQSxRQUFBOztBQUdKLGdCQUFnQixNQUFPO0VBQ25CLGNBQUE7OztBQU9KLG9CQUFxQjtFQUNqQiw4QkFBQTtFQUNBLG9CQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTs7QUFHSixvQkFBcUIsa0JBQWlCO0VBQ2xDLFNBQVMsRUFBVDtFQUNBLGNBQUE7RUFDQSxXQUFBOztBQUdKLG9CQUFxQjtFQUNqQixXQUFBO0VBQ0EsWUFBQTs7QUFHSixvQkFBcUIscUJBQXFCO0VBQ3RDLG1CQUFBOztBQUdKLG9CQUFxQjtFQUNqQixrQkFBQTtFQUNBLGtCQUFBOztBQUdKLG9CQUFxQixpQkFBaUI7RUFDbEMsYUFBQTs7QUFHSixvQkFBcUIsaUJBQWlCLEtBQUs7RUFDdkMscUJBQUE7RUFDQSxjQUFBO0VBQ0EseUJBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBOztBQUdKLG9CQUFxQjtFQUNqQixZQUFBO0VBQ0EsWUFBQTs7O0FBSUosS0FBSztFQUNELGFBQUE7O0FBR0osbUJBQW1CO0VBQ2YsbUJBQUE7RUFDQSw0Q0FBQTtFQUNBLGNBQUE7RUFDQSxZQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQ0FBQTtFQUNBLDZCQUFBO0VBQ0EsMkJBQUE7RUFDQSx3QkFBQTtFQUNBLHFCQUFBOztBQUdKLG1CQUFtQixJQUFJO0VBQ25CLFNBQVMsRUFBVDtFQUNBLHdDQUFBO0VBQ0EsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSxnQ0FBQTtFQUNBLDZCQUFBO0VBQ0EsMkJBQUE7RUFDQSx3QkFBQTs7QUFHSixtQkFBbUIsSUFBSTtFQUNuQixTQUFTLEtBQVQ7RUFDQSxrQkFBQTtFQUNBLFVBQUE7RUFDQSxRQUFBO0VBQ0EsV0FBQTs7QUFHSixtQkFBbUIsSUFBSSxNQUFNO0VBQ3pCLFNBQUE7O0FBR0osbUJBQW1CLElBQUksR0FBRztFQUN0QixTQUFTLElBQVQ7RUFDQSxXQUFBOztBQUdKLG1CQUFtQixJQUFJO0VBQ25CLG1CQUFBOztBQUdKLG1CQUFtQixJQUFJLEdBQUc7RUFDdEIsVUFBQTs7QUFHSixtQkFBbUIsSUFBSSxHQUFHLE1BQU07RUFDNUIsVUFBQTs7O0FBSUosU0FBUztFQUNMLGNBQUE7RUFDQSxTQUFTLEVBQVQ7RUFDQSxXQUFBOztBQUdKO0VBQ0ksY0FBQTtFQUNBLFdBQUE7RUFDQSxTQUFBOzs7O0FBTUo7RUFDSSxzQkFBQTtFQUNBLHlCQUFBO0VBQ0EsV0FBQTs7QUFPSixlQUFlLHFCQUFzQjtBQUNyQyxlQUFlLHFCQUFzQjtFQUNqQyx5QkFBQTs7QUFHSixlQUFlLHFCQUFzQixpQkFBaUI7QUFDdEQsZUFBZSxxQkFBc0Isd0JBQXdCO0VBQ3pELGFBQUE7O0FBZ0JKLGdCQUFpQixNQUFNO0VBQ25CLHNCQUFBO0VBQ0EseUJBQUE7RUFDQSxhQUFBO0VBQ0EsZ0JBQUE7RUFFQSxjQUFBOztBQUlKLGdCQUFpQixNQUFNO0FBQ3ZCLGdCQUFpQixNQUFNO0VBQ25CLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHlCQUFBOztBQUdKLGdCQUFpQjtFQUNiLFlBQUE7O0FBR0osZ0JBQWlCLE1BQU0sR0FBRyxNQUFLO0FBQy9CLGdCQUFpQixNQUFNLEdBQUcsTUFBSztFQUMzQixXQUFBOztBQUdKLGdCQUFpQjtFQUNiLDhCQUFBOztBQUdKLGdCQUFpQix5QkFBeUI7RUFDdEMsc0JBQXNCLDBCQUF0Qjs7QUFHSixlQUFnQjtFQUNaLFdBQUE7RUFDQSw2QkFBQTtFQUNBLHlCQUFBO0VBQ0EsZ0JBQUE7O0FBR0osZUFBZ0IsZ0JBQWU7RUFDM0Isc0JBQUE7RUFDQSxTQUFTLE9BQVQ7O0FBR0osZUFBZ0IsZ0JBQWU7QUFDL0IsZUFBZSxNQUFPO0VBQ2xCLGdCQUFBO0VBQ0EsYUFBQTtFQUNBLDZCQUFBO0VBQ0EseUJBQUE7O0FBR0osZUFBZSxNQUFPO0VBQ2xCLG9CQUFBOztBQUdKO0VBQ0ksZUFBQTtFQUNBLGNBQUE7O0FBR0osdUJBQXVCO0VBQ25CLFlBQUE7O0FBR0osdUJBQXVCO0VBQ25CLGNBQUE7OztBQUlKLGdCQUFpQjtFQUNiLGtCQUFBOztBQUdKLHdCQUF5QjtFQUNyQixtQ0FBQTs7O0FBSUosSUFBSSxrQkFBbUI7QUFDdkIsSUFBSSxzQkFBdUI7RUFDdkIsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsNkJBQUE7O0FBR0osSUFBSSxrQkFBbUIsV0FBVztBQUNsQyxJQUFJLHNCQUF1QixrQkFBa0I7RUFDekMsYUFBQTs7QUFHSixJQUFJLGtCQUFtQixXQUFXO0FBQ2xDLElBQUksc0JBQXVCLGtCQUFrQjtFQUN6QyxhQUFBOztBQUdKLElBQUksa0JBQW1CLFdBQVc7QUFDbEMsSUFBSSxzQkFBdUIsa0JBQWtCO0VBQ3pDLFVBQUE7O0FBR0osVUFBVyx3QkFBd0I7RUFDL0IsWUFBQTtFQUNBLFNBQUE7RUFDQSxjQUFBOztBQUdKLFVBQVcsd0JBQXdCLGtCQUFrQixFQUFDO0VBQ2xELGNBQUE7O0FBR0osVUFBVztFQUNQLHFCQUFBO0VBQ0Esa0JBQUE7O0FBR0osVUFBVyxnQ0FBZ0M7RUFDdkMsa0JBQUE7RUFDQSxTQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxzQkFBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxXQUFBOztBQUdKLFVBQVcsZ0NBQWdDLEtBQUs7RUFDNUMsU0FBQTs7QUFHSixVQUFXLGdDQUFnQyxLQUFLLEdBQUc7RUFDL0MsY0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsZ0JBQUE7O0FBR0osVUFBVztFQUNQLGVBQUE7RUFDQSxnQkFBQTtFQUNBLFNBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBOztBQUdKLFVBQVc7RUFDUCxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLGFBQUE7RUFDQSxlQUFBOztBQUdKLFVBQVcsOEJBQTZCO0VBQ3BDLGNBQUE7O0FBR0osVUFBVztFQUNQLHVCQUFBOztBQU9KLFVBQVc7RUFDUCxzQkFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLHFCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7O0FBR0osVUFBVyxvQkFBb0I7RUFDM0IsWUFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBOztBQUdKLFVBQVcsb0JBQW9CLHVCQUF1QjtFQUNsRCxhQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7O0FBR0osVUFBVyxvQkFBb0IsdUJBQXVCLEVBQUM7RUFDbkQsY0FBQTs7QUFHSixVQUFXLG9CQUFtQixNQUFPO0VBQ2pDLG1CQUFBOztBQUdKLFVBQVcsZUFBYztFQUNyQiw4QkFBQTtFQUNBLHNCQUFzQiwwQkFBdEI7RUFDQSxzQkFBQTtFQUNBLG1CQUFBOztBQUdKLFVBQVc7RUFDUCxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxzQkFBQTs7QUFHSixVQUFXLG9CQUFvQjtFQUMzQixlQUFBO0VBQ0EsWUFBQTs7QUFHSixVQUFXLGdDQUFnQztFQUN2QyxhQUFBOztBQUdKLHVCQUF3QjtFQUNwQixxQkFBQTs7QUFHSix1QkFBd0IsS0FBSztFQUN6QixNQUFBO0VBQ0EsUUFBQTs7QUFHSix1QkFBdUIsVUFBVztFQUM5QiwwQkFBQTs7QUFHSix1QkFBdUIsVUFBVztFQUM5Qix3QkFBQTs7QUFHSixzQkFBdUIsT0FBTztFQUMxQiwwQkFBQTs7QUFHSjtFQUNJLGdCQUFBOztBQUdKO0VBQ0ksa0JBQUE7O0FBR0osa0JBQW1CO0VBQ2YsWUFBQTtFQUNBLFlBQUE7O0FBR0osY0FBZTtFQUNYLHFCQUFBO0VBQ0EsbUJBQUE7O0FBR0osY0FBZSxLQUFLLE1BQUs7RUFDckIsWUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLFNBQUE7RUFDQSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QUFHSixjQUFlLEtBQUs7RUFDaEIscUJBQUE7RUFDQSxzQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTs7QUFHSixrQkFBa0IsUUFBUTtFQUN0QixTQUFTLEVBQVQ7RUFDQSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBOztBQU9KLGtCQUFtQjtFQUNmLHFCQUFBO0VBQ0Esa0JBQUE7O0FBR0osa0JBQW1CLEdBQUU7RUFDakIsU0FBUyxFQUFUO0VBQ0EscUJBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsaUJBQUE7O0FBR0osa0JBQW1CLEdBQUc7RUFDbEIscUJBQUE7RUFDQSxzQkFBQTtFQUNBLGlCQUFBOztBQUdKLGtCQUFtQixHQUFFLElBQUk7RUFDckIsbUJBQUE7O0FBR0osa0JBQW1CLEdBQUUsWUFBWTtFQUM3QixtQkFBQTs7QUFHSixrQkFBbUIsR0FBRSxTQUFTO0VBQzFCLG1CQUFBOztBQUdKO0VBQ0ksa0JBQUE7O0FBR0o7RUFDSSxhQUFBOztBQUdKO0VBQ0ksa0JBQUE7RUFDQSxRQUFBOzs7QUFJSjtFQUNJLGVBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxTQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGFBQUE7O0FBR0o7RUFDSSxrQkFBQTs7QUFHSiw4QkFBK0I7RUFDM0IsaUJBQUE7RUFDQSxlQUFBOztBQUdKO0FBQWEsV0FBVztFQUNwQixjQUFBOztBQUdKLFdBQVc7RUFDUCxlQUFBOztBQUdKO0FBQ0E7RUFDSSxxQkFBQTtFQUNBLHNCQUFBO0VBQ0Esb0JBQUE7O0FBR0o7RUFDSSx5QkFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLFdBQUE7O0FBR0o7RUFDSSxZQUFBOztBQUdKLGdCQUFpQixNQUFLO0VBQ2xCLFlBQUE7O0FBR0o7RUFDSSwwQkFBQTtFQUNBLDhCQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBOztBQUdKLG1CQUFvQjtFQUNoQixrQkFBQTs7QUFHSixtQkFBb0I7RUFDaEIscUJBQUE7O0VBRUEsa0JBQUE7RUFDQSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxTQUFBO0VBQ0EsWUFBQTs7QUFHSixtQkFBb0I7RUFDaEIsa0JBQUE7RUFDQSxTQUFBOztFQUVBLHNCQUFBO0VBQ0EsU0FBQTtFQUNBLGVBQUE7RUFDQSxzQkFBQTtFQUNBLFdBQUE7O0VBRUEsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTs7QUFHSixtQkFBb0IsbUJBQW1CO0VBQ25DLFNBQUE7O0FBR0osbUJBQW9CLG1CQUFtQixHQUFHO0VBQ3RDLGNBQUE7RUFDQSxhQUFBO0VBQ0EsY0FBQTtFQUNBLHFCQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBOztBQUdKLG1CQUFvQixtQkFBbUIsR0FBRyxFQUFDO0VBQ3ZDLHlCQUFBOztBQUdKLG1CQUFtQixJQUFJLFdBQVcsTUFBTztBQUN6QyxtQkFBbUIsSUFBSSxXQUFZLEdBQUU7RUFDakMsY0FBQTs7QUFNSixtQkFBb0I7QUFDcEIsbUJBQW9CLGdCQUFlO0VBQy9CLGlCQUFBO0VBQ0EsbUJBQUE7RUFDQSx5QkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0JBQUE7O0FBR0o7QUFDQTtBQUNBO0VBQ0ksVUFBQTs7QUFHSixvQkFBcUIsYUFBYSxhQUFZO0FBQzlDLG9CQUFxQixhQUFhLGFBQVk7QUFDOUMsb0JBQXFCLGFBQWEsWUFBVztFQUN6QyxzQkFBQTtFQUNBLHFCQUFBO0VBQ0EsMEJBQUE7O0VBRUEsbUNBQUE7RUFDQSxrQ0FBQTtFQUNBLG1CQUFBOztBQUdKLG9CQUFxQixhQUFhLGFBQVk7RUFDMUMsU0FBUyxPQUFUO0VBQ0EsY0FBQTs7QUFHSixvQkFBcUIsYUFBYSxhQUFZO0VBQzFDLFNBQVMsT0FBVDtFQUNBLGNBQUE7O0FBR0osb0JBQXFCLGFBQWEsWUFBVztFQUN6QyxTQUFTLE9BQVQ7RUFDQSxjQUFBOztBQUdKLG9CQUFxQixhQUFhLGFBQVksTUFBTTtFQUNoRCxTQUFTLE9BQVQ7RUFDQSxjQUFBOztBQUdKLG9CQUFxQixhQUFhLFlBQVcsTUFBTTtFQUMvQyxTQUFTLE9BQVQ7RUFDQSxjQUFBOztBQUdKLG9CQUFxQixhQUFhLGdCQUFlO0VBQzdDLFNBQVMsT0FBVDtFQUNBLGdEQUFBO0VBQ0Esd0NBQUE7RUFDQSxlQUFBOztBQUdKLG9CQUFxQixhQUFhLGdCQUFnQjtFQUM5QyxhQUFBOztBQUdKLGtCQUFtQjtFQUNmLHFCQUFBO0VBQ0EsZ0JBQUE7O0FBR0o7RUFDSSxrQkFBQTtFQUNBLGFBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsU0FBQTtFQUNBLHlCQUFBO0VBQ0EsZUFBQTs7QUFHSiwwQkFBMEI7QUFDMUIsMEJBQTBCLE1BQU07RUFDNUIseUJBQUE7O0FBR0osMEJBQTBCO0VBQ3RCLFNBQVMsRUFBVDtFQUNBLGNBQUE7RUFDQSxrQkFBQTs7RUFFQSxXQUFXLGFBQVg7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7OztBQUlKLFdBQVk7QUFDWixXQUFZO0VBQ1Isa0JBQUE7O0FBR0o7RUFDSSxhQUFBOztBQUdKLE9BQU87RUFDSCxZQUFBO0VBQ0EsZUFBQTs7QUFHSixnQkFBaUI7RUFDYix3QkFBQTs7QUFHSiw0QkFBNkIsR0FBRztBQUNoQyw0QkFBNkIsR0FBRztFQUM1QixnQkFBQTs7QUFHSixjQUFlO0VBQ1gsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsY0FBQTtFQUNBLGtCQUFBOztBQUdKO0VBQ0ksZUFBQTs7QUFHSjtFQUNJLHVCQUFBO0VBQ0EsYUFBQTs7Ozs7Ozs7O0FBWUosbUJBQW9CO0FBQ3BCLG1CQUFvQixlQUFlO0FBQ25DLG1CQUFvQixlQUFlO0VBQy9CLGFBQUE7O0FBR0osbUJBQW9CLFlBQVksa0JBQWtCO0VBQzlDLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBOztBQUdKO0VBQ0ksWUFBQTs7QUFHSixrQkFBbUI7RUFDZixlQUFBO0VBQ0EsVUFBQTtFQUNBLG1CQUFBOztBQUdKLGtCQUFtQjtFQUNmLGtCQUFBO0VBQ0EsVUFBQTs7QUFHSixrQkFBbUI7QUFDbkIsa0JBQW1CO0FBQ25CLGtCQUFtQjtFQUNmLGVBQUE7RUFDQSxtQkFBQTs7QUFHSixrQkFBbUI7QUFDbkIsa0JBQW1CO0FBQ25CLGtCQUFtQjtFQUNmLFVBQUE7RUFDQSxrQkFBQTs7QUFHSixrQkFBbUIsYUFBYTtFQUM1QixzQkFBQTtFQUNBLHlCQUFBO0VBQ0EsV0FBQTs7QUFHSixrQkFBbUIsYUFBYSxNQUFNO0FBQ3RDLGtCQUFtQixhQUFhLE1BQU07RUFDbEMsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBOztBQUdKLHVDQUF3QztFQUNwQyxhQUFBOzs7QUFJSiw2QkFDSTtFQUNJLFdBQUE7OztBQUtSO0VBQ0ksd0JBQUE7O0FBR0osS0FBSyxhQUFhO0VBQ2QsVUFBQTs7QUFHSjtFQUNJLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSx3Q0FBQTtFQUNBLHFDQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQ0FBQTtFQUNBLGdDQUFBO0VBQ0Esd0JBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLHFCQUFBOztBQUdKLGNBQWM7RUFDViw0Q0FBQTtFQUNBLG9DQUFBOztBQUdKLGNBQWMsUUFBUztFQUNuQixVQUFBOztBQUdKLGNBQWU7RUFDWCxXQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSwyQkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSw4QkFBOEIsOEJBQTlCO0VBQ0EsMkJBQTJCLDhCQUEzQjtFQUNBLHlCQUF5Qiw4QkFBekI7RUFDQSxzQkFBc0IsOEJBQXRCO0VBQ0Esa0ZBQUE7RUFDQSwwRUFBQTs7QUFHSjtFQUNJLHFCQUFBO0VBQ0EseUJBQUE7RUFDQSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLFdBQUE7RUFDQSxjQUFBOztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSSxZQUFBO0VBQ0EsZ0JBQUE7O0FBR0osNkJBQ0ksWUFDSSxHQUNJO0VBQ0ksOEJBQUE7O0FBSmhCLDZCQVFJO0VBQ0ksY0FBQTs7QUFJUixvQ0FDSTtFQUNJLFVBQUE7RUFDQSxhQUFBOztBQUhSLG9DQUNJLFFBR0k7RUFDSSxhQUFBOztBQUxaLG9DQUNJLFFBR0ksNkJBRUk7RUFDSSxVQUFBO0VBQ0EsV0FBQTs7QUFSaEIsb0NBQ0ksUUFHSSw2QkFFSSxHQUdJO0FBVGhCLG9DQUNJLFFBR0ksNkJBRUksR0FHUztFQUNELGlCQUFBO0VBQ0EsY0FBQTs7QUFFSixvQ0FaWixRQUdJLDZCQUVJLEdBT0s7RUFDRyxXQUFBO0VBQ0EsV0FBQTtFQUNBLFdBQUE7O0FBQ0Esb0NBaEJoQixRQUdJLDZCQUVJLEdBT0ssV0FJSTtFQUNHLGdDQUFBOztBQURKLG9DQWhCaEIsUUFHSSw2QkFFSSxHQU9LLFdBSUksWUFFRztFQUNJLGtCQUFBOztBQUdSLG9DQXRCaEIsUUFHSSw2QkFFSSxHQU9LLFdBVUk7RUFDRyw2QkFBQTtFQUNBLGNBQUE7O0FBWlIsb0NBWlosUUFHSSw2QkFFSSxHQU9LLFdBY0c7RUFDSSxxQkFBQTs7QUFReEI7RUFDSSxnQkFBQTs7QUFESixzQkFFSSxNQUFNLEdBQUc7RUFDTCxTQUFBOztBQUhSLHNCQUtJLE1BQU07RUFDRixpQkFBQTs7QUFOUixzQkFLSSxNQUFNLEdBRUY7RUFDSSxrQkFBQTtFQUNBLHFCQUFBOztBQVRaLHNCQUtJLE1BQU0sR0FFRixFQUdJO0VBQ0ksbUJBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsU0FBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7O0FBQ0Esc0JBYlosTUFBTSxHQUVGLEVBR0ksRUFRSztFQUNHLG1CQUFBO0VBQ0EsV0FBQTs7QUFwQnBCLHNCQTBCSTtFQUNJLFlBQUE7O0FBQ0Esc0JBRkoscUJBRUs7RUFDRyxjQUFBOztBQUVKLHNCQUxKLHFCQUtLO0VBQ0csY0FBQTs7QUFoQ1osc0JBbUNJO0FBbkNKLHNCQW1DMEI7RUFDbEIsaUJBQUE7O0FBcENSLHNCQXNDSTtFQUNJLFVBQUE7O0FBdkNSLHNCQXlDSSwwQkFBMEIsR0FBRztFQUN6QixjQUFBOztBQUlSO0VBQ0k7SUFDSSxtQkFBbUIsWUFBbkI7SUFDQSxXQUFXLFlBQVg7O0VBRUo7SUFDSSxtQkFBbUIsY0FBbkI7SUFDQSxXQUFXLGNBQVg7OztBQUlSO0VBQ0k7SUFDSSxtQkFBbUIsWUFBbkI7SUFDQSxXQUFXLFlBQVg7O0VBRUo7SUFDSSxtQkFBbUIsY0FBbkI7SUFDQSxXQUFXLGNBQVg7OztBQUlSO0VBQ0ksZ0JBQUE7O0FBREosNEJBRUk7RUFDSSxzQkFBQTtFQUNBLHlCQUFBO0VBQ0EsbUJBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLHVCQUFBO0VBQ0EsZUFBQTs7QUFUUiw0QkFFSSx3QkFRSTtFQUNJLGVBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7O0FBRUksNEJBYlosd0JBUUksRUFJSyxxQkFDSTtFQUNHLGtCQUFBOztBQUdSLDRCQWpCUix3QkFRSSxFQVNLO0VBQ0csY0FBQTs7QUFwQmhCLDRCQXdCSTtFQUNJLGFBQUE7RUFDQSxzQkFBQTs7QUExQlIsNEJBd0JJLDRCQUdJO0VBQ0ksZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsY0FBQTs7QUFDQSw0QkFSUiw0QkFHSSxlQUtLLFVBQVU7RUFDUCx5QkFBQTs7QUFESiw0QkFSUiw0QkFHSSxlQUtLLFVBQVUsTUFFUDtFQUNJLHlCQUFBOztBQW5DcEIsNEJBd0JJLDRCQUdJLGVBV0k7RUFDSSxlQUFBO0VBQ0Esa0JBQUE7O0FBeENoQiw0QkF3QkksNEJBR0ksZUFXSSxvQkFHSTtFQUNJLFdBQUE7RUFDQSxZQUFBO0VBQ0EscUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBOztBQTlDcEIsNEJBd0JJLDRCQUdJLGVBV0ksb0JBVUk7RUFDSSxlQUFBOztBQWpEcEIsNEJBd0JJLDRCQUdJLGVBV0ksb0JBYUk7RUFDSSxXQUFBO0VBQ0EsWUFBWSx5Q0FBWjtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxRQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBOztBQUNBLDRCQXBDaEIsNEJBR0ksZUFXSSxvQkFhSSxNQVNLO0VBQ0csY0FBQTs7QUFHUiw0QkF4Q1osNEJBR0ksZUFXSSxvQkEwQkssTUFDRztFQUNJLGtCQUFBOztBQUVJLDRCQTVDeEIsNEJBR0ksZUFXSSxvQkEwQkssTUFDRyx1QkFFSSxzQkFDSztFQUNHLGVBQUE7O0FBckVoQyw0QkF3QkksNEJBR0ksZUFnREk7RUFDSSxlQUFBOztBQU1oQixrQkFDSSxrQkFDSTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBOztBQUtaO0VBQ0ksc0JBQUE7RUFDQSxnQkFBQTs7QUFGSixpQkFHSSxHQUFFO0VBQ0UsZUFBQTtFQUNBLFdBQUE7RUFDQSw2QkFBQTs7QUFOUixpQkFHSSxHQUFFLGFBS0U7RUFDSSxXQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBOztBQVhaLGlCQUdJLEdBQUUsYUFLRSxLQUlJO0VBQ0ksY0FBQTtFQUNBLDRCQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBOztBQUVKLGlCQWpCUixHQUFFLGFBS0UsS0FZSztFQUNHLFNBQVMsRUFBVDtFQUNBLDRCQUFBO0VBQ0Esa0JBQUE7RUFDQSxRQUFBO0VBQ0EsWUFBQTtFQUNBLFFBQUE7RUFDQSxpQkFBQTs7QUFFSixpQkExQlIsR0FBRSxhQUtFLEtBcUJLLE9BQ0c7O0VBRUksY0FBQTs7QUFFSixpQkEvQlosR0FBRSxhQUtFLEtBcUJLLE9BS0k7RUFDRyxzQkFBQTtFQUNBLG1CQUFtQixhQUFuQjtFQUNBLGdCQUFnQixhQUFoQjtFQUNBLGVBQWUsYUFBZjtFQUNBLGNBQWMsYUFBZDtFQUNBLHFCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxTQUFTLEVBQVQ7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTs7QUFJSixpQkFuRFosR0FBRSxhQUtFLEtBNkNLLFdBQ0k7RUFDRyxhQUFBOztBQXZEcEIsaUJBNkRJO0VBUUksU0FBQTs7QUFyRVIsaUJBNkRJLHlCQUNJO0VBQ0kseUJBQUE7RUFDQSxXQUFBO0VBQ0EsV0FBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7O0FBSVIsaUJBQUMsV0FDRyx5QkFBeUI7RUFDckIsa0JBQUE7O0FBRlIsaUJBQUMsV0FJRztFQUNJLGtCQUFBOztBQUNBLGlCQU5QLFdBSUcseUJBRUs7RUFDRyxTQUFTLGVBQVQ7RUFDQSxrQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLFFBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7RUFFQSxtRUFBQTtFQUNBLG1DQUFBO0VBQ0EsMkVBQUE7RUFDQSwyQ0FBQTtFQUNBLHdFQUFBO0VBQ0Esd0NBQUE7RUFDQSxzRUFBQTtFQUNBLHNDQUFBO0VBQ0EsdUVBQUE7RUFDQSx1Q0FBQTs7QUFJWixpQkFBQyxJQUFJLGFBQ0QseUJBQXlCO0VBQ3JCLGFBQUE7O0FBQ0EsaUJBSFAsSUFBSSxhQUNELHlCQUF5QixLQUVwQjtFQUNHLGNBQUE7O0FBS1IsaUJBREosS0FDSztFQUNHLFdBQUE7RUFDQSxTQUFTLEVBQVQ7RUFDQSxjQUFBOzs7QUFPWixjQUFlLHFCQUNYO0VBQ0ksa0JBQUE7O0FBRlIsY0FBZSxxQkFJWCxZQUNJLE1BQUs7RUFDRCxXQUFBOztBQU5aLGNBQWUscUJBU1g7RUFDSSxVQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7O0FBSVI7RUFDSSxrQkFBQTs7QUFHSixvQkFBb0I7RUFDaEIsMEJBQUE7O0FBR0o7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBEZWZpbmUgYWxsIHN0eWxlcyBmb3IgYWRtaW4gc2lkZVxyXG4gKlxyXG4gKiBAYXV0aG9yIFRoaW1QcmVzc1xyXG4gKiBAdmVyc2lvbiAxLjBcclxuICovXHJcbi8vIGFkbWluIHZhcmlhYmxlc1xyXG5AcHJpbWFyeS1pY29uLWNvbG9yOiAjNjY2NjY2O1xyXG5AcHJpbWFyeS1pY29uLWhvdmVyLWNvbG9yOiAjMDBhMGQyO1xyXG5cclxuaW5wdXQ6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbmlucHV0OmZvY3VzOjotbW96LXBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG5pbnB1dDpmb2N1czotbW96LXBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ucndtYi1maWVsZCB7XHJcbiAgICBtYXJnaW46IDIwcHggMCAyMHB4IDA7XHJcbiAgICAucndtYi1pbnB1dCB7XHJcbiAgICAgICAgLnJ3bWItbGFiZWwge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAuZGVzY3JpcHRpb24ge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgICAgICYub3B0aW9uLWRlc2Mge1xyXG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogOHB4IDAgMTBweCAyNHB4O1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubHAtbmF2LXRhYi13cmFwcGVyIHtcclxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogOXB4IDE1cHggMCAwO1xyXG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1xdWljay1hZGQtcGFnZS1pbmxpbmUge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtcXVpY2stYWRkLXBhZ2UtaW5saW5lID4gKiB7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRtaW4tc2V0dGluZ3Mge1xyXG4gICAgI2xlYXJuX3ByZXNzX2VtYWlsX2Zvcm1hdHMge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICB9XHJcbiAgICAubGVhcm4tcHJlc3MtZW1haWwtdmFyaWFibGVzIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgbGkge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwODViYTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5uYXYtdGFiLXdyYXBwZXIge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICB9XHJcbiAgICAuc3Vic3Vic3ViIHtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICB3aWR0aDogMjQwcHg7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICAgIG1hcmdpbjogMCAtMjYwcHggMCAyMHB4O1xyXG4gICAgICAgIHBhZGRpbmctdG9wOiAxMXB4O1xyXG4gICAgICAgIGxpIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGEge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5sZWFybi1wcmVzcy1zZXR0aW5ncy13cmFwIHtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICBwYWRkaW5nOiAxcHggMCAxNXB4IDMwMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgei1pbmRleDogMDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19hdXRvX3JlZGlyZWN0X21lc3NhZ2VcIl0ge1xyXG4gICAgICAgICAgICB3aWR0aDogODAlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMzBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYucmVhZHkge1xyXG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbGVhcm4tcHJlc3MtcmVzZXQtc2V0dGluZ3Mge1xyXG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJi5uby1zdWJ0YWJzIHtcclxuICAgICAgICAubGVhcm4tcHJlc3Mtc2V0dGluZ3Mtd3JhcCB7XHJcbiAgICAgICAgICAgIGZsb2F0OiBub25lO1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xyXG5cclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAuc3Vic3Vic3ViIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xyXG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG4gICAgbGFiZWwge1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgfVxyXG4gICAgLyppbnB1dFtuYW1lPVwibGVhcm5fcHJlc3Nfc2luZ2xlX2NvdXJzZV9pbWFnZV9zaXplW3dpZHRoXVwiXSxcclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19zaW5nbGVfY291cnNlX2ltYWdlX3NpemVbaGVpZ2h0XVwiXSxcclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19jb3Vyc2VfdGh1bWJuYWlsX2ltYWdlX3NpemVbd2lkdGhdXCJdLFxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX2NvdXJzZV90aHVtYm5haWxfaW1hZ2Vfc2l6ZVtoZWlnaHRdXCJdIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAtNHB4O1xyXG4gICAgfVxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX3NpbmdsZV9jb3Vyc2VfaW1hZ2Vfc2l6ZVtjcm9wXVwiXSxcclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19jb3Vyc2VfdGh1bWJuYWlsX2ltYWdlX3NpemVbY3JvcF1cIl0ge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDNweDtcclxuICAgIH0qL1xyXG5cclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19jb3Vyc2VfYmFzZVwiXSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogM3B4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xyXG4gICAgfVxyXG4gICAgLmxwLWdyb3VwLXRpdGxlIHtcclxuICAgICAgICBwYWRkaW5nOiAwIDAgMTBweDtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgIzU2M2Q3YztcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgaW5wdXRbdHlwZT1cInRleHRcIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwiZW1haWxcIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdLFxyXG4gICAgaW5wdXRbdHlwZT1cInRlbFwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcclxuICAgIHNlbGVjdCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIH1cclxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIC5scC1zZXR0aW5nLWZpZWxkIHtcclxuICAgICAgICBzcGFuIHtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5scC1zaWduLXRpbWVzIHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxOXB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJucHJlc3NfcGFnZV9sZWFybi1wcmVzcy1zZXR0aW5ncyB7XHJcbiAgICAuc2VsZWN0Mi1yZXN1bHQge1xyXG4gICAgICAgIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyMzI4MmQ7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgbGVmdDogOHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI0ZGRjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAmLmxldmVsLTEge1xyXG4gICAgICAgICAgICAuc2VsZWN0Mi1yZXN1bHQtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAzNXB4O1xyXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYubGV2ZWwtMiB7XHJcbiAgICAgICAgICAgIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7XHJcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMzVweDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAmLmxldmVsLTMge1xyXG4gICAgICAgICAgICAuc2VsZWN0Mi1yZXN1bHQtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA4NXB4O1xyXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDYwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qIG1lc3NhZ2UgYm94ICovXHJcbiNsZWFybi1wcmVzcy1tZXNzYWdlLWJveC1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gICAgei1pbmRleDogOTk5OTk7XHJcbiAgICBvcGFjaXR5OiAwLjg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1tZXNzYWdlLWJveC13aW5kb3cge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgei1pbmRleDogMTAwMDAwO1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbiNtZXNzYWdlLWJveC13cmFwIHtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgLyogdGV4dC1hbGlnbjogY2VudGVyOyAqL1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIG1heC13aWR0aDogNzAlO1xyXG59XHJcblxyXG4ubWVzc2FnZS1ib3gtdGl0bGUge1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICBtYXJnaW46IDAgMCA0MHB4IDA7XHJcbiAgICBmb250LXNpemU6IDM0cHg7XHJcbn1cclxuXHJcbi5tZXNzYWdlLWJveC1jb250ZW50IHtcclxuICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XHJcbn1cclxuXHJcbi5tZXNzYWdlLWJveC1hbmltYXRpb24ge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vLi4vaW1hZ2VzL2FuaW1hdGlvbi5naWZcIik7XHJcbiAgICB3aWR0aDogMjIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICBtYXJnaW46IDIwcHggMCAwO1xyXG59XHJcblxyXG4ubWVzc2FnZS1ib3gtYnV0dG9ucyB7XHJcbiAgICBtYXJnaW46IDIwcHggMCAwO1xyXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5MjkyOTI7XHJcbiAgICBwYWRkaW5nLXRvcDogMjBweDtcclxufVxyXG5cclxuLm1lc3NhZ2UtYm94LWJ1dHRvbiB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHggIWltcG9ydGFudDtcclxufVxyXG5cclxuLnBvc3QtdHlwZS1scF9sZXNzb24gLmNvbHVtbi1mb3JtYXQgLmxwLWxhYmVsIHtcclxuICAgIGZvbnQtc2l6ZTogMTAwJTtcclxufVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLmhpZGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmhhbmRsZS5kYXNoaWNvbnMge1xyXG4gICAgY3Vyc29yOiBtb3ZlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG59XHJcblxyXG4ubWV0YV9ib3hfcmVtb3ZlIC5kYXNoaWNvbnMge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpbml0aWFsO1xyXG59XHJcblxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIGlucHV0LFxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIHNlbGVjdCB7XHJcbiAgICBtaW4td2lkdGg6IDI1MHB4O1xyXG59XHJcblxyXG4uZGFzaGVkLXBsYWNlaG9sZGVyIHtcclxuICAgIGJvcmRlcjogMnB4IGRhc2hlZCAjOTk5O1xyXG4gICAgcGFkZGluZzogMTBweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLW1lc3NhZ2Uge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAwQTBEMjtcclxuICAgIHBhZGRpbmc6IDEwcHggMTBweCAwcHggMTBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgY29sb3I6ICM3Nzc7XHJcbiAgICBidXR0b24ge1xyXG4gICAgICAgIGZsb2F0OiByaWdodDtcclxuICAgIH1cclxuICAgIHAge1xyXG4gICAgICAgIG1hcmdpbjogMCAwIDEwcHg7XHJcbiAgICB9XHJcbiAgICAmOmFmdGVyIHtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuICAgICYubm90aWNlIHtcclxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2IzZDIwYTtcclxuICAgIH1cclxuICAgICYubHAtZXJyb3IsXHJcbiAgICAmLmVycm9yIHtcclxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2I4MWMyMztcclxuICAgIH1cclxuICAgIHVsIHtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAubGVhcm4tcHJlc3MtYWRtaW4tbm90aWNlLWRpc21pc3Mge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAxcHggMXB4ICNGMUYxRjE7XHJcbiAgICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgcmlnaHQ6IDEwcHg7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYzMzUnO1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiogQ291cnNlIE1ldGFib3hcclxuKi9cclxubGkucXVpeiwgbGkubGVzc29uLCBsaS5xdWlja19sZXNzb24sIGxpLnF1aWNrX3F1aXoge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDMwcHg7XHJcbn1cclxuXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfc2VjdGlvbixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X2FkZF9sZXNzb24sXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfcXVpeixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X3F1aWNrX2FkZF9sZXNzb24sXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9xdWlja19hZGRfcXVpeiB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XHJcbn1cclxuXHJcbi5jb2x1bW4tdGF4b25vbXktY291cnNlX2NhdGVnb3J5IHtcclxuICAgIHdpZHRoOiAxNSU7XHJcbn1cclxuXHJcbi50b29scy1idXR0b24ge1xyXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbn1cclxuXHJcbi8qXHJcbiNscHItYmxvY2sge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB6LWluZGV4OiAyMDA7XHJcbiAgICBvcGFjaXR5OiAwLjI7XHJcbn1cclxuXHJcbi5scHItcXVpY2stYWRkLWZvcm0ge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIHBhZGRpbmc6IDVweDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDIxMDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbn1cclxuXHJcbi5scHItcXVpY2stYWRkLWZvcm0gaW5wdXQge1xyXG4gICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHdpZHRoOiAzNTBweDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybSBpbnB1dCxcclxuLmxwci1xdWljay1hZGQtZm9ybSBzZWxlY3Qge1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybSAubHByLWFqYXhsb2FkIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3NwaW5uZXIuZ2lmKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgd2lkdGg6IDMwcHg7XHJcbiAgICBjb2xvcjogI0ZGRjtcclxuICAgIG1hcmdpbi10b3A6IDZweDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybS53b3JraW5nIC5scHItYWpheGxvYWQge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1mb3JtLndvcmtpbmcgYnV0dG9uIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5wb3N0LXR5cGUtbHByX3F1ZXN0aW9uIC5scHItcXVlc3Rpb24tb3B0aW9uLWxhYmVsIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbiNscHItcXVlc3Rpb24tb3B0aW9ucy13cmFwIHtcclxuICAgIG1hcmdpbi10b3A6IDhweDtcclxufVxyXG5cclxuLmxwci1xdWVzdGlvbiB0ci5scHItZGlzYWJsZWQgLmRhc2hpY29ucy10cmFzaCxcclxuLmxwci1xdWVzdGlvbiB0ci5scHItZGlzYWJsZWQgLmRhc2hpY29ucy1zb3J0IHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn0qL1xyXG5cclxuLypcclxuKiBBZGQgb24gcGFnZVxyXG4qL1xyXG4ubGVhcm5wcmVzcy1hZHZlcnRpcy1hZG1pbiB7XHJcblxyXG4gICAgbWFyZ2luLWxlZnQ6IDE2MHB4O1xyXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgICA+IC5pdGVtIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gICAgPiAuaXRlbTpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgLmxlYXJucHJlc3Mtd3JhcC1pdGVtcyB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDFzLCBvcGFjaXR5IDFzO1xyXG4gICAgICAgIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMXMsIG9wYWNpdHkgMXM7XHJcbiAgICAgICAgcGFkZGluZzogMjBweDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcclxuICAgIH1cclxuICAgIC50aGVtZS10aHVtYm5haWwge1xyXG4gICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgIHdpZHRoOiAzNSU7XHJcbiAgICB9XHJcbiAgICAudGhlbWUtZGV0YWlsIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMzUlO1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcclxuICAgIH1cclxuICAgIC5sZWFybnByZXNzLWl0ZW0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMDAlO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuNXMgbGluZWFyLCBvcGFjaXR5IDAuNXMgbGluZWFyO1xyXG4gICAgICAgIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMC41cyBsaW5lYXIsIG9wYWNpdHkgMC41cyBsaW5lYXI7XHJcblxyXG4gICAgfVxyXG4gICAgaW1nIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAubGVhcm5wcmVzcy1hY3RpdmUge1xyXG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuXHJcbiAgICAubGVhcm5wcmVzcy1jb250cm9scyB7XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIGJvdHRvbTogMzBweDtcclxuICAgICAgICByaWdodDogMDtcclxuICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcblxyXG4gICAgICAgIC5wcmV2LWl0ZW0sXHJcbiAgICAgICAgLm5leHQtaXRlbSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICBmb250LWZhbWlseTogJ2Rhc2hpY29ucyc7XHJcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDAwO1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5wcmV2LWl0ZW0ge1xyXG4gICAgICAgICAgICByaWdodDogOTVweDtcclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYzNDFcIjtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5uZXh0LWl0ZW0ge1xyXG4gICAgICAgICAgICByaWdodDogNDVweDtcclxuXHJcbiAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzQ1XCI7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTIwMHB4KSB7XHJcbiAgICAgICAgLnRoZW1lLXRodW1ibmFpbCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGhlbWUtZGV0YWlsIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDUwJTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5NjBweCkge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzNnB4O1xyXG5cclxuICAgICAgICAudGhlbWUtdGh1bWJuYWlsIHtcclxuICAgICAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRoZW1lLWRldGFpbCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24taW5mbyB7XHJcbiAgICB3aWR0aDogNjUlO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24tYWN0aW9uIGEge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIGhlaWdodDogODBweDtcclxuICAgIHdpZHRoOiAxMDBweDtcclxuICAgIGJhY2tncm91bmQ6ICNFQkVCRUI7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwMHB4O1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiAuYWRkLW9uLWVuYWJsZWQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4O1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiAuYWRkLW9uLWRpc2FibGVkIHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogNDBweDtcclxufVxyXG5cclxuLmxwci1hZGQtb25zLXdyYXBwZXIgLmFkZC1vbi1hY3Rpb24gYTpob3ZlciB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtdGV4dC1kaXNhYmxlKTtcclxufVxyXG5cclxuLmxwLXNlYXJjaC1hZGRvbiB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICB3aWR0aDogMjgwcHg7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBmb250LXdlaWdodDogMzAwO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcclxuICAgIHBhZGRpbmc6IDNweCA1cHg7XHJcbiAgICBoZWlnaHQ6IDMycHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIHtcclxuICAgIG1hcmdpbjogMjBweCAwIDA7XHJcblxyXG4gICAgLmxwLWFkZG9uLWhpZGRlbiB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG4gICAgLmxwLWFjdGl2ZTpudGgtb2YtdHlwZSgybisxKSB7XHJcbiAgICAgICAgY2xlYXI6IG5vbmU7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XHJcbiAgICB9XHJcbiAgICAubHAtYWN0aXZlOm50aC1vZi10eXBlKDJuKSB7XHJcbiAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgJi5sZWFybnByZXNzLXByZW1pdW0tcGx1Z2luIHtcclxuXHJcbiAgICAgICAgLmNvbHVtbi1kZXNjcmlwdGlvbiB7XHJcblxyXG4gICAgICAgICAgICBwIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgICAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcclxuICAgICAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiA0O1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDYuNGVtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnM6YWZ0ZXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgIC8qZmxvYXQ6IGxlZnQ7Ki9cclxuICAgIC8qd2lkdGg6IDI1JTsqL1xyXG4gICAgLypwb3NpdGlvbjogcmVsYXRpdmU7Ki9cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWlubmVyIHtcclxuICAgIG1hcmdpbjogMCAyMHB4IDQwcHggMjBweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFM0UzRTM7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmFkZC1vbi10aHVtYm5haWwgaW1nIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCAuYWRkLW9uLW92ZXJsYXkge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4yNXM7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQURFNkZGO1xyXG4gICAgb3BhY2l0eTogMDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCAuYWRkLW9uLWRlc2NyaXB0aW9uIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGxlZnQ6IDIwcHg7XHJcbiAgICByaWdodDogMjBweDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMjVzO1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcbiAgICBvcGFjaXR5OiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpOmhvdmVyIC5hZGQtb24tb3ZlcmxheSB7XHJcbiAgICBvcGFjaXR5OiAwLjM7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGk6aG92ZXIgLmFkZC1vbi1kZXNjcmlwdGlvbiB7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24taW5mbyB7XHJcbiAgICBtaW4taGVpZ2h0OiA4MHB4O1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0ZGRjtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWluZm8gPiBoMyB7XHJcbiAgICBtYXJnaW4tdG9wOiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24tYWN0aW9ucyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBib3R0b206IDQzcHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmFkZC1vbi1hY3Rpb25zIC5hZGQtb24tc3RhdGUge1xyXG4gICAgZm9udC1zaXplOiAzNnB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICBtYXJnaW4tdG9wOiAtOHB4O1xyXG4gICAgY29sb3I6ICMwNUIzRkY7XHJcbiAgICBtYXJnaW4tbGVmdDogLTlweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWFjdGlvbnMgLmFkZC1vbi1zdGF0ZS5jaGFuZ2Uge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQtdG9wIHtcclxuICAgIG1pbi1oZWlnaHQ6IDE4MHB4O1xyXG59XHJcblxyXG4ucHJlbWl1bV9hZGRfb25zLmFjdGl2ZSAuY29sdW1uLWRlc2NyaXB0aW9uIHAge1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XHJcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xyXG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiA1O1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgbWF4LWhlaWdodDogOGVtO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYnV0dG9uLnNwaW5uZXIge1xyXG4gICAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9zcGlubmVyLmdpZikgbm8tcmVwZWF0IDRweCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICAgIHdpZHRoOiBhdXRvO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzID4gc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzID4gc3Bhbi5lbmFibGVkIHtcclxuICAgIGNvbG9yOiAjN2FkMDNhO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzID4gc3Bhbi5kaXNhYmxlZCB7XHJcbiAgICBjb2xvcjogI0ZGMDAwMDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLmFjdGlvbi1saW5rcyAucHJpY2Uge1xyXG4gICAgY29sb3I6ICM0MzlmZGY7XHJcbiAgICBmb250LXdlaWdodDogNzAwO1xyXG4gICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzIC5wcmljZSBkZWwge1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGNvbG9yOiAjYWFhO1xyXG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWljb24gaW1nIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLWJ1bmRsZS1hY3RpdmF0ZS1hZGQtb25zLnNwaW5uZXIge1xyXG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi12ZXJzaW9uIHtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwICNuYW1lIHtcclxuICAgIHdpZHRoOiAzMCU7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIHA6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwIC50aGVtZSB7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLWFkZC1vbnMtd3JhcCAudGhlbWUtY29udHJvbHMge1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgLnRoZW1lIGgyIHtcclxuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgLnRoZW1lIGltZyB7XHJcbiAgICB3aWR0aDogNDAwcHg7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICBtYXJnaW46IDAgMjBweCAwIDA7XHJcbn1cclxuXHJcbi5yZWxhdGVkX3RoZW1lcyB7XHJcbiAgICAucGx1Z2luLWNhcmQtdG9wIHtcclxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcclxuICAgIH1cclxuICAgIC50aGVtZS1jb250ZW50IHtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB9XHJcbiAgICAuaW1hZ2UtdGh1bWJuYWlsIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcbiAgICAudGhlbWUtZGVzY3JpcHRpb24ge1xyXG4gICAgICAgIG1hcmdpbjogMCAwIDI1cHggMDtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xyXG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XHJcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiA2O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgICAgICBtYXgtaGVpZ2h0OiA5LjZlbTtcclxuXHJcbiAgICB9XHJcbiAgICAudGhlbWUtdGl0bGUge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTAwcHg7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgbWluLWhlaWdodDogMy4yZW07XHJcbiAgICB9XHJcbiAgICAudGhlbWUtdGl0bGUgYSB7XHJcblxyXG4gICAgICAgIGNvbG9yOiAjNTQ1NDU0O1xyXG4gICAgfVxyXG4gICAgLnRoZW1lLXJhdGluZyB7XHJcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICAgIC5zdGFyLXJhdGluZyB7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gICAgLmNvdW50LXJhdGluZyB7XHJcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB0b3A6IDJweDtcclxuICAgIH1cclxuICAgIC50aGVtZS1kZXRhaWwge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICByaWdodDogM3B4O1xyXG4gICAgICAgIHRvcDogMDtcclxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRoZW1lLXByaWNlIHtcclxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNTQ1NDU0O1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAudGhlbWUtZm9vdGVyIHtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogLTIwcHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMjBweDtcclxuICAgICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XHJcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIH1cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDEyODBweCkge1xyXG4gICAgLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSB7XHJcbiAgICAgICAgLyp3aWR0aDogMzMuMzMlOyovXHJcbiAgICB9XHJcbn1cclxuXHJcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyAuZW5hYmxlLW5vdyB7XHJcbiAgICAgICAgcGFkZGluZzogNXB4O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyAuZW5hYmxlLW5vdzpiZWZvcmUge1xyXG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zIC5lbmFibGUtbm93OmJlZm9yZSB7XHJcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgI2xlYXJuLXByZXNzLWFkZC1vbnMtd3JhcCAudGhlbWUgaW1nIHtcclxuICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgICAgICAvKndpZHRoOiA1MCU7Ki9cclxuICAgIH1cclxuXHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5jb2x1bW4tbmFtZSB7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNTBweDtcclxuICAgIH1cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuXHJcbiAgICAjbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwIC50aGVtZSBpbWcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqL1xyXG5cclxuI2xwci1xdWl6LXF1ZXN0aW9ucy13cmFwIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2Uge1xyXG4gICAgaGVpZ2h0OiAyOXB4O1xyXG4gICAgcGFkZGluZy10b3A6IDNweDtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxufVxyXG5cclxuLnBvc3QtdGl0bGUuY29sdW1uLXRpdGxlIHtcclxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb25zIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmxwci1yb3ctYWN0aW9uLWRyb3Bkb3duIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMTAwJTtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwci1yb3ctYWN0aW9uLWRyb3Bkb3duID4gbGkge1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb24tZHJvcGRvd24gPiBsaSA+IGEge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nOiA1cHg7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbnMgPiBhIHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbnMgPiBhOmFmdGVyIHtcclxuICAgIHdpZHRoOiAwO1xyXG4gICAgaGVpZ2h0OiAwO1xyXG4gICAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjREREO1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICByaWdodDogMDtcclxuICAgIHRvcDogNnB4O1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb25zOmhvdmVyID4gdWwge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuXHJcbi8qIGFkZG9ucyBwYWdlICovXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIHtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24tYmxvY2sge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjREREO1xyXG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XHJcbiAgICB3aWR0aDogNTAlO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1ibG9jazphZnRlciB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgY2xlYXI6IGJvdGg7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRtaW4tdGh1bWJuYWlsIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2lkdGg6IDIwMHB4O1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkbWluLXRodW1ibmFpbCBpbWcge1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24taW5mbyB7XHJcbiAgICBtYXJnaW4tbGVmdDogMjIwcHg7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRkLW9uLWluZm8gPiBoMyB7XHJcbiAgICBtYXJnaW4tdG9wOiAwO1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1pbmZvID4gaDMgPiBzcGFuIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHBhZGRpbmc6IDAgNXB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzdBRDNGQTtcclxuICAgIGNvbG9yOiAjRkZGO1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbiAgICBmb250LXNpemU6IDEycHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24tYWN0aW9uIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxuICAgIHdpZHRoOiAxMDBweDtcclxufVxyXG5cclxuLyogdG9nZ2xlICovXHJcbmlucHV0Lmxwci1mYW5jeS1jaGVja2JveCB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZyB7XHJcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xyXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDRweCByZ2JhKDAsIDAsIDAsIC42KTtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgaGVpZ2h0OiAxOXB4O1xyXG4gICAgd2lkdGg6IDUwcHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBmb250OiAxMXB4LzE4cHggYXJpYWw7XHJcbiAgICBiYWNrZ3JvdW5kOiAjY2NjO1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2U7XHJcbiAgICAtbW96LXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZzphZnRlciB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCByZ2JhKDAsIDAsIDAsIC42KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGhlaWdodDogMTVweDtcclxuICAgIHdpZHRoOiAxNXB4O1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMnB4O1xyXG4gICAgbGVmdDogMnB4O1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2U7XHJcbiAgICAtbW96LXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2c6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdPRkYnO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgcmlnaHQ6IDdweDtcclxuICAgIHRvcDogMXB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi5scHItZmFuY3ktY2hlY2tib3gudG9nOmhvdmVyOmFmdGVyIHtcclxuICAgIGxlZnQ6IDVweDtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub246YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdPTic7XHJcbiAgICByaWdodDogMjhweDtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub24ge1xyXG4gICAgYmFja2dyb3VuZDogIzA1QjNGRjtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub246YWZ0ZXIge1xyXG4gICAgbGVmdDogMzNweDtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub246aG92ZXI6YWZ0ZXIge1xyXG4gICAgbGVmdDogMzBweDtcclxufVxyXG5cclxuLyoqL1xyXG4uY2xlYXJmaXg6YWZ0ZXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGNsZWFyOiBib3RoO1xyXG59XHJcblxyXG4uY2xlYXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIGhlaWdodDogMDtcclxufVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyB7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24ge1xyXG5cclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLmxwLWxpc3Qtb3B0aW9uLWVtcHR5IHRkLFxyXG4ubHAtbGlzdC1vcHRpb24ubHAtbGlzdC1vcHRpb24tZW1wdHkgdGgge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZCRTlFOTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLmxwLWxpc3Qtb3B0aW9uLWVtcHR5IC5scC1hbnN3ZXItY2hlY2sgaW5wdXQsXHJcbi5scC1saXN0LW9wdGlvbi5scC1saXN0LW9wdGlvbi1lbXB0eSAubHAtbGlzdC1vcHRpb24tYWN0aW9ucyBpIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAuY2xtIHtcclxuXHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtaXRlbS1jaGVja2JveCB7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtaXRlbS1uYW1lIHtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1pdGVtLWFjdGlvbnMge1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIHRoZWFkIHRoIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUFFQUVBO1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcblxyXG4gICAgY29sb3I6ICMwMEEwRDI7XHJcblxyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIHRib2R5IHRoLFxyXG4ubHAtbGlzdC1vcHRpb25zIHRib2R5IHRkIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7XHJcbiAgICBwYWRkaW5nOiAxMHB4IDEwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyAubHAtYW5zd2VyLWNoZWNrIHtcclxuICAgIHdpZHRoOiAxMDBweDtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyB0Ym9keSB0aCBpbnB1dFt0eXBlPVwidGV4dFwiXSxcclxuLmxwLWxpc3Qtb3B0aW9ucyB0Ym9keSB0ZCBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB0ZCB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi9pbWFnZXMvc3RyaXBlLnBuZ1wiKTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1hbnN3ZXItdGV4dCB7XHJcbiAgICBjb2xvcjogIzc3NztcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtYW5zd2VyLXRleHQ6YWZ0ZXIge1xyXG4gICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcclxuICAgIGNvbnRlbnQ6ICdcXGY0NjQnO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24gLmxwLWFuc3dlci10ZXh0OmZvY3VzLFxyXG4ubHAtbGlzdC1vcHRpb246aG92ZXIgLmxwLWFuc3dlci10ZXh0IHtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb246aG92ZXIgLmxwLWFuc3dlci10ZXh0IHtcclxuICAgIGJvcmRlci1zdHlsZTogZGFzaGVkO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24tYWN0aW9ucyB7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBjb2xvcjogIzAwQTBEMjtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLWFjdGlvbnMubHAtbW92ZS1saXN0LW9wdGlvbiB7XHJcbiAgICBjdXJzb3I6IG1vdmU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbi1hY3Rpb25zOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMTU2MDc3O1xyXG59XHJcblxyXG4vKiBRdWVzdGlvbiBtZXRhIGJveCAqL1xyXG4jcXVlc3Rpb25fYW5zd2VyIC5yd21iLXF1ZXN0aW9uLXdyYXBwZXIge1xyXG4gICAgbWFyZ2luOiAxMnB4IDAgMCAwO1xyXG59XHJcblxyXG4ucXVlc3Rpb24tYm90dG9tLWFjdGlvbnMgPiAqIHtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4vKiBRdWl6IG1ldGEgYm94ICovXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1aXogI3F1ZXN0aW9ucyxcclxuYm9keS5wb3N0LXR5cGUtbHBfcXVlc3Rpb24gI3F1ZXN0aW9uX2Fuc3dlcl8ge1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWl6ICNxdWVzdGlvbnMgLmhhbmRsZWRpdixcclxuYm9keS5wb3N0LXR5cGUtbHBfcXVlc3Rpb24gI3F1ZXN0aW9uX2Fuc3dlcl8gLmhhbmRsZWRpdiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWl6ICNxdWVzdGlvbnMgLmhuZGxlLFxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWVzdGlvbiAjcXVlc3Rpb25fYW5zd2VyXyAuaG5kbGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuYm9keS5wb3N0LXR5cGUtbHBfcXVpeiAjcXVlc3Rpb25zIC5pbnNpZGUsXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1ZXN0aW9uICNxdWVzdGlvbl9hbnN3ZXJfIC5pbnNpZGUge1xyXG4gICAgcGFkZGluZzogMDtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbnMtaGVhZGluZyAucXVlc3Rpb25zLXRvZ2dsZSB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbnMtaGVhZGluZyAucXVlc3Rpb25zLXRvZ2dsZSBhOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMDBhMGQyO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMgPiB1bCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDEwMCU7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFRUU7XHJcbiAgICBib3JkZXItdG9wOiBub25lO1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIHotaW5kZXg6IDUwO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMgPiB1bCA+IGxpIHtcclxuICAgIG1hcmdpbjogMDtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtZHJvcGRvd24tcXVlc3Rpb25zID4gdWwgbGkgPiBhIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgcGFkZGluZzogNXB4O1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLXF1ZXN0aW9uLW5hbWUge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgbWluLXdpZHRoOiAzNTBweDtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBib3JkZXItY29sb3I6ICNFRUU7XHJcbiAgICBjb2xvcjogI0JCQjtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLXRvZ2dsZS1xdWVzdGlvbnMge1xyXG4gICAgaGVpZ2h0OiAzMnB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjRUVFO1xyXG4gICAgd2lkdGg6IDMycHg7XHJcbiAgICBtYXJnaW4tbGVmdDogLTRweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMzBweDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBjb2xvcjogI0NDQztcclxuICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtdG9nZ2xlLXF1ZXN0aW9uczpob3ZlciB7XHJcbiAgICBjb2xvcjogI0FBQUFBQTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtYnV0dG9uLWFkZC1xdWVzdGlvbiB7XHJcbiAgICBfdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyBpbnB1dFtuYW1lPVwibHAtbmV3LXF1ZXN0aW9uLW5hbWVcIl0ge1xyXG5cclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogOTk5O1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWhlYWQgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICBtYXJnaW46IDFweCAwO1xyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgcGFkZGluZy10b3A6IDJweDtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi1oZWFkIC5xdWl6LXF1ZXN0aW9uLWFjdGlvbnMgYSB7XHJcbiAgICBtYXJnaW46IDAgM3B4O1xyXG4gICAgY29sb3I6IEBwcmltYXJ5LWljb24tY29sb3I7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi1oZWFkIC5xdWl6LXF1ZXN0aW9uLWFjdGlvbnMgYTpob3ZlciB7XHJcbiAgICBjb2xvcjogIzAwYTBkMjtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi1oZWFkOmhvdmVyIC5xdWl6LXF1ZXN0aW9uLWFjdGlvbnMge1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi9pbWFnZXMvc3RyaXBlLnBuZ1wiKTtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWVzdGlvbi1uYW1lIHtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICB3aWR0aDogNzAlO1xyXG4gICAgY29sb3I6ICM3Nzc7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWljb24gaW1nIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogYXV0bztcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtZHJvcGRvd24tcXVlc3Rpb25zIC5hZGRlZCB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHByLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIHtcclxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmxwci1jdXJyaWN1bHVtLXNlY3Rpb24gPiBoMyAubHByLWFjdGlvbiB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICByaWdodDogMDtcclxufVxyXG5cclxuLmxwci1jdXJyaWN1bHVtLXNlY3Rpb24ubHByLWVtcHR5ID4gaDMge1xyXG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5scHItY3VycmljdWx1bS1zZWN0aW9uLmxwci1lbXB0eSAubHByLWFjdGlvbiB7XHJcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5scHItY291cnNlLWN1cnJpY3VsdW0gYnV0dG9uIHNwYW4ge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1zdGF0aXN0aWMge1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWNoYXJ0IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWNoYXJ0IGNhbnZhcyB7XHJcbiAgICBoZWlnaHQ6IDcwdmg7XHJcbiAgICB3aWR0aDogMTAwdnc7XHJcbn1cclxuXHJcbi5jaGFydC1idXR0b25zIGZvcm0ge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmNoYXJ0LWJ1dHRvbnMgZm9ybSBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XHJcbiAgICB3aWR0aDogMTA1cHg7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiA0cHg7XHJcbn1cclxuXHJcbi5jaGFydC1idXR0b25zIGZvcm0gc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiA1cHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1jaGFydC5sb2FkaW5nOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgei1pbmRleDogMTA7XHJcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xyXG4gICAgb3BhY2l0eTogMC41O1xyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24ge1xyXG5cclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIG1hcmdpbi1yaWdodDogMTVweDtcclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIG1hcmdpbi1yaWdodDogNXB4O1xyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24gbGkgc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi5jaGFydC1kZXNjcmlwdGlvbiBsaS5hbGw6YmVmb3JlIHtcclxuICAgIGJhY2tncm91bmQ6ICMyRkE3RkY7XHJcbn1cclxuXHJcbi5jaGFydC1kZXNjcmlwdGlvbiBsaS5pbnN0cnVjdG9yczpiZWZvcmUge1xyXG4gICAgYmFja2dyb3VuZDogI0VBQzc5QjtcclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpLnN0dWRlbnRzOmJlZm9yZSB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjRDREMENCO1xyXG59XHJcblxyXG4ubHByLXN0YXRzLXRpbWUge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4ubHByLWhpZGRlbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4jbHByLWN1c3RvbS10aW1lIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRvcDogNHB4O1xyXG59XHJcblxyXG4vKiBibG9jayBwYWdlICovXHJcbiNscHItcGFnZS1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gICAgb3BhY2l0eTogMC41O1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIHotaW5kZXg6IDk5OTk7XHJcbn1cclxuXHJcbiNmb3JtLXF1aWNrLWFkZC1sZXNzb24tbGluayB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbn1cclxuXHJcbiNfbHByX2NvdXJzZV9wcmljZV9kZXNjcmlwdGlvbiA+IHNwYW4ge1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBmb250LXNpemU6IDE1cHg7XHJcbn1cclxuXHJcbi5scHItaWdub3JlLCAubHByLWlnbm9yZTpob3ZlciB7XHJcbiAgICBjb2xvcjogI2RkM2QzNjtcclxufVxyXG5cclxuLmxwci1pZ25vcmU6aG92ZXIge1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1wYWdlLWlubGluZSxcclxuLmxwci1xdWljay1hY3Rpb25zLWlubGluZSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbiNscHItdG9nZ2xlLXF1aXotbW9kZSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N0ZGO1xyXG4gICAgcGFkZGluZzogM3B4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGNvbG9yOiAjRkZGO1xyXG59XHJcblxyXG4uY29sdW1uLW51bV9vZl9xdWVzdGlvbiB7XHJcbiAgICB3aWR0aDogMTUwcHg7XHJcbn1cclxuXHJcbi5scC1zZWFyY2gtaXRlbXMgaW5wdXRbbmFtZT1cImxwLWl0ZW0tbmFtZVwiXSB7XHJcbiAgICB3aWR0aDogNTAwcHg7XHJcbn1cclxuXHJcbi5scC1idXR0b24tZHJvcGRvd24ge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyOHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiA5OTk5ODtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24tbGFiZWwge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1hcnJvdyB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAvKiB3aWR0aDogMjBweDsgKi9cclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIHBhZGRpbmc6IDAgMTBweDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTFweDtcclxuICAgIGJvdHRvbTogLTFweDtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24taXRlbXMge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgLyogd2lkdGg6IDEwMCU7ICovXHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgbWFyZ2luLXRvcDogMXB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHJpZ2h0OiAtMXB4O1xyXG4gICAgLyogcmlnaHQ6IC0xcHg7ICovXHJcbiAgICB3aWR0aDogMjAwcHg7XHJcbiAgICB6LWluZGV4OiA5OTk5OTk5O1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24taXRlbXMgbGkge1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1pdGVtcyBsaSBhIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbi5scC1idXR0b24tZHJvcGRvd24gLmxwLWRyb3Bkb3duLWl0ZW1zIGxpIGE6aG92ZXIge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93bjpub3QoLmRpc2FibGVkKTpob3ZlciB1bCxcclxuLmxwLWJ1dHRvbi1kcm9wZG93bjpub3QoLmRpc2FibGVkKSB1bDpob3ZlciB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxufVxyXG5cclxuLmN1cnJpY3VsdW0tc2VjdGlvbi5scC1lbXB0eS1zZWN0aW9uIHtcclxufVxyXG5cclxuLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtY2hlY2staXRlbXMsXHJcbi5jdXJyaWN1bHVtLXNlY3Rpb24gLmxwLWNoZWNrLWl0ZW1zOmhvdmVyIHtcclxuICAgIHBhZGRpbmctbGVmdDogNXB4O1xyXG4gICAgcGFkZGluZy1yaWdodDogMzRweDtcclxuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbi5jb2x1bW4tZm9ybWF0LFxyXG4uY29sdW1uLWlzX3ByZXZpZXdhYmxlLFxyXG4uY29sdW1uLXRheG9ub215LXF1ZXN0aW9uLXRhZyB7XHJcbiAgICB3aWR0aDogMTAlO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmluc3RhbGwtbm93OmJlZm9yZSxcclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5kaXNhYmxlLW5vdzpiZWZvcmUsXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuZW5hYmxlLW5vdzpiZWZvcmUge1xyXG4gICAgbWFyZ2luOiAzcHggNXB4IDAgLTJweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGZvbnQ6IDQwMCAyMHB4LzEgZGFzaGljb25zO1xyXG4gICAgLypzcGVhazogbm9uZTsqL1xyXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XHJcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5pbnN0YWxsLW5vdzpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZjEwNic7XHJcbiAgICBjb2xvcjogIzAwNzNhYTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5kaXNhYmxlLW5vdzpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZjE0Nyc7XHJcbiAgICBjb2xvcjogIzAwNzNhYTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5lbmFibGUtbm93OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnXFxmMzM1JztcclxuICAgIGNvbG9yOiAjZDU0ZTIxO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmRpc2FibGUtbm93OmhvdmVyOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnXFxmMzM1JztcclxuICAgIGNvbG9yOiAjZDU0ZTIxO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmVuYWJsZS1ub3c6aG92ZXI6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGYxNDcnO1xyXG4gICAgY29sb3I6ICMwMDczYWE7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuYnV0dG9uLXdvcmtpbmc6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGY0NjMnICFpbXBvcnRhbnQ7XHJcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogbHAtc3Bpbm5lciAycyBpbmZpbml0ZSBsaW5lYXI7XHJcbiAgICBhbmltYXRpb246IGxwLXNwaW5uZXIgMnMgaW5maW5pdGUgbGluZWFyO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmJ1dHRvbi13b3JraW5nIHNwYW4ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1hY3Rpb25zIGEge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXF1aWNrLWNvbmZpcm0ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogOTk5OTtcclxuICAgIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7XHJcbiAgICBwYWRkaW5nOiAycHggOHB4O1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgbGVmdDogLTM5LjYyNXB4O1xyXG4gICAgdG9wOiAyNHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0M5MDIwMjtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXF1aWNrLWNvbmZpcm06aG92ZXIsXHJcbi5sZWFybi1wcmVzcy1xdWljay1jb25maXJtOmhvdmVyOmJlZm9yZSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDczYjAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtcXVpY2stY29uZmlybTpiZWZvcmUge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIC8qIGJvcmRlcjogMXB4IHNvbGlkOyAqL1xyXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG4gICAgd2lkdGg6IDdweDtcclxuICAgIGhlaWdodDogN3B4O1xyXG4gICAgdG9wOiAtM3B4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0M5MDIwMjtcclxuICAgIHJpZ2h0OiA3cHg7XHJcbn1cclxuXHJcbi8qIGNvdXJzZSAqL1xyXG4ud3AtY29yZS11aSAubWV0YV9ib3hfYWRkX3NlY3Rpb24sXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfbGVzc29uIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxufVxyXG5cclxuLmhpZGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmhhbmRsZS5kYXNoaWNvbnMge1xyXG4gICAgY3Vyc29yOiBtb3ZlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG59XHJcblxyXG4ubWV0YV9ib3hfcmVtb3ZlIC5kYXNoaWNvbnMge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpbml0aWFsO1xyXG59XHJcblxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIGlucHV0LFxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIHNlbGVjdCB7XHJcbiAgICBtaW4td2lkdGg6IDI1MHB4O1xyXG59XHJcblxyXG4ucndtYi1tZXRhLWJveCBsYWJlbCB7XHJcbiAgICBjb2xvcjogIzIyMjtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBtYXJnaW46IDAgMCAxNnB4IDA7XHJcbn1cclxuXHJcbi5kZXNjcmlwdGlvbiB7XHJcbiAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbn1cclxuXHJcbi5kYXNoZWQtcGxhY2Vob2xkZXIge1xyXG4gICAgYm9yZGVyOiAycHggZGFzaGVkICM5OTk7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG59XHJcblxyXG4vKlxyXG4gICAgVHVOTiBhZGRlZCAyMSAwMyAyMDE1XHJcbiAgICBNb2RpZmllZCAwMyBBcHIgMjAxNVxyXG4qL1xyXG4vKiBDb3Vyc2UgQ3VycmljdWx1bW4gbWV0YSBib3ggc2VjdGlvbiovXHJcblxyXG4vKioqKioqKioqKioqIHZlcnNpb24gMS4wICoqKioqKioqKioqKioqL1xyXG5cclxuLyogb3JkZXIgKi9cclxuLnBvc3QtdHlwZS1scF9vcmRlciAjcG9zdC1ib2R5LWNvbnRlbnQsXHJcbi5wb3N0LXR5cGUtbHBfb3JkZXIgI29yZGVyX2RldGFpbHMgLmhhbmRsZWRpdixcclxuLnBvc3QtdHlwZS1scF9vcmRlciAjb3JkZXJfZGV0YWlscyAuaG5kbGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLnBvc3QtdHlwZS1scF9vcmRlciAjc3VibWl0cG9zdCAubWlzYy1wdWItc2VjdGlvbiBsYWJlbCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciB7XHJcbiAgICBtYXJnaW46IDE1cHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItZGF0YS1udW1iZXIge1xyXG4gICAgZm9udC1zaXplOiAzNnB4O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciA+IGgzIHtcclxuICAgIG1hcmdpbjogMCAwIDEwcHggMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItZGF0YS1kYXRlLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWRhdGEtc3RhdHVzLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWRhdGEtcGF5bWVudC1tZXRob2Qge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgcGFkZGluZzogMCAwIDEwcHggMDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLW9yZGVyIC51c2VyLWRpc3BsYXktbmFtZSxcclxuI2xlYXJuLXByZXNzLW9yZGVyIC51c2VyLWVtYWlsLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLnVzZXItaXAtYWRkcmVzcyB7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbWFyZ2luOiAwIDAgMTBweCAwO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWl0ZW1zIHRhYmxlIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItaXRlbXMgdGFibGUgdGgsXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItaXRlbXMgdGFibGUgdGQge1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1pbnN0YWxsLXNhbXBsZS1kYXRhLW5vdGljZSAuaW5zdGFsbC1zYW1wbGUtZGF0YS1sb2FkaW5nIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi8qIGxlYXJuX3ByZXNzX2Rhc2hib2FyZF93aWRnZXQgKi9cclxuI2xlYXJuX3ByZXNzX2Rhc2hib2FyZF93aWRnZXQge1xyXG4gICAgLnN1YnN1YnN1YiB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qIGlvcyBjaGVja2JveCAqL1xyXG4ubGVhcm4tcHJlc3MtY2hlY2tib3gge1xyXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG5pbnB1dC5yZWd1bGFyLXRleHRbaWRePVwibGVhcm4tcHJlc3MtZW1haWxzXCJdIHtcclxuICAgIHdpZHRoOiA5NyU7XHJcbn1cclxuXHJcbi5pb3MtdWktc2VsZWN0IHtcclxuICAgIGJhY2tncm91bmQ6ICNkZGRkZGQ7XHJcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcclxuICAgIGhlaWdodDogMThweDtcclxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogOXB4O1xyXG4gICAgd2lkdGg6IDMwcHg7XHJcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4gICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcclxuICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1pbi1vdXQ7XHJcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdC5jaGVja2VkIHtcclxuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMThweCAjNmRkYzVmO1xyXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMThweCAjNmRkYzVmO1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdC5jaGVja2VkIC5pbm5lciB7XHJcbiAgICBsZWZ0OiAxM3B4O1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdCAuaW5uZXIge1xyXG4gICAgd2lkdGg6IDE2cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDFweDtcclxuICAgIGxlZnQ6IDFweDtcclxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwJTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDM1MG1zIGN1YmljLWJlemllcigwLCAwLjg5LCAwLjQ0LCAxKTtcclxuICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDM1MG1zIGN1YmljLWJlemllcigwLCAwLjg5LCAwLjQ0LCAxKTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAzNTBtcyBjdWJpYy1iZXppZXIoMCwgMC44OSwgMC40NCwgMSk7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMzUwbXMgY3ViaWMtYmV6aWVyKDAsIDAuODksIDAuNDQsIDEpO1xyXG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgM3B4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG59XHJcblxyXG4ubHAtbGFiZWwtY291bnRlciB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3M0FBO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgIGhlaWdodDogMjFweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWluLXdpZHRoOiAyMXB4O1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICBwYWRkaW5nOiAwIDVweDtcclxufVxyXG5cclxuLmNvbHVtbi1udW1fb2ZfcXVlc3Rpb24sXHJcbi5jb2x1bW4tcHJldmlldyxcclxuLmNvbHVtbi1kdXJhdGlvbixcclxuLmNvbHVtbi10eXBlLFxyXG4uY29sdW1uLXRheG9ub215LXF1ZXN0aW9uX3RhZyB7XHJcbiAgICB3aWR0aDogMTAwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG59XHJcblxyXG4jbGVhcm5fcHJlc3NfZGFzaGJvYXJkX3dpZGdldCB7XHJcbiAgICAucnNzLXdpZGdldCB7XHJcbiAgICAgICAgdWwge1xyXG4gICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAucnNzLWRhdGUge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG4jbGVhcm5fcHJlc3NfZGFzaGJvYXJkX3dpZGdldF9zdGF0dXMge1xyXG4gICAgLmluc2lkZSB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIC5sZWFybnByZXNzLXN0YXRpc3RpYy1zdGF0dXMge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICAgICAgICA+IGEsID4gc3BhbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAmLmZ1bGwtd2lkdGgge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0OiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlY2VjZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAxMnB4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA+IGEge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubHAtdGVtcGxhdGUtb3ZlcnJpZGVzIHtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICB0aGVhZCB0aCBoNCB7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgdGJvZHkgdGgge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIHAge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHggOHB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICAgICAgJi5jdXJyZW50IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBhYWRjO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLmxwLXRlbXBsYXRlLXZlcnNpb24ge1xyXG4gICAgICAgIHdpZHRoOiAxMDBweDtcclxuICAgICAgICAmLm91dGRhdGVkIHtcclxuICAgICAgICAgICAgY29sb3I6ICNGRjAwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYudXAtdG8tZGF0ZSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMTg1OWZmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5scC10ZW1wbGF0ZS12ZXJzaW9uLCAubHAtY29yZS12ZXJzaW9uIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuICAgIC5scC10ZW1wbGF0ZS1maWxlIHtcclxuICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gICAgI2xlYXJuLXByZXNzLW5vLXRlbXBsYXRlcyB0ZCBwIHtcclxuICAgICAgICBjb2xvcjogIzAwNzNhYTtcclxuICAgIH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzIGxwLXNwaW5uZXIge1xyXG4gICAgMCUge1xyXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcclxuICAgIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBscC1zcGlubmVyIHtcclxuICAgIDAlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5yd21iLXF1aXpfcXVlc3Rpb25zLXdyYXBwZXIge1xyXG4gICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgIC5xdWl6LXF1ZXN0aW9ucy1oZWFkaW5nIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7XHJcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgY29sb3I6ICM3Nzc7XHJcbiAgICAgICAgcGFkZGluZzogMTVweCAyMHB4IDIwcHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xyXG4gICAgICAgIGEge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDMycHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDA3M2FhO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgICAmLmRhc2hpY29ucy1hcnJvdy1kb3duIHtcclxuICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMGEwZDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAjbGVhcm4tcHJlc3MtbGlzdC1xdWVzdGlvbnMge1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAucXVpei1xdWVzdGlvbiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjREREO1xyXG4gICAgICAgICAgICBtYXJnaW46IC0xcHggMCAwIDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xyXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybisxKSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGQ0ZDO1xyXG4gICAgICAgICAgICAgICAgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQ0ZDRkM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnF1aXotcXVlc3Rpb24taGVhZCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICAgICAgICAucXVpei1xdWVzdGlvbi1pY29uIHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC5tb3ZlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzY2NjtcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHVybChcIi4uLy4uL2ltYWdlcy9vcGVuaGFuZC5jdXJcIikgNyA1LCBkZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogMTRweDtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiA1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMGEwZDI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhc2hpY29ucy1hZG1pbi1wYWdlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5xdWl6LXF1ZXN0aW9uLWNvbnRlbnQge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAyMHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ucG9zdC10eXBlLWxwX3F1aXoge1xyXG4gICAgI2dlbmVyYWwtc2V0dGluZ3Mge1xyXG4gICAgICAgIGEge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXRhYnMge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICB1bC5oZWFkaW5nLXRhYnMge1xyXG4gICAgICAgIHBhZGRpbmc6IDAgMTBweDtcclxuICAgICAgICBtYXJnaW46IDBweDtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcclxuXHJcbiAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDEwcHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICByaWdodDogMDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLypmb250LXdlaWdodDogYm9sZDsqL1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAyYTNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC02cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAtNnB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy10YWItY29udGVudCB7XHJcbiAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweCAxMHB4IDIwcHg7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTAwJTtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgJi5pbml0aWFsaXplIHtcclxuICAgICAgICAubGVhcm4tcHJlc3MtdGFiLWNvbnRlbnQgPiBsaSB7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxlYXJuLXByZXNzLXRhYi1jb250ZW50IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjUlO1xyXG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMjBweDtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAjYTBhMGEwO1xyXG5cclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcclxuICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIGxpbmVhciAxcztcclxuICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XHJcbiAgICAgICAgICAgICAgICAtbW96LWFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICAtbW96LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xyXG4gICAgICAgICAgICAgICAgLW8tYW5pbWF0aW9uOiBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIGxpbmVhciAxcztcclxuICAgICAgICAgICAgICAgIC1vLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xyXG4gICAgICAgICAgICAgICAgLW1zLWFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICAtbXMtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAmOm5vdCguaW5pdGlhbGl6ZSkge1xyXG4gICAgICAgIC5sZWFybi1wcmVzcy10YWItY29udGVudCA+IGxpIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICA+IHVsIHtcclxuICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vKiBNZXRhYm94IFdpZGdldCAqL1xyXG4jd2lkZ2V0cy1yaWdodCAud2lkZ2V0cy1ob2xkZXItd3JhcCB7XHJcbiAgICAucndtYi1sYWJlbCB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgfVxyXG4gICAgLnJ3bWItaW5wdXR7XHJcbiAgICAgICAgaW5wdXRbdHlwZT1cInRleHRcIl17XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5kZXNjcmlwdGlvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbDtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5vdXRkYXRlZC1yZWFkbW9yZS1saW5re1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtbWVzc2FnZS5ub3RpY2Utd2FybmluZyB7XHJcbiAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmYjkwMDtcclxufVxyXG5cclxuQGtleWZyYW1lcyBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIHtcclxuICAgIDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG4gICAgNTAlIHtcclxuICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxufVxyXG5cclxuQC1tb3ota2V5ZnJhbWVzIGxlYXJuLXByZXNzLW1ldGEtYm94LXRhYnMtaW5pdGlhbGl6ZS1hbmltYXRpb24ge1xyXG4gICAgMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgICA1MCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5ALXdlYmtpdC1rZXlmcmFtZXMgbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDUwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbkAtby1rZXlmcmFtZXMgbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDUwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbkAtbXMta2V5ZnJhbWVzIGxlYXJuLXByZXNzLW1ldGEtYm94LXRhYnMtaW5pdGlhbGl6ZS1hbmltYXRpb24ge1xyXG4gICAgMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgICA1MCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG59XHJcbiJdLCJmaWxlIjoiYWRtaW4vYWRtaW4uY3NzIn0= */
assets/css/admin/attributes.css CHANGED
@@ -15,3 +15,5 @@
15
  padding: 15px;
16
  border-top: 1px solid #DDD;
17
  }
 
 
15
  padding: 15px;
16
  border-top: 1px solid #DDD;
17
  }
18
+
19
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluL2F0dHJpYnV0ZXMubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLGNBQUE7O0FBREosa0JBRUk7RUFDSSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7O0FBTFIsa0JBRUksdUJBSUk7RUFDSSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTs7QUFUWixrQkFFSSx1QkFTSTtFQUNJLGFBQUE7RUFDQSwwQkFBQSIsInNvdXJjZXNDb250ZW50IjpbIi5jb3Vyc2UtYXR0cmlidXRlcyB7XHJcbiAgICBtYXJnaW46IDIwcHggMDtcclxuICAgIC5sZWFybi1wcmVzcy1hdHRyaWJ1dGUge1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogLTFweDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgID4gaDQge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxlYXJuLXByZXNzLWF0dHJpYnV0ZS1kYXRhIHtcclxuICAgICAgICAgICAgcGFkZGluZzogMTVweDtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4iXSwiZmlsZSI6ImFkbWluL2F0dHJpYnV0ZXMuY3NzIn0= */
assets/css/admin/course-editor.css CHANGED
@@ -1,251 +1,253 @@
1
- #learn-press-course-editor {
2
- margin-bottom: 20px;
3
- background: #FFF;
4
- padding: 20px;
5
- box-shadow: 0 0 10px #DDD;
6
- }
7
- #learn-press-course-editor:after {
8
- display: block;
9
- clear: both;
10
- content: '';
11
- }
12
- #learn-press-course-editor #course-curriculum {
13
- width: 38%;
14
- border: 1px solid #DDD;
15
- margin-bottom: 20px;
16
- }
17
- #learn-press-course-editor #course-curriculum .course-section {
18
- background: #FFF;
19
- position: relative;
20
- border-bottom: 3px solid #B7B7B7;
21
- }
22
- #learn-press-course-editor #course-curriculum .course-section .section-head {
23
- border-bottom: 1px solid #DDD;
24
- background: #F9F9F9;
25
- position: relative;
26
- }
27
- #learn-press-course-editor #course-curriculum .course-section .section-head input[type="text"] {
28
- display: block;
29
- width: 100%;
30
- margin: 0;
31
- border: none;
32
- height: 50px;
33
- font-weight: bold;
34
- font-size: 20px;
35
- padding: 10px 15px;
36
- color: #777;
37
- background: transparent;
38
- }
39
- #learn-press-course-editor #course-curriculum .course-section .section-head:hover .section-move,
40
- #learn-press-course-editor #course-curriculum .course-section .section-head:hover .course-row-actions {
41
- display: inline-block;
42
- }
43
- #learn-press-course-editor #course-curriculum .course-section .section-head:hover:after {
44
- content: '';
45
- display: block;
46
- position: absolute;
47
- top: 0;
48
- left: 0;
49
- width: 100%;
50
- height: 100%;
51
- background: #0085ba;
52
- opacity: 0.1;
53
- pointer-events: none;
54
- }
55
- #learn-press-course-editor #course-curriculum .course-section .section-add-content {
56
- margin: 10px 10px;
57
- }
58
- #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul {
59
- margin-bottom: 10px;
60
- display: none;
61
- }
62
- #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li {
63
- display: inline-block;
64
- width: 70px;
65
- border: 1px solid #DDD;
66
- font-size: 48px;
67
- height: 60px;
68
- line-height: 60px;
69
- border-radius: 3px;
70
- margin-right: 6px;
71
- background: #FFF;
72
- }
73
- #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li:before {
74
- color: #DDD;
75
- }
76
- #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li:hover {
77
- cursor: move;
78
- }
79
- #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li:hover:before {
80
- color: #00A0D2;
81
- }
82
- #learn-press-course-editor #course-curriculum .course-section .section-items {
83
- margin: 0;
84
- min-height: 40px;
85
- }
86
- #learn-press-course-editor #course-curriculum .course-section .section-items.section-empty:after {
87
- content: 'Add item here';
88
- display: block;
89
- height: 50px;
90
- font-size: 18px;
91
- text-align: center;
92
- line-height: 50px;
93
- }
94
- #learn-press-course-editor #course-curriculum .course-section .section-items li {
95
- margin: 0;
96
- border-bottom: 1px solid #DDD;
97
- position: relative;
98
- background: #FFF;
99
- }
100
- #learn-press-course-editor #course-curriculum .course-section .section-items li input[type="text"] {
101
- width: 100%;
102
- box-sizing: border-box;
103
- margin: 0;
104
- border: none;
105
- padding: 10px 15px;
106
- background: transparent;
107
- color: #777;
108
- }
109
- #learn-press-course-editor #course-curriculum .course-section .section-items li:hover .section-item-move,
110
- #learn-press-course-editor #course-curriculum .course-section .section-items li:hover .course-row-actions {
111
- display: inline-block;
112
- }
113
- #learn-press-course-editor #course-curriculum .course-section .section-items li:hover:after {
114
- content: '';
115
- display: block;
116
- position: absolute;
117
- top: 0;
118
- left: 0;
119
- width: 100%;
120
- height: 100%;
121
- background: #0085ba;
122
- opacity: 0.1;
123
- pointer-events: none;
124
- }
125
- #learn-press-course-editor #course-curriculum .course-section .section-items li.ui-sortable-placeholder {
126
- visibility: visible !important;
127
- background: #FFF;
128
- box-shadow: 0 0 20px #DDD inset;
129
- }
130
- #learn-press-course-editor #course-curriculum .course-section .section-items li.ui-sortable-placeholder:after {
131
- content: 'Drop item here!';
132
- position: absolute;
133
- width: 100%;
134
- height: 40px;
135
- line-height: 40px;
136
- text-align: center;
137
- font-size: 20px;
138
- color: #777;
139
- }
140
- #learn-press-course-editor #course-curriculum .course-section .section-move,
141
- #learn-press-course-editor #course-curriculum .course-section .section-item-move {
142
- display: none;
143
- width: 15px;
144
- height: 30px;
145
- background: url("../../images/grippy_large.png") 4px center no-repeat;
146
- position: absolute;
147
- top: 50%;
148
- margin-top: -15px;
149
- cursor: url("../../../assets/images/openhand.cur") 7 5, default;
150
- }
151
- #learn-press-course-editor #course-curriculum .course-section.ui-sortable-placeholder {
152
- visibility: visible !important;
153
- background: #FFF;
154
- box-shadow: 0 0 20px #DDD inset;
155
- }
156
- #learn-press-course-editor #course-curriculum .course-section.ui-sortable-placeholder:after {
157
- content: 'Drop section here!';
158
- position: absolute;
159
- width: 100%;
160
- height: 40px;
161
- line-height: 40px;
162
- text-align: center;
163
- font-size: 20px;
164
- color: #777;
165
- top: 50%;
166
- margin-top: -20px;
167
- }
168
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions {
169
- position: absolute;
170
- right: 4px;
171
- height: 24px;
172
- top: 50%;
173
- margin-top: -13px;
174
- line-height: 24px;
175
- background: #F5F5F5;
176
- padding: 0 8px;
177
- font-size: 11px;
178
- border-radius: 3px;
179
- border: 1px solid #efefef;
180
- display: none;
181
- }
182
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions a,
183
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions > div {
184
- text-decoration: none;
185
- color: #9c9c9c;
186
- text-shadow: 1px 1px #fff;
187
- }
188
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions a:hover,
189
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions > div:hover {
190
- color: #39afff;
191
- }
192
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions a.remove {
193
- margin-right: 3px;
194
- }
195
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions a.remove:hover {
196
- color: #FF0000;
197
- }
198
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions .toggle {
199
- display: inline-block;
200
- width: 24px;
201
- margin-right: -8px;
202
- text-align: center;
203
- font-size: 20px;
204
- vertical-align: middle;
205
- line-height: 23px;
206
- border-left: 1px solid #efefef;
207
- height: 24px;
208
- background: #efefef;
209
- margin-top: -2px;
210
- }
211
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add {
212
- margin-left: 3px;
213
- display: inline-block;
214
- }
215
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div {
216
- display: none;
217
- position: absolute;
218
- min-width: 303px;
219
- right: 0;
220
- top: 100%;
221
- background: #F5F5F5;
222
- border: 1px solid #DDD;
223
- z-index: 999;
224
- text-align: right;
225
- padding: 10px 10px 3px 10px;
226
- }
227
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div ul {
228
- margin-bottom: 10px;
229
- }
230
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div ul li {
231
- width: 65px;
232
- height: 48px;
233
- font-size: 48px;
234
- border: 1px solid #DDD;
235
- border-radius: 3px;
236
- margin-left: 5px;
237
- }
238
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div a {
239
- text-align: right;
240
- margin-left: 8px;
241
- }
242
- #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add:hover > div {
243
- display: block;
244
- }
245
- #learn-press-course-editor #course-item-editor {
246
- width: 60%;
247
- float: right;
248
- border: 1px solid #DDD;
249
- padding: 0 20px;
250
- box-sizing: border-box;
251
- }
 
 
1
+ #learn-press-course-editor {
2
+ margin-bottom: 20px;
3
+ background: #FFF;
4
+ padding: 20px;
5
+ box-shadow: 0 0 10px #DDD;
6
+ }
7
+ #learn-press-course-editor:after {
8
+ display: block;
9
+ clear: both;
10
+ content: '';
11
+ }
12
+ #learn-press-course-editor #course-curriculum {
13
+ width: 38%;
14
+ border: 1px solid #DDD;
15
+ margin-bottom: 20px;
16
+ }
17
+ #learn-press-course-editor #course-curriculum .course-section {
18
+ background: #FFF;
19
+ position: relative;
20
+ border-bottom: 3px solid #B7B7B7;
21
+ }
22
+ #learn-press-course-editor #course-curriculum .course-section .section-head {
23
+ border-bottom: 1px solid #DDD;
24
+ background: #F9F9F9;
25
+ position: relative;
26
+ }
27
+ #learn-press-course-editor #course-curriculum .course-section .section-head input[type="text"] {
28
+ display: block;
29
+ width: 100%;
30
+ margin: 0;
31
+ border: none;
32
+ height: 50px;
33
+ font-weight: bold;
34
+ font-size: 20px;
35
+ padding: 10px 15px;
36
+ color: #777;
37
+ background: transparent;
38
+ }
39
+ #learn-press-course-editor #course-curriculum .course-section .section-head:hover .section-move,
40
+ #learn-press-course-editor #course-curriculum .course-section .section-head:hover .course-row-actions {
41
+ display: inline-block;
42
+ }
43
+ #learn-press-course-editor #course-curriculum .course-section .section-head:hover:after {
44
+ content: '';
45
+ display: block;
46
+ position: absolute;
47
+ top: 0;
48
+ left: 0;
49
+ width: 100%;
50
+ height: 100%;
51
+ background: #0085ba;
52
+ opacity: 0.1;
53
+ pointer-events: none;
54
+ }
55
+ #learn-press-course-editor #course-curriculum .course-section .section-add-content {
56
+ margin: 10px 10px;
57
+ }
58
+ #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul {
59
+ margin-bottom: 10px;
60
+ display: none;
61
+ }
62
+ #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li {
63
+ display: inline-block;
64
+ width: 70px;
65
+ border: 1px solid #DDD;
66
+ font-size: 48px;
67
+ height: 60px;
68
+ line-height: 60px;
69
+ border-radius: 3px;
70
+ margin-right: 6px;
71
+ background: #FFF;
72
+ }
73
+ #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li:before {
74
+ color: #DDD;
75
+ }
76
+ #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li:hover {
77
+ cursor: move;
78
+ }
79
+ #learn-press-course-editor #course-curriculum .course-section .section-add-content > ul > li:hover:before {
80
+ color: #00A0D2;
81
+ }
82
+ #learn-press-course-editor #course-curriculum .course-section .section-items {
83
+ margin: 0;
84
+ min-height: 40px;
85
+ }
86
+ #learn-press-course-editor #course-curriculum .course-section .section-items.section-empty:after {
87
+ content: 'Add item here';
88
+ display: block;
89
+ height: 50px;
90
+ font-size: 18px;
91
+ text-align: center;
92
+ line-height: 50px;
93
+ }
94
+ #learn-press-course-editor #course-curriculum .course-section .section-items li {
95
+ margin: 0;
96
+ border-bottom: 1px solid #DDD;
97
+ position: relative;
98
+ background: #FFF;
99
+ }
100
+ #learn-press-course-editor #course-curriculum .course-section .section-items li input[type="text"] {
101
+ width: 100%;
102
+ box-sizing: border-box;
103
+ margin: 0;
104
+ border: none;
105
+ padding: 10px 15px;
106
+ background: transparent;
107
+ color: #777;
108
+ }
109
+ #learn-press-course-editor #course-curriculum .course-section .section-items li:hover .section-item-move,
110
+ #learn-press-course-editor #course-curriculum .course-section .section-items li:hover .course-row-actions {
111
+ display: inline-block;
112
+ }
113
+ #learn-press-course-editor #course-curriculum .course-section .section-items li:hover:after {
114
+ content: '';
115
+ display: block;
116
+ position: absolute;
117
+ top: 0;
118
+ left: 0;
119
+ width: 100%;
120
+ height: 100%;
121
+ background: #0085ba;
122
+ opacity: 0.1;
123
+ pointer-events: none;
124
+ }
125
+ #learn-press-course-editor #course-curriculum .course-section .section-items li.ui-sortable-placeholder {
126
+ visibility: visible !important;
127
+ background: #FFF;
128
+ box-shadow: 0 0 20px #DDD inset;
129
+ }
130
+ #learn-press-course-editor #course-curriculum .course-section .section-items li.ui-sortable-placeholder:after {
131
+ content: 'Drop item here!';
132
+ position: absolute;
133
+ width: 100%;
134
+ height: 40px;
135
+ line-height: 40px;
136
+ text-align: center;
137
+ font-size: 20px;
138
+ color: #777;
139
+ }
140
+ #learn-press-course-editor #course-curriculum .course-section .section-move,
141
+ #learn-press-course-editor #course-curriculum .course-section .section-item-move {
142
+ display: none;
143
+ width: 15px;
144
+ height: 30px;
145
+ background: url("../../images/grippy_large.png") 4px center no-repeat;
146
+ position: absolute;
147
+ top: 50%;
148
+ margin-top: -15px;
149
+ cursor: url("../../../assets/images/openhand.cur") 7 5, default;
150
+ }
151
+ #learn-press-course-editor #course-curriculum .course-section.ui-sortable-placeholder {
152
+ visibility: visible !important;
153
+ background: #FFF;
154
+ box-shadow: 0 0 20px #DDD inset;
155
+ }
156
+ #learn-press-course-editor #course-curriculum .course-section.ui-sortable-placeholder:after {
157
+ content: 'Drop section here!';
158
+ position: absolute;
159
+ width: 100%;
160
+ height: 40px;
161
+ line-height: 40px;
162
+ text-align: center;
163
+ font-size: 20px;
164
+ color: #777;
165
+ top: 50%;
166
+ margin-top: -20px;
167
+ }
168
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions {
169
+ position: absolute;
170
+ right: 4px;
171
+ height: 24px;
172
+ top: 50%;
173
+ margin-top: -13px;
174
+ line-height: 24px;
175
+ background: #F5F5F5;
176
+ padding: 0 8px;
177
+ font-size: 11px;
178
+ border-radius: 3px;
179
+ border: 1px solid #efefef;
180
+ display: none;
181
+ }
182
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions a,
183
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions > div {
184
+ text-decoration: none;
185
+ color: #9c9c9c;
186
+ text-shadow: 1px 1px #fff;
187
+ }
188
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions a:hover,
189
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions > div:hover {
190
+ color: #39afff;
191
+ }
192
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions a.remove {
193
+ margin-right: 3px;
194
+ }
195
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions a.remove:hover {
196
+ color: #FF0000;
197
+ }
198
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions .toggle {
199
+ display: inline-block;
200
+ width: 24px;
201
+ margin-right: -8px;
202
+ text-align: center;
203
+ font-size: 20px;
204
+ vertical-align: middle;
205
+ line-height: 23px;
206
+ border-left: 1px solid #efefef;
207
+ height: 24px;
208
+ background: #efefef;
209
+ margin-top: -2px;
210
+ }
211
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add {
212
+ margin-left: 3px;
213
+ display: inline-block;
214
+ }
215
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div {
216
+ display: none;
217
+ position: absolute;
218
+ min-width: 303px;
219
+ right: 0;
220
+ top: 100%;
221
+ background: #F5F5F5;
222
+ border: 1px solid #DDD;
223
+ z-index: 999;
224
+ text-align: right;
225
+ padding: 10px 10px 3px 10px;
226
+ }
227
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div ul {
228
+ margin-bottom: 10px;
229
+ }
230
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div ul li {
231
+ width: 65px;
232
+ height: 48px;
233
+ font-size: 48px;
234
+ border: 1px solid #DDD;
235
+ border-radius: 3px;
236
+ margin-left: 5px;
237
+ }
238
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add > div a {
239
+ text-align: right;
240
+ margin-left: 8px;
241
+ }
242
+ #learn-press-course-editor #course-curriculum .course-section .course-row-actions div.add:hover > div {
243
+ display: block;
244
+ }
245
+ #learn-press-course-editor #course-item-editor {
246
+ width: 60%;
247
+ float: right;
248
+ border: 1px solid #DDD;
249
+ padding: 0 20px;
250
+ box-sizing: border-box;
251
+ }
252
+
253
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluL2NvdXJzZS1lZGl0b3IubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0VBQ0EseUJBQUE7O0FBQ0EsMEJBQUM7RUFDRyxjQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQVMsRUFBVDs7QUFSUiwwQkFhSTtFQUNJLFVBQUE7RUFDQSxzQkFBQTtFQUNBLG1CQUFBOztBQWhCUiwwQkFhSSxtQkFJSTtFQUNJLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQ0FBQTs7QUFwQlosMEJBYUksbUJBSUksZ0JBSUk7RUFDSSw2QkFBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7O0FBeEJoQiwwQkFhSSxtQkFJSSxnQkFJSSxjQUlJLE1BQUs7RUFDRCxjQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxZQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0VBQ0EsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHVCQUFBOztBQUVKLDBCQXhCWixtQkFJSSxnQkFJSSxjQWdCSyxNQUNHO0FBREosMEJBeEJaLG1CQUlJLGdCQUlJLGNBZ0JLLE1BQ2tCO0VBQ1gscUJBQUE7O0FBRUosMEJBNUJoQixtQkFJSSxnQkFJSSxjQWdCSyxNQUlJO0VBQ0csU0FBUyxFQUFUO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLG9CQUFBOztBQW5EeEIsMEJBYUksbUJBSUksZ0JBc0NJO0VBQ0ksaUJBQUE7O0FBeERoQiwwQkFhSSxtQkFJSSxnQkFzQ0kscUJBRUk7RUFDSSxtQkFBQTtFQUNBLGFBQUE7O0FBM0RwQiwwQkFhSSxtQkFJSSxnQkFzQ0kscUJBRUksS0FHSTtFQUNJLHFCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsZUFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0Es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Q0kscUJBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxzQkFBQTtFQUNBLGlCQUFBO0VBQ0EsOEJBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTs7QUF0TnBCLDBCQWFJLG1CQUlJLGdCQStKSSxvQkF3Q0ksSUFBRztFQUNDLGdCQUFBO0VBQ0EscUJBQUE7O0FBMU5wQiwwQkFhSSxtQkFJSSxnQkErSkksb0JBd0NJLElBQUcsSUFHQztFQUNJLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0VBQ0EsMkJBQUE7O0FBck94QiwwQkFhSSxtQkFJSSxnQkErSkksb0JBd0NJLElBQUcsSUFHQyxNQVdJO0VBQ0ksbUJBQUE7O0FBdk81QiwwQkFhSSxtQkFJSSxnQkErSkksb0JBd0NJLElBQUcsSUFHQyxNQVdJLEdBRUk7RUFDSSxXQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7O0FBOU9oQywwQkFhSSxtQkFJSSxnQkErSkksb0JBd0NJLElBQUcsSUFHQyxNQXVCSTtFQUNJLGlCQUFBO0VBQ0EsZ0JBQUE7O0FBR1IsMEJBMU9oQixtQkFJSSxnQkErSkksb0JBd0NJLElBQUcsSUErQkUsTUFDRztFQUNJLGNBQUE7O0FBelA1QiwwQkFpUUk7RUFDSSxVQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsZUFBQTtFQUNBLHNCQUFBIiwic291cmNlc0NvbnRlbnQiOlsiI2xlYXJuLXByZXNzLWNvdXJzZS1lZGl0b3Ige1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgYm94LXNoYWRvdzogMCAwIDEwcHggI0RERDtcclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgfVxyXG4gICAgI2NvdXJzZS1jdXJyaWN1bHVtLCAjY291cnNlLWl0ZW0tZWRpdG9yIHtcclxuXHJcbiAgICB9XHJcbiAgICAjY291cnNlLWN1cnJpY3VsdW0ge1xyXG4gICAgICAgIHdpZHRoOiAzOCU7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG4gICAgICAgIC5jb3Vyc2Utc2VjdGlvbiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNCN0I3Qjc7XHJcbiAgICAgICAgICAgIC5zZWN0aW9uLWhlYWQge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGOUY5O1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICAgICAgaW5wdXRbdHlwZT1cInRleHRcIl0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3Nzc7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAuc2VjdGlvbi1tb3ZlLCAuY291cnNlLXJvdy1hY3Rpb25zIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwODViYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnNlY3Rpb24tYWRkLWNvbnRlbnQge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHg7XHJcbiAgICAgICAgICAgICAgICA+IHVsIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDcwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2MHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNjBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNEREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IG1vdmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMEEwRDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnNlY3Rpb24taXRlbXMge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgICYuc2VjdGlvbi1lbXB0eSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdBZGQgaXRlbSBoZXJlJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRbdHlwZT1cInRleHRcIl0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzc3O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2VjdGlvbi1pdGVtLW1vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb3Vyc2Utcm93LWFjdGlvbnMge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDg1YmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAmLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMjBweCAjREREIGluc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEcm9wIGl0ZW0gaGVyZSEnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzc3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5zZWN0aW9uLW1vdmUsIC5zZWN0aW9uLWl0ZW0tbW92ZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE1cHg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMwcHg7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi8uLi9pbWFnZXMvZ3JpcHB5X2xhcmdlLnBuZ1wiKSA0cHggY2VudGVyIG5vLXJlcGVhdDtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTE1cHg7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHVybChcIi4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvb3BlbmhhbmQuY3VyXCIpIDcgNSwgZGVmYXVsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAmLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMjBweCAjREREIGluc2V0O1xyXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ0Ryb3Agc2VjdGlvbiBoZXJlISc7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzc3O1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC0yMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICYuYWN0aXZlIHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLmNvdXJzZS1yb3ctYWN0aW9ucyB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICByaWdodDogNHB4O1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMTNweDtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgOHB4O1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMXB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VmZWZlZjtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBhLCA+IGRpdiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjOWM5YzljO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtc2hhZG93OiAxcHggMXB4ICNmZmY7XHJcbiAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMzlhZmZmO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGEucmVtb3ZlIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNGRjAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLnRvZ2dsZXtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtOHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjNweDtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlZmVmZWY7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmVmZWY7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTJweDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpdi5hZGQge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgID4gZGl2IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDMwM3B4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiA5OTk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDEwcHggM3B4IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDY1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiBkaXYge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgI2NvdXJzZS1pdGVtLWVkaXRvciB7XHJcbiAgICAgICAgd2lkdGg6IDYwJTtcclxuICAgICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1cclxufSJdLCJmaWxlIjoiYWRtaW4vY291cnNlLWVkaXRvci5jc3MifQ== */
assets/css/admin/meta-box-course.css CHANGED
@@ -3,6 +3,13 @@
3
  .rwmb-duration-wrapper select {
4
  vertical-align: baseline;
5
  }
 
 
 
 
 
 
 
6
  .post-type-lp_course #postdivric,
7
  .post-type-lp_course #submitpost {
8
  visibility: hidden;
@@ -25,65 +32,68 @@
25
  font-size: 12px;
26
  font-style: italic;
27
  }
28
- #learn-press-button-toggle-editor {
29
- margin: 20px 0 0;
30
- }
31
- #course_curriculum {
32
  border: none;
33
  background-color: transparent;
 
34
  }
35
- #course_curriculum .handlediv,
36
- #course_curriculum .hndle {
37
- display: none;
38
  }
39
- #course_curriculum .inside {
40
- margin: 0;
41
- padding: 0;
 
 
 
 
 
42
  }
43
- #course_curriculum .curriculum-heading {
44
  margin: 0 0 20px 0;
45
  padding: 10px 20px;
46
  background-color: #FFF;
47
  line-height: 1;
48
  border: 1px solid #DDD;
49
  }
50
- #course_curriculum .curriculum-heading .description {
51
  font-weight: normal;
52
  color: #999;
53
  display: block;
54
  font-size: 90%;
55
  margin-top: 10px;
56
  }
57
- #course_curriculum .curriculum-heading .items-toggle {
58
  float: right;
59
  margin: -33px 7px 0 0;
60
  line-height: 1;
61
  box-shadow: none;
62
  }
63
- #course_curriculum .curriculum-heading .items-toggle a {
64
  -webkit-box-shadow: none;
65
  -moz-box-shadow: none;
66
  box-shadow: none;
67
  font-size: 32px;
68
  }
69
- #course_curriculum .curriculum-sections {
70
  margin: 0;
71
  background-color: #FFF;
72
  border-bottom: 1px solid #DDD;
73
  }
74
- #course_curriculum .curriculum-section {
75
  margin: -1px 0 0 0;
76
  background-color: #FFF;
77
  border-bottom: 1px solid #DDD;
78
  position: relative;
79
  }
80
- #course_curriculum .curriculum-section.ui-sortable-placeholder {
81
  background-image: url("../../images/stripe.png");
82
  visibility: visible !important;
83
  border: 1px solid #DDD;
84
  border-bottom: none;
85
  }
86
- #course_curriculum .curriculum-section-head {
87
  border: 1px solid #DDD;
88
  background-color: #F9F9F9;
89
  border-bottom: none;
@@ -91,37 +101,37 @@
91
  color: #777;
92
  padding: 3px 20px;
93
  }
94
- #course_curriculum .curriculum-section-head input {
95
  background-color: #F9F9F9;
96
  }
97
- #course_curriculum .curriculum-section-head .lp-section-actions {
98
  float: right;
99
  margin: 14px 0;
100
  visibility: hidden;
101
  position: relative;
102
  }
103
- #course_curriculum .curriculum-section:not(.lp-empty-section) .curriculum-section-head:hover .lp-section-actions {
104
  visibility: visible;
105
  }
106
- #course_curriculum .curriculum-section .lp-section-actions a {
107
  vertical-align: middle;
108
  color: #666666;
109
  width: 24px;
110
  height: 24px;
111
  box-shadow: none;
112
  }
113
- #course_curriculum .curriculum-section .lp-section-actions a[data-action="expand"] {
114
  line-height: 28px;
115
  }
116
- #course_curriculum .curriculum-section .lp-section-actions a:before {
117
  width: 24px;
118
  height: 24px;
119
  font-size: 24px;
120
  }
121
- #course_curriculum .curriculum-section .lp-section-actions a:hover {
122
  color: #00a0d2;
123
  }
124
- #course_curriculum .curriculum-section .curriculum-section-head .lp-section-actions .move {
125
  cursor: url("../../../assets/images/openhand.cur") 7 5, default;
126
  position: absolute;
127
  right: -15px;
@@ -130,17 +140,17 @@
130
  background: url("../../../assets/images/grippy_large.png") right no-repeat;
131
  width: 20px;
132
  }
133
- #course_curriculum .curriculum-section-content {
134
  border: 1px solid #DDD;
135
  padding: 20px;
136
  border-bottom-width: 0;
137
  width: 100%;
138
  box-sizing: border-box;
139
  }
140
- #course_curriculum .curriculum-section.ui-sortable-helper {
141
  border-bottom: 1px solid #DDD;
142
  }
143
- #course_curriculum .curriculum-section-head .lp-section-name {
144
  border: none;
145
  outline: none;
146
  box-shadow: none;
@@ -151,65 +161,65 @@
151
  padding: 0;
152
  height: 50px;
153
  }
154
- #course_curriculum .curriculum-section-head .lp-section-name:focus {
155
  color: #444;
156
  }
157
- #course_curriculum .curriculum-section.lp-empty-section .curriculum-section-content {
158
  _display: none;
159
  }
160
- #course_curriculum .curriculum-section-items {
161
  border-collapse: collapse;
162
  width: 100%;
163
  }
164
- #course_curriculum .curriculum-section-items .lp-section-item {
165
  border: 1px dashed #DDD;
166
  margin: -1px 0 0 0;
167
  padding: 5px 0;
168
  background-color: #FFF;
169
  }
170
- #course_curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1),
171
- #course_curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1) .section-item-input input {
172
  background-color: #FCFCFC;
173
  }
174
- #course_curriculum .curriculum-section-items .lp-section-item .lp-item-actions {
175
  margin: 0;
176
  float: right;
177
  position: relative;
178
  }
179
- #course_curriculum .curriculum-section-items .lp-section-item .lp-item-actions a {
180
  vertical-align: middle;
181
  color: #666;
182
  margin-top: -2px;
183
  box-shadow: none;
184
  }
185
- #course_curriculum .curriculum-section-items .lp-section-item .lp-item-actions a:hover {
186
  color: #00a0d2;
187
  }
188
- #course_curriculum .curriculum-section-items .lp-section-item[data-item_id=""] .lp-edit {
189
  display: none;
190
  }
191
- #course_curriculum .curriculum-section-items .lp-section-item.lp-item-empty .lp-item-actions {
192
  display: none;
193
  }
194
- #course_curriculum .lp-section-item.ui-sortable-placeholder {
195
  visibility: visible !important;
196
  }
197
- #course_curriculum .lp-section-item.ui-sortable-placeholder td {
198
  background-image: url("../../../assets/images/stripe.png");
199
  border-bottom: none;
200
  }
201
- #course_curriculum .lp-item-actions > * {
202
  visibility: hidden;
203
  }
204
- #course_curriculum .item-bulk-actions {
205
  text-align: right;
206
  margin-top: 0;
207
  margin-bottom: 15px;
208
  }
209
- #course_curriculum .lp-section-item:not(.lp-item-empty):hover .lp-item-actions > * {
210
  visibility: visible;
211
  }
212
- #course_curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty) .item-checkbox {
213
  display: inline-block;
214
  height: 34px;
215
  border: none;
@@ -219,26 +229,26 @@
219
  cursor: url("../../../assets/images/openhand.cur") 7 5, default;
220
  visibility: visible;
221
  }
222
- #course_curriculum .curriculum-section-items .lp-section-item .item-checkbox input {
223
  opacity: 0.4;
224
  }
225
- #course_curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty):hover .item-checkbox input {
226
  opacity: 1;
227
  }
228
- #course_curriculum .lp-item-lp_lesson .handle.learn-press-icon:before {
229
  content: "\e900";
230
  }
231
- #course_curriculum .lp-item-lp_quiz .handle.learn-press-icon:before {
232
  content: "\e901";
233
  }
234
- #course_curriculum .lp-section-item.lp-item-new .handle {
235
  color: #999;
236
  }
237
- #course_curriculum .curriculum-section-items .lp-section-item:hover,
238
- #course_curriculum .curriculum-section-items .lp-section-item:hover input.lp-item-name {
239
  background-color: #F9F9F9;
240
  }
241
- #course_curriculum .lp-section-item .handle {
242
  width: 32px;
243
  height: 32px;
244
  display: inline-block;
@@ -248,10 +258,10 @@
248
  line-height: 32px;
249
  color: #00A0D2;
250
  }
251
- #course_curriculum .lp-section-item.remove input.lp-item-name {
252
  color: #FF0000;
253
  }
254
- #course_curriculum .lp-section-item input.lp-item-name {
255
  color: #777;
256
  border: none;
257
  box-shadow: none;
@@ -263,7 +273,7 @@
263
  overflow: hidden;
264
  white-space: nowrap;
265
  }
266
- #course_curriculum .lp-section-describe {
267
  border: none;
268
  box-shadow: none;
269
  color: #999;
@@ -272,11 +282,11 @@
272
  float: left;
273
  padding-left: 0;
274
  }
275
- #course_curriculum .curriculum-section-items .lp-section-item input.lp-item-name:focus,
276
- #course_curriculum input:focus {
277
  color: #444;
278
  }
279
- #course_curriculum .lp-section-item .section-item-icon {
280
  width: 32px;
281
  white-space: nowrap;
282
  }
@@ -292,13 +302,13 @@
292
  cursor: pointer;
293
  border: 1px solid transparent;
294
  }
295
- #course_curriculum .lp-section-item .learn-press-icon.item-lp_quiz:before {
296
  content: "\f469";
297
  }
298
- #course_curriculum .lp-section-item .learn-press-icon.item-lp_lesson:before {
299
  content: "\f330";
300
  }
301
- #course_curriculum .lp-section-item td {
302
  height: 30px;
303
  }
304
  #poststuff .postbox-container {
@@ -473,89 +483,14 @@ tr.focus .learn-press-dropdown-item-types > span.learn-press-icon {
473
  .learn-press-dropdown-item-types li span.learn-press-icon.item-selected {
474
  color: #0085ba;
475
  }
 
 
 
476
  .post-type-lp_course #switch-course-tabs,
477
  .post-type-lp_course #toggle-meta-boxes {
478
  float: right;
479
  margin-left: 10px;
480
  }
481
- .post-type-lp_course.enable-course-tabs #post-body-content {
482
- margin-bottom: 0;
483
- }
484
- .post-type-lp_course.enable-course-tabs #normal-sortables .postbox {
485
- _visibility: hidden;
486
- float: left;
487
- margin-right: -100%;
488
- width: 100%;
489
- box-sizing: border-box;
490
- height: 0;
491
- overflow: hidden;
492
- border-width: 0;
493
- }
494
- .post-type-lp_course.enable-course-tabs #normal-sortables .postbox.active {
495
- height: auto;
496
- border-width: 1px;
497
- }
498
- .post-type-lp_course.enable-course-tabs #normal-sortables .postbox .handlediv,
499
- .post-type-lp_course.enable-course-tabs #normal-sortables .postbox .hndle {
500
- display: none;
501
- }
502
- .post-type-lp_course.enable-course-tabs #course-tabs {
503
- background: #FFF;
504
- padding: 10px;
505
- margin-bottom: 0;
506
- border: 1px solid #DDD;
507
- border-bottom: none;
508
- }
509
- .post-type-lp_course.enable-course-tabs #course-tabs:after {
510
- display: block;
511
- clear: both;
512
- content: '';
513
- }
514
- .post-type-lp_course.enable-course-tabs #course-tabs.ui-sortable:not(.ui-sortable-disabled) li.ui-sortable-handle {
515
- position: relative;
516
- }
517
- .post-type-lp_course.enable-course-tabs #course-tabs.ui-sortable:not(.ui-sortable-disabled) li.ui-sortable-handle a {
518
- border: 1px solid #ddd;
519
- padding: 0px 5px;
520
- margin: 0 5px;
521
- color: #DDD;
522
- background: #FFF;
523
- }
524
- .post-type-lp_course.enable-course-tabs #course-tabs.ui-sortable:not(.ui-sortable-disabled) li.ui-sortable-handle:after {
525
- content: '';
526
- position: absolute;
527
- top: 0;
528
- left: 0;
529
- width: 100%;
530
- height: 100%;
531
- cursor: move;
532
- }
533
- .post-type-lp_course.enable-course-tabs #course-tabs li {
534
- float: left;
535
- margin-bottom: 0;
536
- }
537
- .post-type-lp_course.enable-course-tabs #course-tabs li a {
538
- display: block;
539
- padding: 0 15px 0 0;
540
- text-decoration: none;
541
- outline: none;
542
- box-shadow: none;
543
- }
544
- .post-type-lp_course.enable-course-tabs #course-tabs li.active a {
545
- font-weight: bold;
546
- }
547
- .post-type-lp_course.enable-course-tabs #course-tabs li#switch-course-metaboxes {
548
- float: right;
549
- }
550
- .post-type-lp_course.enable-course-tabs #course-tabs li#switch-course-metaboxes #complete-reorder-course-tabs {
551
- display: none;
552
- }
553
- .post-type-lp_course.enable-course-tabs #course-tabs li#switch-course-metaboxes a {
554
- padding-right: 0;
555
- color: #FF0000;
556
- display: inline-block;
557
- margin-left: 15px;
558
- }
559
  /*
560
  #lp-course-curriculum .lp-course-curriculum-toggle{
561
  padding: 0;
@@ -859,3 +794,5 @@ tr.focus .learn-press-dropdown-item-types > span.learn-press-icon {
859
  .lp-course-curriculum-toggle .expand{
860
  display: none;
861
  }*/
 
 
3
  .rwmb-duration-wrapper select {
4
  vertical-align: baseline;
5
  }
6
+ #learn-press-toggle-course-results {
7
+ display: block;
8
+ margin-bottom: 10px;
9
+ }
10
+ #learn-press-toggle-course-results a {
11
+ box-shadow: none;
12
+ }
13
  .post-type-lp_course #postdivric,
14
  .post-type-lp_course #submitpost {
15
  visibility: hidden;
32
  font-size: 12px;
33
  font-style: italic;
34
  }
35
+ #lp-course-curriculum {
 
 
 
36
  border: none;
37
  background-color: transparent;
38
+ margin: 20px 0;
39
  }
40
+ .post-type-lp_course .column-price,
41
+ .post-type-lp_course .column-students {
42
+ width: 10%;
43
  }
44
+ .post-type-lp_course #lp-course-curriculum .curriculum-section-items .lp-item-empty td.section-item-input {
45
+ padding-left: 40px;
46
+ }
47
+ .post-type-lp_course #lp-course-curriculum .curriculum-section-items .lp-item-empty td.section-item-input.hover {
48
+ padding-left: 0;
49
+ }
50
+ .post-type-lp_course .type-lp_course.status-pending .row-actions .view {
51
+ display: none;
52
  }
53
+ #lp-course-curriculum .curriculum-heading {
54
  margin: 0 0 20px 0;
55
  padding: 10px 20px;
56
  background-color: #FFF;
57
  line-height: 1;
58
  border: 1px solid #DDD;
59
  }
60
+ #lp-course-curriculum .curriculum-heading .description {
61
  font-weight: normal;
62
  color: #999;
63
  display: block;
64
  font-size: 90%;
65
  margin-top: 10px;
66
  }
67
+ #lp-course-curriculum .curriculum-heading .items-toggle {
68
  float: right;
69
  margin: -33px 7px 0 0;
70
  line-height: 1;
71
  box-shadow: none;
72
  }
73
+ #lp-course-curriculum .curriculum-heading .items-toggle a {
74
  -webkit-box-shadow: none;
75
  -moz-box-shadow: none;
76
  box-shadow: none;
77
  font-size: 32px;
78
  }
79
+ #lp-course-curriculum .curriculum-sections {
80
  margin: 0;
81
  background-color: #FFF;
82
  border-bottom: 1px solid #DDD;
83
  }
84
+ #lp-course-curriculum .curriculum-section {
85
  margin: -1px 0 0 0;
86
  background-color: #FFF;
87
  border-bottom: 1px solid #DDD;
88
  position: relative;
89
  }
90
+ #lp-course-curriculum .curriculum-section.ui-sortable-placeholder {
91
  background-image: url("../../images/stripe.png");
92
  visibility: visible !important;
93
  border: 1px solid #DDD;
94
  border-bottom: none;
95
  }
96
+ #lp-course-curriculum .curriculum-section-head {
97
  border: 1px solid #DDD;
98
  background-color: #F9F9F9;
99
  border-bottom: none;
101
  color: #777;
102
  padding: 3px 20px;
103
  }
104
+ #lp-course-curriculum .curriculum-section-head input {
105
  background-color: #F9F9F9;
106
  }
107
+ #lp-course-curriculum .curriculum-section-head .lp-section-actions {
108
  float: right;
109
  margin: 14px 0;
110
  visibility: hidden;
111
  position: relative;
112
  }
113
+ #lp-course-curriculum .curriculum-section:not(.lp-empty-section) .curriculum-section-head:hover .lp-section-actions {
114
  visibility: visible;
115
  }
116
+ #lp-course-curriculum .curriculum-section .lp-section-actions a {
117
  vertical-align: middle;
118
  color: #666666;
119
  width: 24px;
120
  height: 24px;
121
  box-shadow: none;
122
  }
123
+ #lp-course-curriculum .curriculum-section .lp-section-actions a[data-action="expand"] {
124
  line-height: 28px;
125
  }
126
+ #lp-course-curriculum .curriculum-section .lp-section-actions a:before {
127
  width: 24px;
128
  height: 24px;
129
  font-size: 24px;
130
  }
131
+ #lp-course-curriculum .curriculum-section .lp-section-actions a:hover {
132
  color: #00a0d2;
133
  }
134
+ #lp-course-curriculum .curriculum-section .curriculum-section-head .lp-section-actions .move {
135
  cursor: url("../../../assets/images/openhand.cur") 7 5, default;
136
  position: absolute;
137
  right: -15px;
140
  background: url("../../../assets/images/grippy_large.png") right no-repeat;
141
  width: 20px;
142
  }
143
+ #lp-course-curriculum .curriculum-section-content {
144
  border: 1px solid #DDD;
145
  padding: 20px;
146
  border-bottom-width: 0;
147
  width: 100%;
148
  box-sizing: border-box;
149
  }
150
+ #lp-course-curriculum .curriculum-section.ui-sortable-helper {
151
  border-bottom: 1px solid #DDD;
152
  }
153
+ #lp-course-curriculum .curriculum-section-head .lp-section-name {
154
  border: none;
155
  outline: none;
156
  box-shadow: none;
161
  padding: 0;
162
  height: 50px;
163
  }
164
+ #lp-course-curriculum .curriculum-section-head .lp-section-name:focus {
165
  color: #444;
166
  }
167
+ #lp-course-curriculum .curriculum-section.lp-empty-section .curriculum-section-content {
168
  _display: none;
169
  }
170
+ #lp-course-curriculum .curriculum-section-items {
171
  border-collapse: collapse;
172
  width: 100%;
173
  }
174
+ #lp-course-curriculum .curriculum-section-items .lp-section-item {
175
  border: 1px dashed #DDD;
176
  margin: -1px 0 0 0;
177
  padding: 5px 0;
178
  background-color: #FFF;
179
  }
180
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1),
181
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1) .section-item-input input {
182
  background-color: #FCFCFC;
183
  }
184
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .lp-item-actions {
185
  margin: 0;
186
  float: right;
187
  position: relative;
188
  }
189
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .lp-item-actions a {
190
  vertical-align: middle;
191
  color: #666;
192
  margin-top: -2px;
193
  box-shadow: none;
194
  }
195
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .lp-item-actions a:hover {
196
  color: #00a0d2;
197
  }
198
+ #lp-course-curriculum .curriculum-section-items .lp-section-item[data-item_id=""] .lp-edit {
199
  display: none;
200
  }
201
+ #lp-course-curriculum .curriculum-section-items .lp-section-item.lp-item-empty .lp-item-actions {
202
  display: none;
203
  }
204
+ #lp-course-curriculum .lp-section-item.ui-sortable-placeholder {
205
  visibility: visible !important;
206
  }
207
+ #lp-course-curriculum .lp-section-item.ui-sortable-placeholder td {
208
  background-image: url("../../../assets/images/stripe.png");
209
  border-bottom: none;
210
  }
211
+ #lp-course-curriculum .lp-item-actions > * {
212
  visibility: hidden;
213
  }
214
+ #lp-course-curriculum .item-bulk-actions {
215
  text-align: right;
216
  margin-top: 0;
217
  margin-bottom: 15px;
218
  }
219
+ #lp-course-curriculum .lp-section-item:not(.lp-item-empty):hover .lp-item-actions > * {
220
  visibility: visible;
221
  }
222
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty) .item-checkbox {
223
  display: inline-block;
224
  height: 34px;
225
  border: none;
229
  cursor: url("../../../assets/images/openhand.cur") 7 5, default;
230
  visibility: visible;
231
  }
232
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .item-checkbox input {
233
  opacity: 0.4;
234
  }
235
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty):hover .item-checkbox input {
236
  opacity: 1;
237
  }
238
+ #lp-course-curriculum .lp-item-lp_lesson .handle.learn-press-icon:before {
239
  content: "\e900";
240
  }
241
+ #lp-course-curriculum .lp-item-lp_quiz .handle.learn-press-icon:before {
242
  content: "\e901";
243
  }
244
+ #lp-course-curriculum .lp-section-item.lp-item-new .handle {
245
  color: #999;
246
  }
247
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:hover,
248
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:hover input.lp-item-name {
249
  background-color: #F9F9F9;
250
  }
251
+ #lp-course-curriculum .lp-section-item .handle {
252
  width: 32px;
253
  height: 32px;
254
  display: inline-block;
258
  line-height: 32px;
259
  color: #00A0D2;
260
  }
261
+ #lp-course-curriculum .lp-section-item.remove input.lp-item-name {
262
  color: #FF0000;
263
  }
264
+ #lp-course-curriculum .lp-section-item input.lp-item-name {
265
  color: #777;
266
  border: none;
267
  box-shadow: none;
273
  overflow: hidden;
274
  white-space: nowrap;
275
  }
276
+ #lp-course-curriculum .lp-section-describe {
277
  border: none;
278
  box-shadow: none;
279
  color: #999;
282
  float: left;
283
  padding-left: 0;
284
  }
285
+ #lp-course-curriculum .curriculum-section-items .lp-section-item input.lp-item-name:focus,
286
+ #lp-course-curriculum input:focus {
287
  color: #444;
288
  }
289
+ #lp-course-curriculum .lp-section-item .section-item-icon {
290
  width: 32px;
291
  white-space: nowrap;
292
  }
302
  cursor: pointer;
303
  border: 1px solid transparent;
304
  }
305
+ #lp-course-curriculum .lp-section-item .learn-press-icon.item-lp_quiz:before {
306
  content: "\f469";
307
  }
308
+ #lp-course-curriculum .lp-section-item .learn-press-icon.item-lp_lesson:before {
309
  content: "\f330";
310
  }
311
+ #lp-course-curriculum .lp-section-item td {
312
  height: 30px;
313
  }
314
  #poststuff .postbox-container {
483
  .learn-press-dropdown-item-types li span.learn-press-icon.item-selected {
484
  color: #0085ba;
485
  }
486
+ .learn-press-course-attributes {
487
+ margin: 20px 0;
488
+ }
489
  .post-type-lp_course #switch-course-tabs,
490
  .post-type-lp_course #toggle-meta-boxes {
491
  float: right;
492
  margin-left: 10px;
493
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
494
  /*
495
  #lp-course-curriculum .lp-course-curriculum-toggle{
496
  padding: 0;
794
  .lp-course-curriculum-toggle .expand{
795
  display: none;
796
  }*/
797
+
798
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluL21ldGEtYm94LWNvdXJzZS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxzQkFBdUIsTUFBSztBQUM1QixzQkFBdUI7RUFDbkIsd0JBQUE7O0FBRUo7RUFDQyxjQUFBO0VBQWUsbUJBQUE7O0FBRGhCLGtDQUVDO0VBQUUsZ0JBQUE7O0FBRUgsb0JBQ0k7QUFESixvQkFFSTtFQUNJLGtCQUFBOztBQUlSO0VBQ0ksbUJBQUE7O0FBREosMkJBRUk7RUFDSSxrQkFBQTs7QUFIUiwyQkFLSTtFQUNJLFdBQUE7RUFDQSxhQUFBOztBQVBSLDJCQVNJO0VBQ0ksZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTs7QUFJUjtFQUNJLFlBQUE7RUFDQSw2QkFBQTtFQUNBLGNBQUE7O0FBSUEsb0JBQUU7QUFBZSxvQkFBRTtFQUNmLFVBQUE7O0FBRlIsb0JBS0ksc0JBQXNCLDBCQUEwQixlQUFlLEdBQUU7RUFDN0Qsa0JBQUE7O0FBQ0Esb0JBRkosc0JBQXNCLDBCQUEwQixlQUFlLEdBQUUsbUJBRTVEO0VBQ0csZUFBQTs7QUFNSixvQkFGSixnQkFFSyxlQUNHLGFBQWE7RUFDVCxhQUFBOztBQU9oQixxQkFBc0I7RUFDbEIsa0JBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBOztBQUdKLHFCQUFzQixvQkFBb0I7RUFDdEMsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTs7QUFHSixxQkFBc0Isb0JBQW9CO0VBQ3RDLFlBQUE7RUFDQSxxQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTs7QUFHSixxQkFBc0Isb0JBQW9CLGNBQWM7RUFDcEQsd0JBQUE7RUFDQSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTs7QUFJSixxQkFBc0I7RUFDbEIsU0FBQTtFQUNBLHNCQUFBO0VBQ0EsNkJBQUE7O0FBR0oscUJBQXNCO0VBQ2xCLGtCQUFBO0VBQ0Esc0JBQUE7RUFDQSw2QkFBQTtFQUNBLGtCQUFBOztBQUdKLHFCQUFzQixvQkFBbUI7RUFDckMsc0JBQXNCLDBCQUF0QjtFQUNBLDhCQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTs7QUFHSixxQkFBc0I7RUFDbEIsc0JBQUE7RUFDQSx5QkFBQTtFQUNBLG1CQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTs7QUFHSixxQkFBc0IseUJBQXlCO0VBQzNDLHlCQUFBOztBQUdKLHFCQUFzQix5QkFBeUI7RUFDM0MsWUFBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBOztBQUdKLHFCQUFzQixvQkFBbUIsSUFBSSxtQkFBb0IseUJBQXdCLE1BQU87RUFDNUYsbUJBQUE7O0FBR0oscUJBQXNCLG9CQUFvQixvQkFBb0I7RUFDMUQsc0JBQUE7RUFDQSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTs7QUFHSixxQkFBc0Isb0JBQW9CLG9CQUFvQixFQUFDO0VBQzNELGlCQUFBOztBQUdKLHFCQUFzQixvQkFBb0Isb0JBQW9CLEVBQUM7RUFDM0QsV0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBOztBQUdKLHFCQUFzQixvQkFBb0Isb0JBQW9CLEVBQUM7RUFDM0QsY0FBQTs7QUFHSixxQkFBc0Isb0JBQW9CLHlCQUF5QixvQkFBb0I7RUFDbkYsWUFBWSxtREFBWjtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0VBQ0EsZ0JBQWdCLDBEQUFoQjtFQUNBLFdBQUE7O0FBR0oscUJBQXNCO0VBQ2xCLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBOztBQUdKLHFCQUFzQixvQkFBbUI7RUFDckMsNkJBQUE7O0FBR0oscUJBQXNCLHlCQUF5QjtFQUMzQyxZQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxZQUFBOztBQUdKLHFCQUFzQix5QkFBeUIsaUJBQWdCO0VBQzNELFdBQUE7O0FBR0oscUJBQXNCLG9CQUFtQixpQkFBa0I7RUFDdkQsY0FBQTs7QUFHSixxQkFBc0I7RUFDbEIseUJBQUE7RUFDQSxXQUFBOztBQUdKLHFCQUFzQiwwQkFBMEI7RUFDNUMsdUJBQUE7RUFDQSxrQkFBQTtFQUNBLGNBQUE7RUFDQSxzQkFBQTs7QUFHSixxQkFBc0IsMEJBQTBCLGlCQUFnQixVQUFVO0FBQzFFLHFCQUFzQiwwQkFBMEIsaUJBQWdCLFVBQVUsTUFBTyxvQkFBb0I7RUFDakcseUJBQUE7O0FBR0oscUJBQXNCLDBCQUEwQixpQkFBaUI7RUFDN0QsU0FBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTs7QUFHSixxQkFBc0IsMEJBQTBCLGlCQUFpQixpQkFBaUI7RUFDOUUsc0JBQUE7RUFDQSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTs7QUFHSixxQkFBc0IsMEJBQTBCLGlCQUFpQixpQkFBaUIsRUFBQztFQUMvRSxjQUFBOztBQUdKLHFCQUFzQiwwQkFBMEIsaUJBQWdCLGlCQUFrQjtFQUM5RSxhQUFBOztBQUdKLHFCQUFzQiwwQkFBMEIsaUJBQWdCLGNBQWU7RUFDM0UsYUFBQTs7QUFPSixxQkFBc0IsaUJBQWdCO0VBQ2xDLDhCQUFBOztBQUdKLHFCQUFzQixpQkFBZ0Isd0JBQXlCO0VBQzNELHNCQUFzQixvQ0FBdEI7RUFDQSxtQkFBQTs7QUFHSixxQkFBc0IsaUJBQWlCO0VBQ25DLGtCQUFBOztBQU1KLHFCQUFzQjtFQUNsQixpQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTs7QUFHSixxQkFBc0IsaUJBQWdCLElBQUksZ0JBQWdCLE1BQU8saUJBQWlCO0VBQzlFLG1CQUFBOztBQUdKLHFCQUFzQiwwQkFBMEIsaUJBQWdCLElBQUksZ0JBQWlCO0VBQ2pGLHFCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxZQUFZLG1EQUFaO0VBQ0EsbUJBQUE7O0FBR0oscUJBQXNCLDBCQUEwQixpQkFBaUIsZUFBZTtFQUM1RSxZQUFBOztBQUdKLHFCQUFzQiwwQkFBMEIsaUJBQWdCLElBQUksZ0JBQWdCLE1BQU8sZUFBZTtFQUN0RyxVQUFBOztBQUdKLHFCQUFzQixtQkFBbUIsUUFBTyxpQkFBaUI7RUFDN0QsU0FBUyxPQUFUOztBQUdKLHFCQUFzQixpQkFBaUIsUUFBTyxpQkFBaUI7RUFDM0QsU0FBUyxPQUFUOztBQUdKLHFCQUFzQixpQkFBZ0IsWUFBYTtFQUMvQyxXQUFBOztBQUdKLHFCQUFzQiwwQkFBMEIsaUJBQWdCO0FBQ2hFLHFCQUFzQiwwQkFBMEIsaUJBQWdCLE1BQU8sTUFBSztFQUN4RSx5QkFBQTs7QUFHSixxQkFBc0IsaUJBQWlCO0VBQ25DLFdBQUE7RUFDQSxZQUFBO0VBQ0EscUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsY0FBQTs7QUFHSixxQkFBc0IsaUJBQWdCLE9BQVEsTUFBSztFQUMvQyxjQUFBOztBQU9KLHFCQUFzQixpQkFBaUIsTUFBSztFQUN4QyxXQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxXQUFBO0VBQ0Esc0JBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7O0FBR0oscUJBQXNCO0VBQ2xCLFlBQUE7RUFDQSxnQkFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTs7QUFHSixxQkFBc0IsMEJBQTBCLGlCQUFpQixNQUFLLGFBQWE7QUFDbkYscUJBQXNCLE1BQUs7RUFDdkIsV0FBQTs7QUFHSixxQkFBc0IsaUJBQWlCO0VBQ25DLFdBQUE7RUFDQSxtQkFBQTs7QUFHSixnQkFBaUI7RUFDYixXQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0VBQ0EscUJBQUE7RUFDQSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsNkJBQUE7O0FBR0oscUJBQXNCLGlCQUFpQixrQkFBaUIsYUFBYTtFQUNqRSxTQUFTLE9BQVQ7O0FBR0oscUJBQXNCLGlCQUFpQixrQkFBaUIsZUFBZTtFQUNuRSxTQUFTLE9BQVQ7O0FBT0oscUJBQXNCLGlCQUFpQjtFQUNuQyxZQUFBOztBQUdKLFVBQVc7RUFDUCxrQkFBQTs7QUFHSixZQUFhO0FBQ2IsWUFBYTtBQUNiLFlBQWE7RUFDVCxhQUFBOztBQU9KLFlBQWE7RUFDVCxTQUFBO0VBQ0EsVUFBQTs7QUFHSixZQUFhO0VBQ1QsU0FBQTs7QUFHSjtFQUNJLGtCQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7O0FBR0osWUFBWTtFQUNSLGVBQUE7RUFDQSxTQUFBO0VBQ0EsY0FBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTs7QUFHSixZQUFZLE1BQU07RUFDZCxVQUFBOztBQUdKO0VBQ0ksWUFBQTtFQUNBLG1CQUFBOztBQUdKLFVBQVcsR0FBRTtFQUNULFVBQUE7O0FBR0osZUFBZ0I7RUFDWixhQUFBO0VBQ0EscUJBQUE7RUFDQSw0QkFBQTtFQUNBLHFCQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBOztBQUdKO0VBQ0ksb0JBQUE7O0FBREosd0JBRUk7RUFDSSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0VBQ0EsV0FBQTs7QUFOUix3QkFRSTtFQUNJLDhCQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBOztBQUNBLHdCQUxKLEtBS0s7RUFDRyxTQUFTLEVBQVQ7RUFDQSxjQUFBO0VBQ0EsV0FBQTs7QUFoQlosd0JBbUJJO0VBQ0ksV0FBQTtFQUNBLFdBQUE7O0FBckJSLHdCQW1CSSxhQUdJO0VBQ0ksZUFBQTtFQUNBLFlBQUE7O0FBeEJaLHdCQW1CSSxhQU9JO0VBQ0ksV0FBQTs7QUEzQlosd0JBOEJJO0VBQ0ksV0FBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0EsT0FBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7O0FBekNSLHdCQTJDSTtFQUNJLGlCQUFBOztBQTVDUix3QkE4Q0ksS0FBSztFQUNELGVBQUE7RUFDQSxnQkFBQTs7QUFJUix3QkFBeUI7RUFDckIsYUFBQTs7QUFHSix3QkFBeUI7RUFDckIsc0JBQUE7RUFDQSxjQUFBO0VBQ0EsV0FBQTs7QUFHSixpQkFBa0I7RUFDZCxxQkFBQTtFQUNBLGlCQUFBOztBQUdKLGdCQUFpQixHQUFFO0VBQ2YsYUFBQTs7QUFHSixnQkFBaUIsTUFBSztFQUNsQixZQUFBOztBQUdKO0VBQ0kseUJBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7O0FBT0o7RUFDSSwwQkFBQTtFQUNBLGNBQUE7O0FBR0o7RUFDSSxrQkFBQTs7QUFESixnQ0FFSTtFQUNJLGFBQUE7RUFDQSxrQkFBQTtFQUNBLFFBQUE7RUFDQSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFQUNBLFVBQUE7RUFDQSxpQkFBQTs7QUFWUixnQ0FFSSxLQVNJO0VBQ0ksU0FBQTtFQUNBLG1CQUFBOztBQWJaLGdDQUVJLEtBU0ksS0FHSTtFQUNJLDBCQUFBOztBQU1oQixFQUFFLGlCQUFrQixpQ0FBZ0MsTUFBTztBQUMzRCxFQUFFLGlCQUFpQixNQUFPLGlDQUFpQztFQUN2RCxxQkFBQTtFQUNBLDhCQUFBOztBQUdKLGdDQUFnQyxNQUFPLE9BQU07QUFDN0MsRUFBRSxNQUFPLGlDQUFpQyxPQUFNO0VBQzVDLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxVQUFBO0VBQ0Esa0JBQUE7O0FBR0osZ0NBQWdDLE1BQU8sT0FBTSxpQkFBaUI7RUFDMUQsU0FBUyxFQUFUO0VBQ0EsMkJBQUE7RUFDQSxrQkFBQTtFQUNBLFFBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7RUFDQSxRQUFBO0VBQ0EsaUJBQUE7O0FBR0osZ0NBQWlDLE9BQU07QUFDdkMsZ0NBQWlDLEdBQUUsTUFBTyxLQUFJO0FBQzlDLGdDQUFpQyxHQUFHLEtBQUksaUJBQWlCO0VBQ3JELGNBQUE7O0FBR0o7RUFDSSxjQUFBOztBQVFKLG9CQUNJO0FBREosb0JBRUk7RUFDSSxZQUFBO0VBQ0EsaUJBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBtZXRhIGJveCBjb3Vyc2UgKi9cbi5yd21iLWR1cmF0aW9uLXdyYXBwZXIgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4ucndtYi1kdXJhdGlvbi13cmFwcGVyIHNlbGVjdCB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuI2xlYXJuLXByZXNzLXRvZ2dsZS1jb3Vyc2UtcmVzdWx0c3tcblx0ZGlzcGxheTogYmxvY2s7bWFyZ2luLWJvdHRvbToxMHB4O1xuXHRhe2JveC1zaGFkb3c6IG5vbmU7fVxufVxuLnBvc3QtdHlwZS1scF9jb3Vyc2Uge1xuICAgICNwb3N0ZGl2cmljLFxuICAgICNzdWJtaXRwb3N0IHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIH1cbn1cblxuI2xlYXJuLXByZXNzLXJldmlldy1tZXNzYWdlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgID4gaDQge1xuICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgfVxuICAgID4gdGV4dGFyZWEge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDBweDtcbiAgICB9XG4gICAgLmxwLXBlbmRpbmctcmV2aWV3LW1lc3NhZ2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjYzQ0O1xuICAgICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgIG1hcmdpbjogLTEwcHggLTEwcHggMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0ge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBtYXJnaW46IDIwcHggMDtcbn1cblxuLnBvc3QtdHlwZS1scF9jb3Vyc2Uge1xuICAgICYgLmNvbHVtbi1wcmljZSwgJiAuY29sdW1uLXN0dWRlbnRzIHtcbiAgICAgICAgd2lkdGg6IDEwJTtcbiAgICB9XG5cbiAgICAjbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtaXRlbS1lbXB0eSB0ZC5zZWN0aW9uLWl0ZW0taW5wdXQge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG4gICAgICAgICYuaG92ZXIge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnR5cGUtbHBfY291cnNlIHtcblxuICAgICAgICAmLnN0YXR1cy1wZW5kaW5nIHtcbiAgICAgICAgICAgIC5yb3ctYWN0aW9ucyAudmlldyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0taGVhZGluZyB7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1oZWFkaW5nIC5kZXNjcmlwdGlvbiB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBjb2xvcjogIzk5OTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDkwJTtcbiAgICBtYXJnaW4tdG9wOiAxMHB4Oztcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLWhlYWRpbmcgLml0ZW1zLXRvZ2dsZSB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbjogLTMzcHggN3B4IDAgMDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0taGVhZGluZyAuaXRlbXMtdG9nZ2xlIGEge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBmb250LXNpemU6IDMycHg7XG5cbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb25zIHtcbiAgICBtYXJnaW46IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24ge1xuICAgIG1hcmdpbjogLTFweCAwIDAgMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREREO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24udWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uL2ltYWdlcy9zdHJpcGUucG5nXCIpO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWhlYWQge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogIzc3NztcbiAgICBwYWRkaW5nOiAzcHggMjBweDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taGVhZCBpbnB1dCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taGVhZCAubHAtc2VjdGlvbi1hY3Rpb25zIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luOiAxNHB4IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb246bm90KC5scC1lbXB0eS1zZWN0aW9uKSAuY3VycmljdWx1bS1zZWN0aW9uLWhlYWQ6aG92ZXIgLmxwLXNlY3Rpb24tYWN0aW9ucyB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24gLmxwLXNlY3Rpb24tYWN0aW9ucyBhIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtc2VjdGlvbi1hY3Rpb25zIGFbZGF0YS1hY3Rpb249XCJleHBhbmRcIl0ge1xuICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtc2VjdGlvbi1hY3Rpb25zIGE6YmVmb3JlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgZm9udC1zaXplOiAyNHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtc2VjdGlvbi1hY3Rpb25zIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjMDBhMGQyO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAuY3VycmljdWx1bS1zZWN0aW9uLWhlYWQgLmxwLXNlY3Rpb24tYWN0aW9ucyAubW92ZSB7XG4gICAgY3Vyc29yOiB1cmwoXCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL29wZW5oYW5kLmN1clwiKSA3IDUsIGRlZmF1bHQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtMTVweDtcbiAgICBoZWlnaHQ6IDU3cHg7XG4gICAgdG9wOiAtMTVweDtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2dyaXBweV9sYXJnZS5wbmdcIikgcmlnaHQgbm8tcmVwZWF0O1xuICAgIHdpZHRoOiAyMHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1jb250ZW50IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi51aS1zb3J0YWJsZS1oZWxwZXIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREREO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1oZWFkIC5scC1zZWN0aW9uLW5hbWUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIHdpZHRoOiA3MCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgaGVpZ2h0OiA1MHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1oZWFkIC5scC1zZWN0aW9uLW5hbWU6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi5scC1lbXB0eS1zZWN0aW9uIC5jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudCB7XG4gICAgX2Rpc3BsYXk6IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtIHtcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgI0RERDtcbiAgICBtYXJnaW46IC0xcHggMCAwIDA7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpudGgtY2hpbGQoMm4rMSksXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtOm50aC1jaGlsZCgybisxKSAuc2VjdGlvbi1pdGVtLWlucHV0IGlucHV0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGQ0ZDO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtIC5scC1pdGVtLWFjdGlvbnMge1xuICAgIG1hcmdpbjogMDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtIC5scC1pdGVtLWFjdGlvbnMgYSB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBjb2xvcjogIzY2NjtcbiAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIC5scC1zZWN0aW9uLWl0ZW0gLmxwLWl0ZW0tYWN0aW9ucyBhOmhvdmVyIHtcbiAgICBjb2xvcjogIzAwYTBkMjtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbVtkYXRhLWl0ZW1faWQ9XCJcIl0gLmxwLWVkaXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIC5scC1zZWN0aW9uLWl0ZW0ubHAtaXRlbS1lbXB0eSAubHAtaXRlbS1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS51aS1zb3J0YWJsZS1oZWxwZXIgdGQge1xuXG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHRkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3N0cmlwZS5wbmdcIik7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1pdGVtLWFjdGlvbnMgPiAqIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1hY3Rpb25zID4gYSB7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuaXRlbS1idWxrLWFjdGlvbnMge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW06bm90KC5scC1pdGVtLWVtcHR5KTpob3ZlciAubHAtaXRlbS1hY3Rpb25zID4gKiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpub3QoLmxwLWl0ZW0tZW1wdHkpIC5pdGVtLWNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAzNHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICAgIG1hcmdpbjogMCA0cHggMCAxMHB4O1xuICAgIGN1cnNvcjogdXJsKFwiLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9vcGVuaGFuZC5jdXJcIikgNyA1LCBkZWZhdWx0O1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIC5scC1zZWN0aW9uLWl0ZW0gLml0ZW0tY2hlY2tib3ggaW5wdXQge1xuICAgIG9wYWNpdHk6IDAuNDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpub3QoLmxwLWl0ZW0tZW1wdHkpOmhvdmVyIC5pdGVtLWNoZWNrYm94IGlucHV0IHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWl0ZW0tbHBfbGVzc29uIC5oYW5kbGUubGVhcm4tcHJlc3MtaWNvbjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTAwXCI7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1scF9xdWl6IC5oYW5kbGUubGVhcm4tcHJlc3MtaWNvbjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTAxXCI7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLmxwLWl0ZW0tbmV3IC5oYW5kbGUge1xuICAgIGNvbG9yOiAjOTk5O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtOmhvdmVyLFxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpob3ZlciBpbnB1dC5scC1pdGVtLW5hbWUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtIC5oYW5kbGUge1xuICAgIHdpZHRoOiAzMnB4O1xuICAgIGhlaWdodDogMzJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIGNvbG9yOiAjMDBBMEQyO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5yZW1vdmUgaW5wdXQubHAtaXRlbS1uYW1lIHtcbiAgICBjb2xvcjogI0ZGMDAwMDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0udWktc29ydGFibGUtaGVscGVyIHtcblxufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbSBpbnB1dC5scC1pdGVtLW5hbWUge1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24tZGVzY3JpYmUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGNvbG9yOiAjOTk5O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB3aWR0aDogODAlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctbGVmdDogMDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbSBpbnB1dC5scC1pdGVtLW5hbWU6Zm9jdXMsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gaW5wdXQ6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbSAuc2VjdGlvbi1pdGVtLWljb24ge1xuICAgIHdpZHRoOiAzMnB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5scC1zZWN0aW9uLWl0ZW0gLmxlYXJuLXByZXNzLWljb24ge1xuICAgIHdpZHRoOiAzMnB4O1xuICAgIGhlaWdodDogMzJweDtcbiAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIGNvbG9yOiAjREREO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0gLmxlYXJuLXByZXNzLWljb24uaXRlbS1scF9xdWl6OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXGY0NjlcIjtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0gLmxlYXJuLXByZXNzLWljb24uaXRlbS1scF9sZXNzb246YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZjMzMFwiO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbSAubGVhcm4tcHJlc3MtaWNvbi5pdGVtLXNlbGVjdGVkLFxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW1bZGF0YS1pdGVtX2lkPVwiXCJdIC5sZWFybi1wcmVzcy1pY29uOmhvdmVyIHtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0gdGQge1xuICAgIGhlaWdodDogMzBweDtcbn1cblxuI3Bvc3RzdHVmZiAucG9zdGJveC1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2NvdXJzZV90YWJzIC5oYW5kbGVkaXYsXG4jY291cnNlX3RhYnMgLmhuZGxlLFxuI2NvdXJzZV90YWJzIC5yd21iLWxhYmVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jY291cnNlX3RhYnMgLnJ3bWItaW5wdXQge1xuXG59XG5cbiNjb3Vyc2VfdGFicyAuaW5zaWRlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuI2NvdXJzZV90YWJzIC5yd21iLWNvdXJzZV90YWJzLXdyYXBwZXIge1xuICAgIG1hcmdpbjogMDtcbn1cblxuI2NvdXJzZV90YWJzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbn1cblxuI2NvdXJzZV90YWJzLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAzMHB4O1xuICAgIHotaW5kZXg6IDEwMDAwO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBsZWZ0OiAxODJweDtcbiAgICByaWdodDogMzIwcHg7XG59XG5cbiNjb3Vyc2VfdGFicy5maXhlZDpob3ZlciB7XG4gICAgb3BhY2l0eTogMTtcbn1cblxuI2NvdXJzZV90YWJzX3BsYWNlaG9sZGVyIHtcbiAgICBoZWlnaHQ6IDQxcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuI3Bvc3RzdHVmZiBoMyNjb3Vyc2UtdGFicy1oMyB7XG4gICAgcGFkZGluZzogMDtcbn1cblxuI2NvdXJzZS10YWJzLWgzID4gYSB7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0RERDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgX2NvbG9yOiAjQUFBO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5sZWFybi1wcmVzcy1yZXZpZXctbG9ncyB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgLnJldmlldy1tZXNzYWdlIHtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgICBjb2xvcjogIzk5OTtcbiAgICB9XG4gICAgPiBsaSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI0RERDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnJldmlldy11c2VyIHtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBpbWcge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB9XG4gICAgICAgID4gKiB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAucmV2aWV3LWluZGV4IHtcbiAgICAgICAgd2lkdGg6IDQ2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTExcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNEREQ7XG4gICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICAgIGNvbG9yOiAjQ0NDO1xuICAgIH1cbiAgICAucmV2aWV3LWNvbnRlbnQge1xuICAgICAgICBtYXJnaW4tbGVmdDogNjhweDtcbiAgICB9XG4gICAgPiBsaSAubHAtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgfVxufVxuXG4ucndtYi1jdXJyaWN1bHVtLXdyYXBwZXIgLnJ3bWItbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5yd21iLWN1cnJpY3VsdW0td3JhcHBlciAucndtYi1pbnB1dCB7XG4gICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbm9uZTtcbn1cblxuLmNvbHVtbi1scF9jb3Vyc2UgLnJvdy1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbi5scC1tb2RhbC1zZWFyY2ggbGkuc2VsZWN0ZWQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5scC1zZWFyY2gtaXRlbXMgaW5wdXRbbmFtZT1cImxwLWl0ZW0tbmFtZVwiXSB7XG4gICAgd2lkdGg6IDM1MHB4O1xufVxuXG4ubHAtbW9kYWwtc2VhcmNoIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4ubHAtbW9kYWwtc2VhcmNoIHVsIHtcblxufVxuXG4ubHAtaGlnaGxpZ2h0LWNvbG9yIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBjb2xvcjogIzAwYTBkMjtcbn1cblxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICA+IHVsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgICAgICA+IGxpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxudHJbZGF0YS1pdGVtX2lkPVwiXCJdIC5sZWFybi1wcmVzcy1kcm9wZG93bi1pdGVtLXR5cGVzOmhvdmVyID4gdWwsXG50cltkYXRhLWl0ZW1faWQ9XCJcIl0uZm9jdXMgLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMgPiB1bCB7XG4gICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXM6aG92ZXIgPiBzcGFuLmxlYXJuLXByZXNzLWljb24sXG50ci5mb2N1cyAubGVhcm4tcHJlc3MtZHJvcGRvd24taXRlbS10eXBlcyA+IHNwYW4ubGVhcm4tcHJlc3MtaWNvbiB7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICBib3JkZXItY29sb3I6ICNEREQ7XG4gICAgei1pbmRleDogNTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5sZWFybi1wcmVzcy1kcm9wZG93bi1pdGVtLXR5cGVzOmhvdmVyID4gc3Bhbi5sZWFybi1wcmVzcy1pY29uOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNFRUU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XG59XG5cbi5sZWFybi1wcmVzcy1kcm9wZG93bi1pdGVtLXR5cGVzID4gc3Bhbi5sZWFybi1wcmVzcy1pY29uLFxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMgbGk6aG92ZXIgc3Bhbi5sZWFybi1wcmVzcy1pY29uLFxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMgbGkgc3Bhbi5sZWFybi1wcmVzcy1pY29uLml0ZW0tc2VsZWN0ZWQge1xuICAgIGNvbG9yOiAjMDA4NWJhO1xufVxuXG4ubGVhcm4tcHJlc3MtY291cnNlLWF0dHJpYnV0ZXMge1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIC5jb3Vyc2UtYXR0cmlidXRlLXRheG9ub215IHtcbiAgICAgICAgbGkge1xuXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5wb3N0LXR5cGUtbHBfY291cnNlIHtcbiAgICAjc3dpdGNoLWNvdXJzZS10YWJzLFxuICAgICN0b2dnbGUtbWV0YS1ib3hlcyB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgfVxufVxuXG4vKlxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jb3Vyc2UtY3VycmljdWx1bS10b2dnbGV7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0ZmxvYXQ6IHJpZ2h0O1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1pdGVtLW5hbWV7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAjQkJCO1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW06aG92ZXIsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5ob3Zlcntcblx0YmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLmxwLWl0ZW0tbHBfbGVzc29uIC5oYW5kbGU6YWZ0ZXJ7XG5cdGNvbnRlbnQ6IFwiXFxmNDk3XCI7XG59XG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5scC1pdGVtLWxwX3F1aXogLmhhbmRsZTphZnRlcntcblx0Y29udGVudDogXCJcXGYxMzBcIjtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtOmhvdmVyIC5scC1pdGVtLW5hbWUsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5ob3ZlciAubHAtaXRlbS1uYW1le1xuXHRib3JkZXI6IDFweCBzb2xpZCAjREREO1xuXHRjb2xvcjogIzMyMzczYztcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1lbXB0eSAubHAtc2VjdGlvbi1pdGVtc3tcblx0ZGlzcGxheTogbm9uZTtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtIC5scC1pdGVtLWFjdGlvbnN7XG5cdGZsb2F0OiByaWdodDtcblx0bWFyZ2luLWxlZnQ6IDVweDtcblx0bWFyZ2luLXRvcDogM3B4O1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1pdGVtLWVtcHR5IC5scC1pdGVtLWFjdGlvbnMsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24tZW1wdHkgLmxwLXNlY3Rpb24taGVhZCAubHAtYWN0aW9uLFxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWVtcHR5IC5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudCB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWl0ZW0tZW1wdHl7XG5cdGN1cnNvcjogZGVmYXVsdDtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1uZXd7XG5cdGJvcmRlci1jb2xvcjogIzAwQTBEMjtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1uZXcgLmxwLWl0ZW0tbmFtZXtcblx0Ym9yZGVyLWNvbG9yOiAjMDBBMEQyO1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWhlYWR7XG5cdHBhZGRpbmc6IDA7XG59XG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiAubHAtdG9nZ2xlIGk6YmVmb3Jle1xuXHRjb250ZW50OiAnXFxmMTMyJztcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uLm9wZW4gLmxwLXRvZ2dsZSBpOmJlZm9yZXtcblx0Y29udGVudDogJ1xcZjQ2MCc7XG59XG4ubHAtbW9kYWwtc2VhcmNoe1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGRkY7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG5cdGJvcmRlci10b3A6IG5vbmU7XG5cdHotaW5kZXg6IDk5OTk7XG5cdG1hcmdpbjogLTFweCAwIDAgMXB4O1xufVxuLmxwLW1vZGFsLXNlYXJjaCB1bHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xufVxuLmxwLW1vZGFsLXNlYXJjaCB1bCBsaXtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogNXB4O1xuXHRtYXJnaW46IDA7XG59XG4ubHAtbW9kYWwtc2VhcmNoIGxpLmhpZ2hsaWdodGluZyxcbi5scC1tb2RhbC1zZWFyY2ggbGk6aG92ZXJ7XG5cdGJhY2tncm91bmQtY29sb3I6ICNFQUVBRUE7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cbi5scC1oaWdobGlnaHQtY29sb3J7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxwLXNlYXJjaC1uby1yZXN1bHRze1xuXHRkaXNwbGF5OiBub25lO1xufVxuLmxwLWN1cnJpY3VsdW0tc2VjdGlvbnMgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVye1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG5cdGJvcmRlcjogMnB4IGRhc2hlZCAjREREO1xufVxuLmxwLWN1cnJpY3VsdW0tc2VjdGlvbnMgLmxwLXNvcnRpbmd7XG5cdGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufVxuKi9cbi8qXG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bXt9XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbnN7XG5cbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9ue1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuXHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXHRib3JkZXI6IDFweCBzb2xpZCAjREREO1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24ubHAtc2VsZWN0ZWQgLmxwLWN1cnJpY3VsdW0tc2VjdGlvbi1jb250ZW50e1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudCA+IHB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uLmxwLXNlbGVjdGVkID4gaDN7XG5cdF9ib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDN7XG5cdHBhZGRpbmc6IDEwcHggO1xuXHRtYXJnaW46IDA7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG5cdGhlaWdodDogNjJweDtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRjdXJzb3I6IG1vdmU7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scC1zZWN0aW9uLW5hbWUtd3JhcHBlcntcblx0dG9wOiA5cHg7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzID4gc3BhbiA+IGlucHV0e1xuXHRib3JkZXI6IDFweCBzb2xpZCAjREREO1xuXHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdGZvbnQtc2l6ZTogMjRweDtcblx0d2lkdGg6IDEwMCU7XG5cdGNvbG9yOiAjNzc3O1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24gPiBoMyA+IHNwYW4ubHAtc2VjdGlvbi1uYW1lLXdyYXBwZXJ7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRyaWdodDogMTM3cHg7XG5cdGxlZnQ6IDcxcHg7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scC1hY3Rpb257XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGhlaWdodDogNjJweDtcblx0d2lkdGg6IDYycHg7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0RERDtcblx0LXRvcDogLThweDtcblx0LXJpZ2h0OiAtMTFweDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRmbG9hdDogcmlnaHQ7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scC1hY3Rpb24ubHAtc29ydHtcblx0ZGlzcGxheTogbm9uZTtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbiAuZGFzaGljb25ze1xuXHRmb250LXNpemU6IDMycHg7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGxpbmUtaGVpZ2h0OiA2MnB4O1xuXHRjb2xvcjogIzAwNzNhYTtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbjpob3ZlciAuZGFzaGljb25ze1xuXHRjb2xvcjogIzAwOUVENztcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbi5scC10b2dnbGV7XG5cdF9yaWdodDogNjJweDtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbi5scC1yZW1vdmV7XG5cdF9yaWdodDogMTI0cHg7XG59XG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uLmNsb3NlZCAubHAtY3VycmljdWx1bS1zZWN0aW9uLWNvbnRlbnR7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAuc29ydGluZyAudWktc29ydGFibGUtaGVscGVyIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudHtcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5zb3J0aW5nIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcixcbi5scC1zZWN0aW9uLWl0ZW1zLnNvcnRpbmcgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVye1xuXHRib3JkZXI6IDNweCBkYXNoZWQgI0RERDtcblx0dmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLnNvcnRpbmcgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyOmFmdGVyLFxuLmxwLXNlY3Rpb24taXRlbXMuc29ydGluZyAudWktc29ydGFibGUtcGxhY2Vob2xkZXI6YWZ0ZXJ7XG5cdGNvbnRlbnQ6ICcnO1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDBweDtcblx0aGVpZ2h0OiAwcHg7XG5cdGJvcmRlcjogMjhweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Ym9yZGVyLWxlZnQtY29sb3I6ICM5OTk7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRsZWZ0OiAtMzNweDtcblxufVxuXG4ubHAtc2VjdGlvbi1pdGVtcy5zb3J0aW5nIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcjphZnRlcntcblx0Ym9yZGVyLXdpZHRoOiAxNXB4O1xuXHRsZWZ0OiAtMjBweDtcbn1cbi5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudHtcblx0YmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcblx0X2JvcmRlci1ib3R0b206IDJweCBkYXNoZWQgI0RERDtcblx0cGFkZGluZzogMjBweDtcblx0bWFyZ2luLWJvdHRvbTogMHB4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0RERDtcbn1cbi5scC1keW5hbWljLWZvcm17XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cGFkZGluZzogMHB4O1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblx0ei1pbmRleDogMjEwO1xuXHRcdGhlaWdodDogMTVweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5scC1jb250YWluZXItZHJvcGRvd257XG5cdGhlaWdodDogMTVweDtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5scC1jb250YWluZXItZHJvcGRvd24gPiBhe1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGRkYgIWltcG9ydGFudDtcbn1cbi5scC1jb250YWluZXItZHJvcGRvd24uc2VsZWN0Mi1kcm9wLWFib3ZlID4gYXtcblx0aGVpZ2h0OiAzcHg7XG59XG4ubHAtc2VsZWN0LWRyb3Bkb3due1xuXHRtYXJnaW4tdG9wOiAtNnB4O1xufVxuLmxwLXNlbGVjdC1kcm9wZG93bi5zZWxlY3QyLWRyb3AtYWJvdmV7XG5cdHBhZGRpbmctYm90dG9tOiAwO1xufVxuXG4ubHAtZW1wdHkgLmxwLWN1cnJpY3VsdW0tc2VjdGlvbi1jb250ZW50e1xuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5scC1zZWN0aW9uLWl0ZW1ze1xuXHRtaW4taGVpZ2h0OiAyMHB4O1xuXG5cbn1cbi5scC1zZWN0aW9uLWl0ZW1zID4gbGl7XG5cdHBhZGRpbmc6IDVweDtcblx0Ym9yZGVyOjFweCBkYXNoZWQgI0RERDtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcblx0Y3Vyc29yOiBtb3ZlO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubHAtc2VjdGlvbi1pdGVtcyA+IGxpIC5scC10aXRsZXtcblx0Y3Vyc29yOiBhdXRvO1xuXHRwYWRkaW5nOiAzcHggNXB4O1xuXHRib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHR3aWR0aDogODAlO1xuXHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblxufVxuLmxwLXNlY3Rpb24taXRlbXMgPiBsaTpob3ZlciAubHAtdGl0bGUge1xuXHRib3JkZXItY29sb3I6ICNEREQ7XG5cdGN1cnNvcjogdGV4dDtcbn1cbi5scC1zZWN0aW9uLWl0ZW1zID4gbGkgaW5wdXR7XG5cdHdpZHRoOiA3MCU7XG59XG5cbi5scC1zZWN0aW9uLWl0ZW1zID4gbGk6aG92ZXJ7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubHAtc2VjdGlvbi1pY29ue1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDowO1xuXHRsZWZ0OjA7XG5cdHdpZHRoOiA2MnB4O1xuXHRoZWlnaHQ6IDYycHg7XG5cdGxpbmUtaGVpZ2h0OiA1NHB4O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjREREO1xuXHR0ZXh0LWFsaWduOmNlbnRlcjtcbn1cbi5scC1zZWN0aW9uLWljb24gaXtcblx0aGVpZ2h0OiA2MHB4O1xuXHRsaW5lLWhlaWdodDogNjBweDtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAuZGFzaGljb25ze1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uc2VsZWN0Mi1kcm9wLnNlbGVjdDItZHJvcC1hY3RpdmV7XG5cdHBhZGRpbmc6IDVweCAxMHB4O1xufVxuXG4ucndtYi1jb3Vyc2VfbGVzc29uX3F1aXotd3JhcHBlciAucndtYi1sYWJlbHsgZGlzcGxheTogbm9uZTt9XG4ucndtYi1jb3Vyc2VfbGVzc29uX3F1aXotd3JhcHBlciAucndtYi1pbnB1dHsgZmxvYXQ6IG5vbmU7IHdpZHRoOiBhdXRvOyBkaXNwbGF5OiBibG9jazt9XG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bS10b2dnbGV7XG5cbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bS10b2dnbGUgLmV4cGFuZHtcblx0ZGlzcGxheTogbm9uZTtcbn0qLyJdLCJmaWxlIjoiYWRtaW4vbWV0YS1ib3gtY291cnNlLmNzcyJ9 */
assets/css/admin/meta-box-order.css CHANGED
@@ -1,149 +1,151 @@
1
-
2
- /* admin order details */
3
- .column-order_date,
4
- .column-order_total,
5
- .column-order_status,
6
- .post-type-lp_order .column-title{
7
- width: 10%;
8
- }
9
- .post-type-lp_order .column-order_student{
10
- width: 12%;
11
- }
12
- .post-type-lpr_order #post-body-content,
13
- .post-type-lpr_order #postbox-container-1,
14
- #order_details .ui-sortable-handle,
15
- #order_details .handlediv {
16
- display: none !important;
17
- }
18
-
19
- #order_details .inside {
20
- padding: 20px;
21
- margin: 0;
22
- }
23
-
24
- #order_details .order-user-avatar {
25
- float: left;
26
- margin-right: 20px;
27
- }
28
-
29
- #order_details .order-user-meta {
30
- float: left;
31
- }
32
-
33
- #order_details .order-items table {
34
- width: 100%;
35
- border-collapse: collapse;
36
- margin-top: 20px;
37
- }
38
-
39
- #order_details .order-items table tr {
40
- border-bottom: 1px solid #EEE;
41
- }
42
-
43
- #order_details .order-items table thead th {
44
- height: 30px;
45
- text-align: left;
46
- font-size: 16px;
47
- padding: 15px 10px;
48
- }
49
-
50
- #order_details .order-items table td {
51
- padding: 15px 10px;
52
- font-size: 16px;
53
- }
54
-
55
- #order_details .order-items table .align-right {
56
- text-align: right;
57
- }
58
-
59
- #order_details .order-data {
60
- float: right;
61
- }
62
-
63
- #order_details .order-data {
64
- text-align: right;
65
- }
66
-
67
- #order_details .order-data .order-data-number {
68
- font-size: 24px;
69
- font-weight: bold;
70
- margin-bottom: 10px;
71
- }
72
-
73
- #order_details .order-data .order-data-date {
74
- font-size: 14px;
75
- font-style: italic;
76
- margin-bottom: 5px;
77
- }
78
-
79
- #order_details .order-data .order-data-payment-method {
80
- font-size: 16px;
81
- font-weight: bold;
82
- margin: 5px 0;
83
- }
84
-
85
- #order_details .order-data .order-data-status {
86
- border-radius: 3px;
87
- padding: 2px 5px;
88
- display: inline-block;
89
- color: #FFF;
90
- font-size: 12px;
91
-
92
- }
93
-
94
- #order_details .order-data .order-data-status.completed {
95
- background-color: #006400;
96
- }
97
-
98
- #order_details .order-data .order-data-status.pending {
99
- background-color: #CCCCCC;
100
- }
101
-
102
- #order_details .total {
103
- font-weight: bold;
104
- font-size: 16px;
105
- }
106
- /*************************************************************/
107
- .post-type-lpr_order .column-title {
108
- width: 120px;
109
- }
110
-
111
- .post-type-lpr_order .column-order_student {
112
- width: 100px;
113
- }
114
-
115
- .post-type-lpr_order .column-order_date {
116
- width: 150px;
117
- }
118
-
119
- .post-type-lpr_order .column-order_total {
120
- width: 100px;
121
- text-align: right;
122
- }
123
-
124
- .post-type-lpr_order .column-order_status {
125
- width: 100px;
126
- }
127
- .post-type-lp_order #minor-publishing-actions,
128
- .post-type-lp_order #submitdiv .handlediv{
129
- display: none;
130
- }
131
-
132
- .order-status-description {
133
- font-size: smaller;
134
- background: #CEE8FF;
135
- padding: 5px;
136
- font-style: italic;
137
- color: #848484;
138
- position: relative;
139
- margin-top: 10px;
140
- border-radius: 3px;
141
- }
142
-
143
- .order-status-description:before {
144
- content: '';
145
- border: 5px solid transparent;
146
- border-bottom-color: #CEE8FF;
147
- position: absolute;
148
- top: -10px;
149
- }
 
 
1
+ /* admin order details */
2
+ .column-order_date,
3
+ .column-order_total,
4
+ .column-order_status,
5
+ .post-type-lp_order .column-title {
6
+ width: 10%;
7
+ }
8
+ .post-type-lp_order .column-order_student {
9
+ width: 12%;
10
+ }
11
+ #order_details .ui-sortable-handle,
12
+ #order_details .handlediv {
13
+ display: none !important;
14
+ }
15
+ #order_details .inside {
16
+ padding: 20px;
17
+ margin: 0;
18
+ }
19
+ #order_details .order-user-avatar {
20
+ float: left;
21
+ margin-right: 20px;
22
+ }
23
+ #order_details .order-user-meta {
24
+ float: left;
25
+ }
26
+ #order_details .order-items table {
27
+ width: 100%;
28
+ border-collapse: collapse;
29
+ margin-top: 20px;
30
+ }
31
+ #order_details .order-items table tr {
32
+ border-bottom: 1px solid #EEE;
33
+ }
34
+ #order_details .order-items table thead th {
35
+ height: 30px;
36
+ text-align: left;
37
+ font-size: 16px;
38
+ padding: 15px 10px;
39
+ }
40
+ #order_details .order-items table td {
41
+ padding: 15px 10px;
42
+ font-size: 16px;
43
+ }
44
+ #order_details .order-items table .align-right {
45
+ text-align: right;
46
+ }
47
+ #order_details .order-data {
48
+ float: right;
49
+ }
50
+ #order_details .order-data {
51
+ text-align: right;
52
+ }
53
+ #order_details .order-data .order-data-number {
54
+ font-size: 24px;
55
+ font-weight: bold;
56
+ margin-bottom: 10px;
57
+ }
58
+ #order_details .order-data .order-data-date {
59
+ font-size: 14px;
60
+ font-style: italic;
61
+ margin-bottom: 5px;
62
+ }
63
+ #order_details .order-data .order-data-payment-method {
64
+ font-size: 16px;
65
+ font-weight: bold;
66
+ margin: 5px 0;
67
+ }
68
+ #order_details .order-data .order-data-status {
69
+ border-radius: 3px;
70
+ padding: 2px 5px;
71
+ display: inline-block;
72
+ color: #FFF;
73
+ font-size: 12px;
74
+ }
75
+ #order_details .order-data .order-data-status.completed {
76
+ background-color: #006400;
77
+ }
78
+ #order_details .order-data .order-data-status.pending {
79
+ background-color: #CCCCCC;
80
+ }
81
+ #order_details .total {
82
+ font-weight: bold;
83
+ font-size: 16px;
84
+ }
85
+ #order_details .avatar-multiple-users{
86
+ width: 120px;
87
+ height: 120px;
88
+ background: #F5F5F5;
89
+ position: relative;
90
+ }
91
+ #order_details .avatar-multiple-users:before,
92
+ #order_details .avatar-multiple-users:after{
93
+ content: "\f110";
94
+ width: 120px;
95
+ height:120px;
96
+ position: absolute;
97
+ top:0;
98
+ left: 0;
99
+ font-family: dashicons;
100
+ font-size: 58px;
101
+ color: #a1adbb;
102
+ text-align: center;
103
+ line-height: 120px;
104
+ }
105
+ #order_details .avatar-multiple-users:before{
106
+ font-size: 48px;
107
+ left: -27px;
108
+ color: #DEDEDE;
109
+ }
110
+ #order_details .avatar-multiple-users span:after{
111
+ font-family: dashicons;
112
+ content: "\f132";
113
+ font-size: 32px;
114
+ top: 0;
115
+ position: absolute;
116
+ width: 120px;
117
+ height: 120px;
118
+ text-align: center;
119
+ line-height: 120px;
120
+ left: 31px;
121
+ color: #a1adbb;
122
+ }
123
+ #order_details .order-users > strong{
124
+ font-weight: bold;
125
+ }
126
+ #order_details .order-users p{
127
+ font-style: italic;
128
+ margin: 5px 0 15px 0;
129
+ }
130
+ #order_details .payment-method-title{
131
+ font-weight: bold;
132
+ }
133
+
134
+
135
+ .order-status-description {
136
+ font-size: smaller;
137
+ background: #CEE8FF;
138
+ padding: 5px;
139
+ font-style: italic;
140
+ color: #848484;
141
+ position: relative;
142
+ margin-top: 10px;
143
+ border-radius: 3px;
144
+ }
145
+ .order-status-description:before {
146
+ content: '';
147
+ border: 5px solid transparent;
148
+ border-bottom-color: #CEE8FF;
149
+ position: absolute;
150
+ top: -10px;
151
+ }
assets/css/admin/meta-box-question.css DELETED
@@ -1,52 +0,0 @@
1
- #question_settings select.lpr-question-types{
2
- margin-left: 20px;
3
- font-weight: normal;
4
- display: none;
5
- font-size: 12px;
6
- padding: 0;
7
- height: auto;
8
- }
9
- .lpr-question-option{
10
- border: 1px solid #DDD;
11
- border-collapse: collapse;
12
- width: 100%;
13
- border-bottom: none ;
14
- position: relative;
15
- }
16
- .lpr-question-option{}
17
- .lpr-question-option th,
18
- .lpr-question-option td{
19
- padding: 5px;
20
- border: 1px solid #DDD;
21
- }
22
- .lpr-question-option thead{
23
- background-color: #F5F5F5;
24
- }
25
- .lpr-question-option thead th{
26
- text-align: left;
27
- padding: 8px 5px;
28
- border: 1px solid #DDD;
29
- }
30
- .lpr-question-option tbody{
31
- position: relative;
32
- }
33
- .lpr-question-option tbody tr{
34
- width: 100%;
35
- background-color: #FFF;
36
- }
37
- .lpr-question-option tbody th{
38
- text-align: left;
39
- padding: 5px;
40
- border: 1px solid #DDD;
41
- width: 25%;
42
- }
43
- .lpr-question-option tbody tr.placeholder td{
44
- border: 1px solid #DDD;
45
- background-color: #DDD;
46
- }
47
- .lpr-question-option tbody tr.ui-sortable-helper{
48
- left: 0;
49
- }
50
- .lpr-question-option input[type="text"] {
51
- width: 100%;
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/learnpress.css CHANGED
@@ -1,3 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  @font-face {
2
  font-family: 'lp-icons';
3
  src: url('../fonts/lp-icons.eot?f41nl');
@@ -153,12 +168,20 @@
153
  .learn-press-courses li.course .course-info > * {
154
  display: block;
155
  }
 
 
 
 
 
 
 
156
  .learn-press-notice .button {
157
  float: right;
158
  }
159
  .learn-press-form {
160
  margin-bottom: 20px;
161
  }
 
162
  #learn-press-course-curriculum ul.curriculum-sections,
163
  #learn-press-course-curriculum ul.section-content {
164
  list-style: none;
@@ -210,6 +233,7 @@
210
  border-radius: 5px;
211
  vertical-align: middle;
212
  margin-left: 5px;
 
213
  }
214
  #learn-press-course-curriculum .section-header .meta .collapse:before {
215
  content: "\ea0b";
@@ -253,6 +277,55 @@
253
  #learn-press-course-curriculum .course-item .lp-icon {
254
  display: none;
255
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  #learn-press-course-curriculum .course-item.viewable {
257
  cursor: pointer;
258
  }
@@ -284,18 +357,6 @@
284
  height: 100%;
285
  content: '';
286
  }
287
- #learn-press-course-curriculum .course-item.item-has-status .item-status {
288
- display: inline-block;
289
- background: #d6d6d6;
290
- margin-left: 5px;
291
- }
292
- #learn-press-course-curriculum .course-item.item-has-status .item-status:before {
293
- content: '\ea10';
294
- color: #FFF;
295
- }
296
- #learn-press-course-curriculum .course-item.item-has-status.item-completed .item-status {
297
- background: #95e6f9;
298
- }
299
  #learn-press-course-curriculum .course-item.focus {
300
  background: #ffb710;
301
  }
@@ -315,12 +376,25 @@
315
  #learn-press-course-curriculum .course-item-meta {
316
  display: block;
317
  line-height: 1;
318
- __position: absolute;
319
  top: 15px;
320
  right: 15px;
321
  float: right;
322
  margin-top: 5px;
323
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  .lp-icon {
325
  display: inline-block;
326
  font-family: 'lp-icons';
@@ -442,6 +516,26 @@
442
  .single-lp_course .learn-press-course-results-progress .percentage-sign {
443
  margin-left: 5px;
444
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  .single-lp_course .learn-press-course-results-progress:after {
446
  display: block;
447
  content: '';
@@ -542,7 +636,24 @@
542
  .learn-press-tabs .learn-press-tab-panel.active {
543
  display: block;
544
  }
545
- /* POPUP */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
546
  #popup_overlay {
547
  z-index: 10000000 !important;
548
  }
@@ -790,7 +901,7 @@ body.course-has-popup {
790
  height: 43px;
791
  line-height: 43px;
792
  background: #F5F5F5;
793
- margin: 0 10px;
794
  border: 1px solid #DDD;
795
  outline: none;
796
  }
@@ -911,6 +1022,10 @@ body.block-content #learn-press-block-content {
911
  .quiz-intro {
912
  list-style: none;
913
  padding: 0;
 
 
 
 
914
  }
915
  .quiz-questions-list {
916
  margin: 0 0 20px 0;
@@ -922,10 +1037,95 @@ body.block-content #learn-press-block-content {
922
  }
923
  .quiz-questions-list .question-title {
924
  margin: 0 0 5px 0;
 
 
925
  }
926
  .quiz-questions-list .current .question-title {
927
  font-weight: bold;
928
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
929
  .quiz-description .learn-press-question-title,
930
  .question-content .learn-press-question-title {
931
  margin-bottom: 20px;
@@ -1796,8 +1996,9 @@ body.block-content #learn-press-block-content {
1796
  .learn-press-message {
1797
  background: #F5F5F5;
1798
  border-left: 5px solid #00A0D2;
1799
- padding: 10px 20px 10px 20px;
1800
  margin-bottom: 20px;
 
1801
  }
1802
  .learn-press-message button {
1803
  float: right;
@@ -1885,6 +2086,20 @@ body.block-content #learn-press-block-content {
1885
  .lp-form-field-wrap .lp-form-field .lp-field-error-message {
1886
  color: #FF0000;
1887
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1888
  .learn-press-user-profile .lp-edit-profile:after {
1889
  display: block;
1890
  content: '';
@@ -2213,13 +2428,47 @@ body.profile-resizing {
2213
  #popup_container #popup_panel {
2214
  text-align: center;
2215
  }
 
 
 
 
 
 
2216
  .single-lp_course .course-summary .lp_course .entry-footer {
2217
  display: none;
2218
  }
2219
  .single-lp_course .learn-press-message {
 
2220
  clear: both;
2221
  margin-top: 25px;
2222
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2223
  /* tooltip */
2224
  .learn-press-tooltip-bubble {
2225
  position: absolute;
@@ -2282,48 +2531,37 @@ body.content-item-only #learn-press-content-item.expand {
2282
  content: '-';
2283
  }
2284
  /*
2285
- .sidebar-hide-btn, .sidebar-show-btn {
2286
- cursor: pointer;
2287
- width: 60px;
2288
- height: 60px;
2289
- display: inline-block;
2290
- font-size: 34px;
2291
- line-height: 60px;
2292
- text-align: center;
2293
- color: #FFF;
2294
- position: absolute;
2295
-
2296
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2297
  }*/
2298
- .payment-method-form.payment_method_authorizenet {
2299
- background: #f7f7f7;
2300
- border-radius: 5px;
2301
- -webkit-border-radius: 5px;
2302
- -moz-border-radius: 5px;
2303
- padding-top: 25px;
2304
- }
2305
- .payment-method-form.payment_method_authorizenet .row-fluid {
2306
- clear: both;
2307
- padding-bottom: 25px;
2308
- }
2309
- .payment-method-form.payment_method_authorizenet .row-fluid .span6:first-child {
2310
- width: 50%;
2311
- float: left;
2312
- }
2313
- .payment-method-form.payment_method_authorizenet .row-fluid .span6:first-child label {
2314
- margin-left: 17px;
2315
- }
2316
- .payment-method-form.payment_method_authorizenet .row-fluid .span6:first-child select,
2317
- .payment-method-form.payment_method_authorizenet .row-fluid .span6:first-child input {
2318
- margin-left: 10px;
2319
- }
2320
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 select,
2321
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 input {
2322
- padding: 8px 0;
2323
- }
2324
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 select.required {
2325
- color: #000;
2326
- }
2327
  .place-order-action {
2328
  margin-top: 20px;
2329
  }
@@ -2347,31 +2585,128 @@ body.content-item-only #learn-press-content-item.expand {
2347
  z-index: 10;
2348
  position: relative;
2349
  }
 
 
 
2350
  /* Shortcode/Widgets */
2351
- .recent-courses-widget .course-meta-data > div,
2352
- .popular-courses-widget .course-meta-data > div,
2353
- .featured-courses-widget .course-meta-data > div {
2354
  display: inline-block;
2355
  }
2356
- .recent-courses-widget .course-meta-data > div:after,
2357
- .popular-courses-widget .course-meta-data > div:after,
2358
- .featured-courses-widget .course-meta-data > div:after {
2359
  content: '/';
2360
  }
2361
- .recent-courses-widget .course-meta-data > div:last-child:after,
2362
- .popular-courses-widget .course-meta-data > div:last-child:after,
2363
- .featured-courses-widget .course-meta-data > div:last-child:after {
2364
  content: '';
2365
  }
2366
- .recent-courses-widget .course-title,
2367
- .popular-courses-widget .course-title,
2368
- .featured-courses-widget .course-title {
2369
  margin: 5px 0;
2370
  }
2371
- .recent-courses-widget .course-entry,
2372
- .popular-courses-widget .course-entry,
2373
- .featured-courses-widget .course-entry {
2374
  margin-bottom: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2375
  }
2376
  @-moz-keyframes spin-12 {
2377
  0% {
@@ -2493,11 +2828,17 @@ body.content-item-only #learn-press-content-item.expand {
2493
  margin-left: 0;
2494
  }
2495
  }
 
2496
  @media (max-width: 480px) {
2497
- .woocommerce .checkout_coupon .form-row {
2498
- width: 100%;
2499
- }
2500
- }
 
 
 
 
 
2501
  @media (max-width: 400px) {
2502
  .learn-press-courses li.course {
2503
  width: 100%;
@@ -2519,29 +2860,37 @@ body.content-item-only #learn-press-content-item.expand {
2519
  display: none;
2520
  }
2521
  }
 
2522
  @media screen and (max-width: 615px) {
2523
- .payment-method-form.payment_method_authorizenet .row-fluid {
2524
- padding-bottom: 15px;
2525
- }
2526
- .payment-method-form.payment_method_authorizenet .row-fluid .span6:first-child {
2527
- width: 100%;
2528
- margin-bottom: 15px;
2529
- }
2530
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 label {
2531
- margin-left: 17px;
2532
- }
2533
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 select,
2534
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 input {
2535
- margin-left: 10px;
2536
- }
2537
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 select,
2538
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 input {
2539
- padding: 8px 0;
2540
- }
2541
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 select.required {
2542
- color: #000;
2543
- }
2544
- .payment-method-form.payment_method_authorizenet .row-fluid .span6 #learn-press-authorizenet-payment-expmonth {
2545
- margin-bottom: 10px;
2546
- }
2547
- }
 
 
 
 
 
 
 
1
+ /*
2
+ - PROGRESS CIRCLE
3
+ - Archive courses
4
+ - Course Curriculum
5
+ - BREADCRUMB
6
+ - COURSE PROGRESS
7
+ - COURSE TABS
8
+ - POPUP STYLE
9
+ - COURSE QUIZ
10
+ - Form field
11
+ - jAlerts
12
+ - tooltip
13
+ - fill in blank
14
+ - Shortcode/Widgets
15
+ */
16
  @font-face {
17
  font-family: 'lp-icons';
18
  src: url('../fonts/lp-icons.eot?f41nl');
168
  .learn-press-courses li.course .course-info > * {
169
  display: block;
170
  }
171
+ .course-origin-price {
172
+ text-decoration: line-through;
173
+ padding-right: 5px;
174
+ }
175
+ .course-price {
176
+ color: #54b551;
177
+ }
178
  .learn-press-notice .button {
179
  float: right;
180
  }
181
  .learn-press-form {
182
  margin-bottom: 20px;
183
  }
184
+ /* Course Curriculum */
185
  #learn-press-course-curriculum ul.curriculum-sections,
186
  #learn-press-course-curriculum ul.section-content {
187
  list-style: none;
233
  border-radius: 5px;
234
  vertical-align: middle;
235
  margin-left: 5px;
236
+ font-size: 10px;
237
  }
238
  #learn-press-course-curriculum .section-header .meta .collapse:before {
239
  content: "\ea0b";
277
  #learn-press-course-curriculum .course-item .lp-icon {
278
  display: none;
279
  }
280
+ #learn-press-course-curriculum .course-item .item-status {
281
+ display: none;
282
+ font-family: dashicons;
283
+ -webkit-border-radius: 4px;
284
+ -khtml-border-radius: 4px;
285
+ -moz-border-radius: 4px;
286
+ -ms-border-radius: 4px;
287
+ -o-border-radius: 4px;
288
+ border-radius: 4px;
289
+ background: #DDD;
290
+ color: #22b4ff;
291
+ font-size: 18px;
292
+ }
293
+ #learn-press-course-curriculum .course-item .item-status:before {
294
+ content: "\f177";
295
+ }
296
+ #learn-press-course-curriculum .course-item .item-status.item-status-started:before {
297
+ content: "\f469";
298
+ }
299
+ #learn-press-course-curriculum .course-item .item-status.item-status-completed {
300
+ background: #22b4ff;
301
+ color: #FFF;
302
+ }
303
+ #learn-press-course-curriculum .course-item .item-status.item-status-completed:before {
304
+ content: "\f147";
305
+ }
306
+ #learn-press-course-curriculum .course-item .item-status.item-status-passed {
307
+ background: #22b4ff;
308
+ color: #FFF;
309
+ }
310
+ #learn-press-course-curriculum .course-item .item-status.item-status-passed:before {
311
+ content: "\f147";
312
+ }
313
+ #learn-press-course-curriculum .course-item .item-status.item-status-failed {
314
+ background: #cc540d;
315
+ color: #FFF;
316
+ }
317
+ #learn-press-course-curriculum .course-item .item-status.item-status-failed:before {
318
+ content: "\f335";
319
+ }
320
+ #learn-press-course-curriculum .course-item .item-result {
321
+ display: none;
322
+ }
323
+ #learn-press-course-curriculum .course-item.item-has-status .item-status {
324
+ display: inline-block;
325
+ }
326
+ #learn-press-course-curriculum .course-item.item-has-result .item-result {
327
+ display: inline-block;
328
+ }
329
  #learn-press-course-curriculum .course-item.viewable {
330
  cursor: pointer;
331
  }
357
  height: 100%;
358
  content: '';
359
  }
 
 
 
 
 
 
 
 
 
 
 
 
360
  #learn-press-course-curriculum .course-item.focus {
361
  background: #ffb710;
362
  }
376
  #learn-press-course-curriculum .course-item-meta {
377
  display: block;
378
  line-height: 1;
 
379
  top: 15px;
380
  right: 15px;
381
  float: right;
382
  margin-top: 5px;
383
  }
384
+ #learn-press-course-curriculum .course-item-meta .item-loop-meta-text {
385
+ font-size: small;
386
+ }
387
+ #learn-press-course-curriculum .course-item-meta .item-loop-meta-text.item-final {
388
+ color: #ffffff;
389
+ background: #cc540d;
390
+ padding: 3px 8px;
391
+ -webkit-border-radius: 3px;
392
+ -khtml-border-radius: 3px;
393
+ -moz-border-radius: 3px;
394
+ -ms-border-radius: 3px;
395
+ -o-border-radius: 3px;
396
+ border-radius: 3px;
397
+ }
398
  .lp-icon {
399
  display: inline-block;
400
  font-family: 'lp-icons';
516
  .single-lp_course .learn-press-course-results-progress .percentage-sign {
517
  margin-left: 5px;
518
  }
519
+ .single-lp_course .learn-press-course-results-progress .grade {
520
+ font-size: 12px;
521
+ font-weight: bold;
522
+ background: #F5F5F5;
523
+ padding: 2px 7px;
524
+ -webkit-border-radius: 3px;
525
+ -khtml-border-radius: 3px;
526
+ -moz-border-radius: 3px;
527
+ -ms-border-radius: 3px;
528
+ -o-border-radius: 3px;
529
+ border-radius: 3px;
530
+ }
531
+ .single-lp_course .learn-press-course-results-progress .grade.passed {
532
+ color: #ffffff;
533
+ background: #95e6f9;
534
+ }
535
+ .single-lp_course .learn-press-course-results-progress .grade.failed {
536
+ color: #ffffff;
537
+ background: #ff5425;
538
+ }
539
  .single-lp_course .learn-press-course-results-progress:after {
540
  display: block;
541
  content: '';
636
  .learn-press-tabs .learn-press-tab-panel.active {
637
  display: block;
638
  }
639
+ .learn-press-course-buttons a.button {
640
+ display: inline-block;
641
+ font-size: 16px;
642
+ background: #1a1a1a;
643
+ border: 0;
644
+ border-radius: 2px;
645
+ color: #fff;
646
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
647
+ font-weight: 700;
648
+ letter-spacing: 0.046875em;
649
+ line-height: 1;
650
+ padding: 0.84375em 0.875em 0.78125em;
651
+ text-transform: uppercase;
652
+ }
653
+ .learn-press-course-buttons a.button:hover {
654
+ background: #007acc;
655
+ }
656
+ /* POPUP STYLE */
657
  #popup_overlay {
658
  z-index: 10000000 !important;
659
  }
901
  height: 43px;
902
  line-height: 43px;
903
  background: #F5F5F5;
904
+ margin-left: 10px;
905
  border: 1px solid #DDD;
906
  outline: none;
907
  }
1022
  .quiz-intro {
1023
  list-style: none;
1024
  padding: 0;
1025
+ margin-left: 0;
1026
+ }
1027
+ .quiz-intro li label {
1028
+ display: inline-block;
1029
  }
1030
  .quiz-questions-list {
1031
  margin: 0 0 20px 0;
1037
  }
1038
  .quiz-questions-list .question-title {
1039
  margin: 0 0 5px 0;
1040
+ display: inline-block;
1041
+ font-size: 14px;
1042
  }
1043
  .quiz-questions-list .current .question-title {
1044
  font-weight: bold;
1045
  }
1046
+ .quiz-questions-list input[type="checkbox"],
1047
+ .quiz-questions-list input[type="radio"] {
1048
+ border: 1px solid #DDD;
1049
+ display: inline-block;
1050
+ -webkit-appearance: none;
1051
+ width: 18px;
1052
+ height: 18px;
1053
+ position: relative;
1054
+ }
1055
+ .quiz-questions-list input[type="checkbox"]:checked:after,
1056
+ .quiz-questions-list input[type="radio"]:checked:after {
1057
+ content: '';
1058
+ display: inline-block;
1059
+ position: absolute;
1060
+ }
1061
+ .quiz-questions-list input[type="checkbox"]:checked:after {
1062
+ border-bottom: 3px solid #00b9eb;
1063
+ border-right: 1px solid #00b9eb;
1064
+ -webkit-transform: rotate(14deg);
1065
+ -moz-transform: rotate(14deg);
1066
+ -ms-transform: rotate(14deg);
1067
+ -o-transform: rotate(14deg);
1068
+ transform: rotate(33deg);
1069
+ width: 8px;
1070
+ height: 16px;
1071
+ top: -5px;
1072
+ left: 5px;
1073
+ }
1074
+ .quiz-questions-list input[type="checkbox"]:disabled:after {
1075
+ border-color: #DDD;
1076
+ }
1077
+ .quiz-questions-list input[type="radio"] {
1078
+ -webkit-border-radius: 50%;
1079
+ -moz-border-radius: 50%;
1080
+ border-radius: 50%;
1081
+ }
1082
+ .quiz-questions-list input[type="radio"]:checked:after {
1083
+ background: #00b9eb;
1084
+ width: 8px;
1085
+ height: 8px;
1086
+ border-radius: 50%;
1087
+ top: 50%;
1088
+ left: 50%;
1089
+ margin-left: -4px;
1090
+ margin-top: -4px;
1091
+ }
1092
+ .quiz-questions-list input[type="radio"]:disabled:after {
1093
+ background: #DDD;
1094
+ }
1095
+ .question-results .question-title:after {
1096
+ font-family: dashicons;
1097
+ font-size: 24px;
1098
+ vertical-align: middle;
1099
+ display: inline-block;
1100
+ text-align: center;
1101
+ margin-left: 5px;
1102
+ }
1103
+ .question-results.correct .question-title:after {
1104
+ content: '\f147';
1105
+ color: #00adff;
1106
+ }
1107
+ .question-results.skipped .question-title:after {
1108
+ content: '\f534';
1109
+ color: #c6c6c6;
1110
+ }
1111
+ .question-results.incorrect .question-title:after {
1112
+ content: '\f335';
1113
+ color: #ff5425;
1114
+ }
1115
+ .question-results.incorrect .user-answer-false .option-title {
1116
+ text-decoration: line-through;
1117
+ }
1118
+ .question-results .answer-true {
1119
+ color: #007acc;
1120
+ }
1121
+ .question-results .answer-true .option-title {
1122
+ background: #fff9d8;
1123
+ padding: 0 5px;
1124
+ margin-left: -5px;
1125
+ }
1126
+ .question-results input {
1127
+ vertical-align: middle;
1128
+ }
1129
  .quiz-description .learn-press-question-title,
1130
  .question-content .learn-press-question-title {
1131
  margin-bottom: 20px;
1996
  .learn-press-message {
1997
  background: #F5F5F5;
1998
  border-left: 5px solid #00A0D2;
1999
+ padding: 10px 20px 0px 20px;
2000
  margin-bottom: 20px;
2001
+ overflow: hidden;
2002
  }
2003
  .learn-press-message button {
2004
  float: right;
2086
  .lp-form-field-wrap .lp-form-field .lp-field-error-message {
2087
  color: #FF0000;
2088
  }
2089
+ .learn-press-user-profile #learn-press-user-info {
2090
+ overflow: hidden;
2091
+ }
2092
+ .learn-press-user-profile #learn-press-user-info .user-avatar {
2093
+ width: 150px;
2094
+ float: left;
2095
+ }
2096
+ .learn-press-user-profile #learn-press-user-info .user-avatar .avatar {
2097
+ border-radius: 0;
2098
+ width: 100%;
2099
+ }
2100
+ .learn-press-user-profile #learn-press-user-info .user-basic-info {
2101
+ margin-left: 170px;
2102
+ }
2103
  .learn-press-user-profile .lp-edit-profile:after {
2104
  display: block;
2105
  content: '';
2428
  #popup_container #popup_panel {
2429
  text-align: center;
2430
  }
2431
+ .learn-press-auto-redirect-next-item {
2432
+ display: none;
2433
+ }
2434
+ .learn-press-auto-redirect-next-item.active {
2435
+ display: block;
2436
+ }
2437
  .single-lp_course .course-summary .lp_course .entry-footer {
2438
  display: none;
2439
  }
2440
  .single-lp_course .learn-press-message {
2441
+ position: relative;
2442
  clear: both;
2443
  margin-top: 25px;
2444
  }
2445
+ .single-lp_course .learn-press-message .learn-press-countdown {
2446
+ display: inline-block;
2447
+ width: 1.5em;
2448
+ height: 1.5em;
2449
+ background: #cc540d;
2450
+ text-align: center;
2451
+ border-radius: 50%;
2452
+ line-height: 1.5em;
2453
+ font-size: 0.8em;
2454
+ color: #fff;
2455
+ }
2456
+ .single-lp_course .learn-press-message .learnpress-dismiss-notice {
2457
+ display: inline-block;
2458
+ position: absolute;
2459
+ right: 1em;
2460
+ top: 50%;
2461
+ -ms-transform: translateY(-50%);
2462
+ -webkit-transform: translateY(-50%);
2463
+ transform: translateY(-50%);
2464
+ cursor: pointer;
2465
+ }
2466
+ .single-lp_course .learn-press-message .learnpress-dismiss-notice:before {
2467
+ font-size: 1.2em;
2468
+ color: red;
2469
+ content: "\f153";
2470
+ font-family: dashicons;
2471
+ }
2472
  /* tooltip */
2473
  .learn-press-tooltip-bubble {
2474
  position: absolute;
2531
  content: '-';
2532
  }
2533
  /*
2534
+ .payment-method-form {
2535
+ &.payment_method_authorizenet {
2536
+ background: #f7f7f7;
2537
+ border-radius: 5px;
2538
+ -webkit-border-radius: 5px;
2539
+ -moz-border-radius: 5px;
2540
+ padding-top: 25px;
2541
+ .row-fluid {
2542
+ clear: both;
2543
+ padding-bottom: 25px;
2544
+ .span6 {
2545
+ &:first-child {
2546
+ width: 50%;
2547
+ float: left;
2548
+ label {
2549
+ margin-left: 17px;
2550
+ }
2551
+ select, input {
2552
+ margin-left: 10px;
2553
+ }
2554
+ }
2555
+ select, input {
2556
+ padding: 8px 0;
2557
+ }
2558
+ select.required {
2559
+ color: #000;
2560
+ }
2561
+ }
2562
+ }
2563
+ }
2564
  }*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2565
  .place-order-action {
2566
  margin-top: 20px;
2567
  }
2585
  z-index: 10;
2586
  position: relative;
2587
  }
2588
+ .table-orders .order-status.order-status-removed {
2589
+ color: #FF0000;
2590
+ }
2591
  /* Shortcode/Widgets */
2592
+ .widget_lp-widget-popular-courses .course-meta-data > div,
2593
+ .widget_lp-widget-recent-courses .course-meta-data > div,
2594
+ .widget_lp-widget-featured-courses .course-meta-data > div {
2595
  display: inline-block;
2596
  }
2597
+ .widget_lp-widget-popular-courses .course-meta-data > div:after,
2598
+ .widget_lp-widget-recent-courses .course-meta-data > div:after,
2599
+ .widget_lp-widget-featured-courses .course-meta-data > div:after {
2600
  content: '/';
2601
  }
2602
+ .widget_lp-widget-popular-courses .course-meta-data > div:last-child:after,
2603
+ .widget_lp-widget-recent-courses .course-meta-data > div:last-child:after,
2604
+ .widget_lp-widget-featured-courses .course-meta-data > div:last-child:after {
2605
  content: '';
2606
  }
2607
+ .widget_lp-widget-popular-courses .course-title,
2608
+ .widget_lp-widget-recent-courses .course-title,
2609
+ .widget_lp-widget-featured-courses .course-title {
2610
  margin: 5px 0;
2611
  }
2612
+ .widget_lp-widget-popular-courses .course-entry,
2613
+ .widget_lp-widget-recent-courses .course-entry,
2614
+ .widget_lp-widget-featured-courses .course-entry {
2615
  margin-bottom: 20px;
2616
+ border-bottom: 1px dashed #DDD;
2617
+ padding-bottom: 20px;
2618
+ }
2619
+ .edit-course-item-link a {
2620
+ font-size: 14px;
2621
+ position: relative;
2622
+ padding-left: 25px;
2623
+ }
2624
+ .edit-course-item-link a:after {
2625
+ content: "\f464";
2626
+ font-family: Dashicons;
2627
+ font-size: 26px;
2628
+ position: absolute;
2629
+ bottom: 0;
2630
+ line-height: 1;
2631
+ left: 0;
2632
+ }
2633
+ .course-item-navigation {
2634
+ border-top: 4px solid #333;
2635
+ padding-top: 10px;
2636
+ margin-top: 20px;
2637
+ }
2638
+ .course-item-navigation .nav-links .nav-link {
2639
+ opacity: 1;
2640
+ }
2641
+ .course-item-navigation .nav-links .nav-link a {
2642
+ opacity: 1;
2643
+ }
2644
+ .course-item-navigation .nav-links .nav-link a .meta-nav {
2645
+ display: block;
2646
+ text-transform: uppercase;
2647
+ font-size: small;
2648
+ color: #b9b9b9;
2649
+ }
2650
+ .course-item-navigation .nav-links .nav-link a .post-title {
2651
+ opacity: 1;
2652
+ }
2653
+ .course-item-navigation .nav-links .nav-link.nav-previous {
2654
+ float: left;
2655
+ }
2656
+ .course-item-navigation .nav-links .nav-link.nav-next {
2657
+ float: right;
2658
+ text-align: right;
2659
+ }
2660
+ .course-item-navigation .nav-links:after {
2661
+ clear: both;
2662
+ display: block;
2663
+ content: '';
2664
+ }
2665
+ /* widget attributes */
2666
+ .lp-course-attributes {
2667
+ list-style: none;
2668
+ margin-left: 0;
2669
+ }
2670
+ .lp-course-attributes li {
2671
+ list-style: none;
2672
+ margin-bottom: 10px;
2673
+ }
2674
+ .lp-course-attributes .lp-course-attribute-values {
2675
+ list-style: none;
2676
+ margin-left: 0;
2677
+ }
2678
+ .lp-course-attributes.course-attributes .lp-course-attribute-values li {
2679
+ display: inline-block;
2680
+ padding: 3px 8px;
2681
+ background: #F0F0F0;
2682
+ border-radius: 4px;
2683
+ margin: 0 5px 5px 0;
2684
+ }
2685
+ .lp-course-attributes.course-filters .lp-course-attribute-values li a:before {
2686
+ font-family: dashicons;
2687
+ border-radius: 50%;
2688
+ background: #DDD;
2689
+ display: inline-block;
2690
+ width: 16px;
2691
+ height: 16px;
2692
+ text-align: center;
2693
+ line-height: 16px;
2694
+ color: #FFF;
2695
+ font-size: 16px;
2696
+ vertical-align: middle;
2697
+ margin-right: 5px;
2698
+ content: '';
2699
+ }
2700
+ .lp-course-attributes.course-filters .lp-course-attribute-values li:hover a:before {
2701
+ background: #4acfff;
2702
+ }
2703
+ .lp-course-attributes.course-filters .lp-course-attribute-values li.active a:before {
2704
+ content: "\f147";
2705
+ background: #4acfff;
2706
+ }
2707
+ .lp-course-attributes.course-filters .lp-course-attribute-values li.active:hover a:before {
2708
+ content: "\f335";
2709
+ background: #a20000;
2710
  }
2711
  @-moz-keyframes spin-12 {
2712
  0% {
2828
  margin-left: 0;
2829
  }
2830
  }
2831
+ /*
2832
  @media (max-width: 480px) {
2833
+ .woocommerce {
2834
+ .checkout_coupon {
2835
+ .form-row {
2836
+ width: 100%;
2837
+ }
2838
+ }
2839
+ }
2840
+ }
2841
+ */
2842
  @media (max-width: 400px) {
2843
  .learn-press-courses li.course {
2844
  width: 100%;
2860
  display: none;
2861
  }
2862
  }
2863
+ /*
2864
  @media screen and (max-width: 615px) {
2865
+ .payment-method-form {
2866
+ &.payment_method_authorizenet {
2867
+ .row-fluid {
2868
+ padding-bottom: 15px;
2869
+ .span6 {
2870
+ &:first-child {
2871
+ width: 100%;
2872
+ margin-bottom: 15px;
2873
+ }
2874
+ label {
2875
+ margin-left: 17px;
2876
+ }
2877
+ select, input {
2878
+ margin-left: 10px;
2879
+ }
2880
+ select, input {
2881
+ padding: 8px 0;
2882
+ }
2883
+ select.required {
2884
+ color: #000;
2885
+ }
2886
+ #learn-press-authorizenet-payment-expmonth {
2887
+ margin-bottom: 10px;
2888
+ }
2889
+ }
2890
+ }
2891
+ }
2892
+ }
2893
+ }
2894
+ */
2895
+
2896
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,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QUNQLFdBQUE7OztBQU1oQixRQUEwQjtFQUN0QjtJQUNJLFNBQUE7OztBQUlSLFFBQTBCLHVCQUF3QjtFQUU5QyxvQkFDSSxHQUFFO0lBQ0UsYUFBQTtJQUNBLG1CQUFBOzs7RUFFQSxvQkFKSixHQUFFLE9BSUcsVUFBVTtJQUNQLFdBQUE7SUFDQSxjQUFBOzs7QUFPaEIsUUFBMEIsdUJBQXdCO0VBRTlDLG9CQUNJLEdBQUU7SUFDRSxVQUFBO0lBQ0EsbUJBQUE7OztFQUVBLG9CQUpKLEdBQUUsT0FJRyxVQUFVO0lBQ1AsV0FBQTtJQUNBLGNBQUE7Ozs7Ozs7Ozs7Ozs7O0FBa0JoQixRQUEwQjtFQUV0QixvQkFDSSxHQUFFO0lBQ0UsV0FBQTtJQUNBLGtCQUFBO0lBQ0EsV0FBQTs7O0FBTVosUUFBMEI7RUFDdEIsd0JBQXlCO0lBQ3JCLFdBQUE7Ozs7QUFLUixtQkFBeUM7RUFDckMsSUFBSSxpQkFDQSxRQUFPLFVBQ0g7SUFDSSxXQUFBOztFQUhaLElBQUksaUJBQ0EsUUFBTyxVQUlIO0lBQ0ksYUFBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgLSBQUk9HUkVTUyBDSVJDTEVcbiAgICAtIEFyY2hpdmUgY291cnNlc1xuICAgIC0gQ291cnNlIEN1cnJpY3VsdW1cbiAgICAtIEJSRUFEQ1JVTUJcbiAgICAtIENPVVJTRSBQUk9HUkVTU1xuICAgIC0gQ09VUlNFIFRBQlNcbiAgICAtIFBPUFVQIFNUWUxFXG4gICAgLSBDT1VSU0UgUVVJWlxuICAgIC0gRm9ybSBmaWVsZFxuICAgIC0gakFsZXJ0c1xuICAgIC0gdG9vbHRpcFxuICAgIC0gZmlsbCBpbiBibGFua1xuICAgIC0gU2hvcnRjb2RlL1dpZGdldHNcbiAqL1xuXG5AaWNvbi11cmw6ICcuLi9mb250cy9scC1pY29ucyc7XG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ2xwLWljb25zJztcbiAgICBzcmM6IHVybCgnQHtpY29uLXVybH0uZW90P2Y0MW5sJyk7XG4gICAgc3JjOiB1cmwoJ0B7aWNvbi11cmx9LmVvdD9mNDFubCNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICB1cmwoJ0B7aWNvbi11cmx9LnR0Zj9mNDFubCcpIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICB1cmwoJ0B7aWNvbi11cmx9LndvZmY/ZjQxbmwnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICB1cmwoJ0B7aWNvbi11cmx9LnN2Zz9mNDFubCNscC1pY29ucycpIGZvcm1hdCgnc3ZnJyk7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbltjbGFzc149XCJscC1pY29uLVwiXSwgW2NsYXNzKj1cIiBscC1pY29uLVwiXSB7XG4gICAgLyogdXNlICFpbXBvcnRhbnQgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBicm93c2VyIGV4dGVuc2lvbnMgdGhhdCBjaGFuZ2UgZm9udHMgKi9cbiAgICBmb250LWZhbWlseTogJ2xwLWljb25zJyAhaW1wb3J0YW50O1xuICAgIHNwZWFrOiBub25lO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgLyogQmV0dGVyIEZvbnQgUmVuZGVyaW5nID09PT09PT09PT09ICovXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuLmxwLWljb24tZmlsZS10ZXh0MjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTI2XCI7XG59XG5cbi5scC1pY29uLWZpbGUtcGljdHVyZTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTI3XCI7XG59XG5cbi5scC1pY29uLWZpbGUtbXVzaWM6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZTkyOFwiO1xufVxuXG4ubHAtaWNvbi1maWxlLXZpZGVvOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXGU5MmFcIjtcbn1cblxuLmxwLWljb24tZmlsZS16aXA6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZTkyYlwiO1xufVxuXG4ubHAtaWNvbi1wYXN0ZTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTJkXCI7XG59XG5cbi5scC1pY29uLWFsYXJtOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXGU5NTBcIjtcbn1cblxuLmxwLWljb24tY3Jvc3M6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZWEwZlwiO1xufVxuXG4ubHAtaWNvbi1jaGVja21hcms6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZWExMFwiO1xufVxuXG4ubHAtaWNvbi1zcGlubmVyMjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTdiXCI7XG59XG5cbi5scC1pY29uLXBsdXM6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZWEwYVwiO1xufVxuXG4ubHAtaWNvbi1taW51czpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlYTBiXCI7XG59XG5cbi5jbGVhcmZpeCgpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiAnJztcbiAgICBjbGVhcjogYm90aDtcbn1cblxuLmNsZWFyZml4OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiAnJztcbiAgICBjbGVhcjogYm90aDtcbn1cblxuLmJvcmRlci1yYWRpdXMoQGFyZ3MpIHtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IEBhcmd1bWVudHM7XG4gICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IEBhcmd1bWVudHM7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiBAYXJndW1lbnRzO1xuICAgIC1tcy1ib3JkZXItcmFkaXVzOiBAYXJndW1lbnRzO1xuICAgIC1vLWJvcmRlci1yYWRpdXM6IEBhcmd1bWVudHM7XG4gICAgYm9yZGVyLXJhZGl1czogQGFyZ3VtZW50cztcbn1cblxuLnRyYW5zZm9ybShAYXJncykge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBAYXJndW1lbnRzO1xuICAgIC1raHRtbC10cmFuc2Zvcm06IEBhcmd1bWVudHM7XG4gICAgLW1vei10cmFuc2Zvcm06IEBhcmd1bWVudHM7XG4gICAgLW1zLXRyYW5zZm9ybTogQGFyZ3VtZW50cztcbiAgICAtby10cmFuc2Zvcm06IEBhcmd1bWVudHM7XG4gICAgdHJhbnNmb3JtOiBAYXJndW1lbnRzO1xufVxuXG4udHJhbnNpdGlvbihAYXJncykge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogQGFyZ3VtZW50cztcbiAgICAta2h0bWwtdHJhbnNpdGlvbjogQGFyZ3VtZW50cztcbiAgICAtbW96LXRyYW5zaXRpb246IEBhcmd1bWVudHM7XG4gICAgLW1zLXRyYW5zaXRpb246IEBhcmd1bWVudHM7XG4gICAgLW8tdHJhbnNpdGlvbjogQGFyZ3VtZW50cztcbiAgICB0cmFuc2l0aW9uOiBAYXJndW1lbnRzO1xufVxuXG4uY3Jvc3MoQHNpemU6IDMwcHgsIEBib3JkZXI6IDNweCwgQGNvbG9yOiAjMDAwKSB7XG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICAgIHdpZHRoOiBAYm9yZGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiBAY29sb3I7XG4gICAgICAgIGhlaWdodDogQHNpemU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAoQHNpemUgLSAgQGJvcmRlcikgLyAyO1xuICAgIH1cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC50cmFuc2Zvcm0ocm90YXRlKC00NWRlZykpO1xuICAgIH1cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnRyYW5zZm9ybShyb3RhdGUoNDVkZWcpKTtcbiAgICB9XG59XG5cbi5hbmltYXRpb24oQGFyZ3MpIHtcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogQGFyZ3VtZW50cztcbiAgICAtbW96LWFuaW1hdGlvbjogQGFyZ3VtZW50cztcbiAgICBhbmltYXRpb246IEBhcmd1bWVudHM7XG59XG5cbi5vdmVybGF5LXByb2Nlc3Npbmcge1xuICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgei1pbmRleDogOTk5OTk5O1xuICAgIH1cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgfVxufVxuXG4vKiBQUk9HUkVTUyBDSVJDTEUgKi9cbi5wcm9ncmVzcy1jaXJjbGUoQHNpemU6IDIwMHB4LCBAYmFja2dyb3VuZDogI0RERCwgQGZpbGw6ICM5NWU2ZjksIEBpbml0aWFsaXplOiAwLCBAaW5zaWRlLXNpemU6IDE3MHB4LCBAaW5zaWRlLWJhY2tncm91bmQ6ICNGRkYpIHtcbiAgICAucHJvZ3Jlc3MtY2lyY2xlIHtcbiAgICAgICAgd2lkdGg6IEBzaXplO1xuICAgICAgICBoZWlnaHQ6IEBzaXplO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIC5iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICB3aWR0aDogQHNpemU7XG4gICAgICAgICAgICBoZWlnaHQ6IEBzaXplO1xuICAgICAgICAgICAgY2xpcDogcmVjdCgwLCBAc2l6ZSwgQHNpemUsIEBzaXplIC8gMik7XG4gICAgICAgICAgICAuZmlsbCB7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBAc2l6ZTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEBzaXplO1xuICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMCwgQHNpemUgLyAyLCBAc2l6ZSwgMCk7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogQGZpbGw7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUodW5pdChAaW5pdGlhbGl6ZSozLjYsIGRlZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICB3aWR0aDogQGluc2lkZS1zaXplO1xuICAgICAgICAgICAgaGVpZ2h0OiBAaW5zaWRlLXNpemU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBAaW5zaWRlLWJhY2tncm91bmQ7XG4gICAgICAgICAgICAuYm9yZGVyLXJhZGl1cyg1MCUpO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAtQGluc2lkZS1zaXplIC8gMjtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtQGluc2lkZS1zaXplIC8gMjtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG4gICAgICAgIC5pbnNpZGUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogQHNpemU7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgfVxuICAgICAgICAmLmd0LTUwIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBmaWxsO1xuICAgICAgICAgICAgLmJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMCwgQHNpemUvMiwgQHNpemUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmZpbGwge1xuICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMCwgQHNpemUsIEBzaXplLCBAc2l6ZS8yKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBAYmFja2dyb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmNsZWFyZml4KCkge1xuICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbn1cblxuLmhpZGUtaWYtanMge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQXJjaGl2ZSBjb3Vyc2VzICovXG4ubGVhcm4tcHJlc3MtY291cnNlcyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBjbGVhcjogYm90aDtcbiAgICBtYXJnaW46IDAgLTMwcHggMCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgJjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxuICAgIGxpLmNvdXJzZSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHdpZHRoOiAyMyU7XG4gICAgICAgIG1hcmdpbjogMCAyJSAzMHB4IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG5cbiAgICAgICAgLnZpZXctbW9yZSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgaDMge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS10aHVtYm5haWwge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuY291cnNlLWluZm8ge1xuICAgICAgICAgICAgcGFkZGluZzogMCAxNXB4IDE1cHg7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIC5jb3Vyc2Utc3R1ZGVudHMge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1pbnN0cnVjdG9yIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1vcmlnaW4tcHJpY2Uge1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1wcmljZSB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBjb2xvcjogcmdiKDg0LCAxODEsIDgxKTtcbiAgICAgICAgfVxuICAgICAgICAuY291cnNlLWluZm8gPiAqIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY291cnNlLW9yaWdpbi1wcmljZSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xufVxuXG4uY291cnNlLXByaWNlIHtcbiAgICBjb2xvcjogcmdiKDg0LCAxODEsIDgxKTtcbn1cblxuLmxlYXJuLXByZXNzLW5vdGljZSAuYnV0dG9uIHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG5cbi5sZWFybi1wcmVzcy1mb3JtIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiBDb3Vyc2UgQ3VycmljdWx1bSAqL1xuXG4jbGVhcm4tcHJlc3MtY291cnNlLWN1cnJpY3VsdW0ge1xuICAgIHVsLmN1cnJpY3VsdW0tc2VjdGlvbnMsXG4gICAgdWwuc2VjdGlvbi1jb250ZW50IHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xuICAgICAgICBsaS5zZWN0aW9uIHtcbiAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuc2VjdGlvbi1oZWFkZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDIwcHggMTVweDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNGRkY7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgICAgY29sb3I6IHJnYigxNTMsIDE1MywgMTUzKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0RERDtcbiAgICAgICAgfVxuICAgICAgICAubWV0YSB7XG4gICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICAgICAgICB0b3A6IDIwcHg7XG4gICAgICAgICAgICAuY29sbGFwc2Uge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdscC1pY29ucyc7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzk1ZTZmOTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGVhMGJcIjtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYucGx1cyB7XG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxlYTBhXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmNvdXJzZS1pdGVtIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMjU1LCAyNTUsIDI1NSk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgLnRyYW5zaXRpb24oYmFja2dyb3VuZCBsaW5lYXIgMC41cyk7XG4gICAgICAgIC5scC1sYWJlbC12aWV3aW5nLFxuICAgICAgICAubHAtbGFiZWwtY29tcGxldGVkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1pdGVtLXRpdGxlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJ2xwLWljb25zJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAubHAtaWNvbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICAgIC5pdGVtLXN0YXR1cyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcbiAgICAgICAgICAgIC5ib3JkZXItcmFkaXVzKDRweCk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjREREO1xuICAgICAgICAgICAgY29sb3I6ICMyMmI0ZmY7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxNzdcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuaXRlbS1zdGF0dXMtdmlld2VkIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5pdGVtLXN0YXR1cy1zdGFydGVkIHtcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmNDY5XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5pdGVtLXN0YXR1cy1jb21wbGV0ZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyMmI0ZmY7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjE0N1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuaXRlbS1zdGF0dXMtcGFzc2VkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjJiNGZmO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGO1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLml0ZW0tc3RhdHVzLWZhaWxlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2NjNTQwZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5pdGVtLXJlc3VsdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICAgICYuaXRlbS1oYXMtc3RhdHVzIHtcbiAgICAgICAgICAgIC5pdGVtLXN0YXR1cyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYuaXRlbS1oYXMtcmVzdWx0IHtcbiAgICAgICAgICAgIC5pdGVtLXJlc3VsdCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYudmlld2FibGUge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U3ZWNmYjtcbiAgICAgICAgICAgICAgICAudHJhbnNpdGlvbihiYWNrZ3JvdW5kIGxpbmVhciAwcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5jb3Vyc2UtbGVzc29uIHtcbiAgICAgICAgICAgIC5jb3Vyc2UtaXRlbS10aXRsZSB7XG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxlOTI2JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5jb3Vyc2UtcXVpeiB7XG4gICAgICAgICAgICAuY291cnNlLWl0ZW0tdGl0bGUge1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1xcZTk1MCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYuaXRlbS1jdXJyZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjOTVlNmY5O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLmZvY3VzIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmI3MTA7XG4gICAgICAgICAgICAmLm9mZiB7XG4gICAgICAgICAgICAgICAgLnRyYW5zaXRpb24obm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY291cnNlLWl0ZW0tbWV0YSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdG9wOiAxNXB4O1xuICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICAgIC5pdGVtLWxvb3AtbWV0YS10ZXh0IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogc21hbGw7XG4gICAgICAgICAgICAmLml0ZW0tZmluYWwge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjYzU0MGQ7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogM3B4IDhweDtcbiAgICAgICAgICAgICAgICAuYm9yZGVyLXJhZGl1cygzcHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubHAtaWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtZmFtaWx5OiAnbHAtaWNvbnMnO1xuICAgIGJhY2tncm91bmQ6ICM5NWU2Zjk7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogI0ZGRjtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgfVxuXG59XG5cbi5scC1sYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIGZvbnQtc2l6ZTogNzglO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgcGFkZGluZzogMCAxMHB4O1xuICAgIGJhY2tncm91bmQ6ICNEREQ7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIC5ib3JkZXItcmFkaXVzKDRweCk7XG4gICAgJi5scC1sYWJlbC12aWV3aW5nIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDU3LCAxNzUsIDI1NSk7XG4gICAgfVxuICAgICYubHAtbGFiZWwtY29tcGxldGVkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM5YzdjZTtcbiAgICB9XG4gICAgJi5scC1sYWJlbC1sZXNzb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICAgIH1cbiAgICAmLmxwLWxhYmVsLXF1aXoge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM2NThjO1xuICAgIH1cbiAgICAmLmxwLWxhYmVsLXByZXZpZXcge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDJhN2NlO1xuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLWNvbnRlbnQtcHJvdGVjdGVkLW1lc3NhZ2Uge1xuICAgIGJvcmRlcjogM3B4IHNvbGlkICNmZjg0ODQ7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICAgIGNvbG9yOiAjZmY4NDg0O1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAuaWNvbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogMzBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIC5jcm9zcygzMHB4LCAzcHgsICNmZjg0ODQpO1xuICAgIH1cbn1cblxuLyoqIEJSRUFEQ1JVTUIgKi9cbi5sZWFybi1wcmVzcy1icmVhZGNydW1iIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiogQ09VUlNFIFBST0dSRVNTICoqL1xuLnNpbmdsZS1scF9jb3Vyc2Uge1xuICAgIC5sZWFybi1wcmVzcy1jb3Vyc2UtcmVzdWx0cy1wcm9ncmVzcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgICAgIC5pdGVtcy1wcm9ncmVzcyB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIHdpZHRoOiA2OCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgICAgICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWNvdXJzZS1wcm9ncmVzcy1oZWFkaW5nIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1wcm9ncmVzcyB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIHdpZHRoOiAzMCU7XG4gICAgICAgIH1cbiAgICAgICAgLm51bWJlciwgLnBlcmNlbnRhZ2Utc2lnbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgICAgICBmb250LXNpemU6IDI1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBlcmNlbnRhZ2Utc2lnbiB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5ncmFkZSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGNUY1RjU7XG4gICAgICAgICAgICBwYWRkaW5nOiAycHggN3B4O1xuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoM3B4KTtcbiAgICAgICAgICAgICYuaW4tcHJvZ3Jlc3Mge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLnBhc3NlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzk1ZTZmOTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuZmFpbGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmY1NDI1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubHAtY291cnNlLXByb2dyZXNzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmxwLXByb2dyZXNzLWJhciB7XG4gICAgICAgIGhlaWdodDogMTVweDtcbiAgICAgICAgYmFja2dyb3VuZDogI0RERDtcbiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMTVweCAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAuYm9yZGVyLXJhZGl1cygzcHgpO1xuICAgICAgICAubHAtcHJvZ3Jlc3MtdmFsdWUge1xuICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTVweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM5NWU2Zjk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmxwLXBhc3NpbmctY29uZGl0aW9uYWwge1xuICAgICAgICBsZWZ0OiAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBoZWlnaHQ6IDI1cHg7XG4gICAgICAgIHRvcDogLTVweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgJjpiZWZvcmUsXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIH1cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI0RERDtcbiAgICAgICAgfVxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNEREQ7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNsZWFybi1wcmVzcy1jb250ZW50LWl0ZW0ge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgZGlzcGxheTogbm9uZTtcblxufVxuXG4vKiogQ09VUlNFIFRBQlMgKiovXG4ubGVhcm4tcHJlc3MtdGFicyB7XG4gICAgLmxlYXJuLXByZXNzLW5hdi10YWJzIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgLmxlYXJuLXByZXNzLW5hdi10YWIge1xuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM2ODY4Njg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICMwMDdhY2M7XG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA3YWNjO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuYWN0aXZlOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkY7XG4gICAgICAgICAgICAgICAgYm90dG9tOiAtMXB4O1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6aG92ZXIge1xuXG4gICAgICAgIH1cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmxlYXJuLXByZXNzLXRhYi1wYW5lbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3MtYmxvY2stY29udGVudC1taXhpbihAdykge1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgd2lkdGg6IChAdyk7XG4gICAgICAgIGhlaWdodDogKEB3KTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0oQHcvMik7XG4gICAgICAgIG1hcmdpbi10b3A6IC0oQHcvMik7IC8qLTc2cHg7Ki9cbiAgICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IHBvbHlnb24oMHB4IEB3LCBAdyBAdywgQHcgQHcvMiwgQHcvMiBAdy8yLCBAdy8yIDAsIDAgMCk7XG4gICAgfVxuXG4gICAgc3BhbiB7XG4gICAgICAgIGNsaXA6IHJlY3QoMCwgQHcrNCwgQHcvMisyLCBAdy8yKzIpO1xuICAgICAgICB3aWR0aDogQHcrNDtcbiAgICAgICAgaGVpZ2h0OiBAdys0O1xuICAgICAgICBtYXJnaW4tbGVmdDogLShAdy8yKzIpO1xuICAgICAgICBtYXJnaW4tdG9wOiAtKEB3LzIrMik7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIHdpZHRoOiBAdys0O1xuICAgICAgICAgICAgaGVpZ2h0OiBAdys0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3MtY291cnNlLWJ1dHRvbnMge1xuXG4gICAgYS5idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LWZhbWlseTogTW9udHNlcnJhdCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNDY4NzVlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHBhZGRpbmc6IDAuODQzNzVlbSAwLjg3NWVtIDAuNzgxMjVlbTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDdhY2M7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qIFBPUFVQIFNUWUxFICovXG5cbiNwb3B1cF9vdmVybGF5IHtcbiAgICB6LWluZGV4OiAxMDAwMDAwMCAhaW1wb3J0YW50O1xufVxuXG4jcG9wdXBfY29udGFpbmVyIHtcbiAgICB6LWluZGV4OiAxMDAwMDAwMSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmNvdXJzZS1oYXMtcG9wdXAge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiNjb3Vyc2UtY3VycmljdWx1bS1wb3B1cCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgIHotaW5kZXg6IDk5OTk5OTtcbiAgICAqIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgI3BvcHVwLXNpZGViYXIge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgd2lkdGg6IDM1MHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNjBweDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0RERDtcbiAgICAgICAgLmNvdXJzZS1jdXJyaWN1bHVtLXRpdGxlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmN1cnJpY3VsdW0tc2VjdGlvbnMge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xuICAgICAgICB9XG4gICAgICAgIC5sZWFybi1wcmVzcy1jb3Vyc2UtcmVzdWx0cy1wcm9ncmVzcyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgLml0ZW1zLXByb2dyZXNzLCAuY291cnNlLXByb2dyZXNzIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjcG9wdXAtbWFpbiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAzNTBweDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgI3BvcHVwLWhlYWRlciB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAtMzUwcHg7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjYzU0MGQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FiNGExMDtcbiAgICAgICAgICAgIC5wb3B1cC1tZW51IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzNTBweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYWI0YTEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnBvcHVwLWNsb3NlLFxuICAgICAgICAgICAgLnNpZGViYXItaGlkZS1idG4sXG4gICAgICAgICAgICAuc2lkZWJhci1zaG93LWJ0biB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDU5cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1OXB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMzRweDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNjBweDtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNiMzRjMTA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnNpZGViYXItaGlkZS1idG4ge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc2lkZWJhci1zaG93LWJ0biB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAucG9wdXAtY2xvc2Uge1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAwcHg7XG4gICAgICAgICAgICAgICAgJjpiZWZvcmUsXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAzcHggc29saWQgI0ZGRjtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDI5cHg7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDE3cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYjM0YzEwO1xuICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAucG9wdXAtdGl0bGUge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMzUwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICAjcG9wdXAtY29udGVudCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDYwcHg7XG4gICAgICAgICAgICBib3R0b206IDUwcHg7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRvcCBsaW5lYXIgMC4yNXMsIGJvdHRvbSBsaW5lYXIgMC4yNXM7XG5cbiAgICAgICAgICAgICNwb3B1cC1jb250ZW50LWlubmVyIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggNDBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAjcG9wdXAtZm9vdGVyIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGNUY1RjU7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgICAgIC5mb290ZXItY29udHJvbCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgICAgICAgICAgICAgICYucHJldi1pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYubmV4dC1pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAjcG9wdXAtaGVhZGVyLCAjcG9wdXAtZm9vdGVyIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgbGluZWFyIDAuMjVzO1xuICAgICAgICB9XG4gICAgICAgICYuZXhwYW5kIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDIwJTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICNwb3B1cC1oZWFkZXIsXG4gICAgICAgICAgICAjcG9wdXAtZm9vdGVyIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgI3BvcHVwLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWZyYW1lIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLWNvbnRlbnQtaXRlbS10aXRsZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI0RERDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICAmLmNvbnRlbnQtaXRlbS1xdWl6LXRpdGxlIHtcbiAgICAgICAgaDQge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICAgIC5xdWl6LWNvdW50ZG93biB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICY6YWZ0ZXIsICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGJvdHRvbTogLTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBhZGZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLndhcm5pbmctdGltZS1vdmVyIHtcbiAgICAgICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGMDAwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuY291bnRkb3duIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5jbGVhcmZpeCgpO1xuICAgIH1cbiAgICAubHAtZXhwYW5kIHtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICB3aWR0aDogNDNweDtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3MtY29udGVudC1pdGVtLXN1bW1hcnkge1xuICAgIC8qcGFkZGluZzogMjBweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0RERDsqL1xuICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgLnF1aXotcXVlc3Rpb24tdGl0bGUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICAubGVhcm4tcHJlc3MtcXVlc3Rpb24tZXhwbGFuYXRpb24sIC5sZWFybi1wcmVzcy1xdWVzdGlvbi1oaW50IHtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgcGFkZGluZzogMTVweCAyMHB4O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIC5oaW50LXRpdGxlLCAuZXhwbGFuYXRpb24tdGl0bGUge1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uYnV0dG9uLWZpbmlzaC1xdWl6IHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG5cbi5sZWFybnByZXNzIGZvcm0ucHVyY2hhc2UtY291cnNlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4jbGVhcm4tcHJlc3MtYmxvY2stY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogZmFkZSgjRkZGLCAyNSUpO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiA5OTk5OTk5OTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICAmOmJlZm9yZSwgJjphZnRlciwgc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgLmJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwMDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIC5hbmltYXRpb24oc3Bpbi0xMyAxLjVzIGluZmluaXRlKTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBib3JkZXI6IDEwcHggc29saWQgIzAwMDAwMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC04MHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtODBweDtcbiAgICAgICAgd2lkdGg6IDE2MHB4O1xuICAgICAgICBoZWlnaHQ6IDE2MHB4O1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICBzcGFuIHtcbiAgICAgICAgei1pbmRleDogMjA7XG4gICAgICAgIC5hbmltYXRpb24oc3Bpbi0xMiAxLjVzIGluZmluaXRlKTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBib3JkZXI6IDZweCBzb2xpZCAjOTVlNmY5O1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubGVhcm4tcHJlc3MtYmxvY2stY29udGVudC1taXhpbig4MHB4KTtcbn1cblxuYm9keS5ibG9jay1jb250ZW50IHtcbiAgICAjbGVhcm4tcHJlc3MtYmxvY2stY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cblxuLyogQ09VUlNFIFFVSVogKi9cbi5xdWl6LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgY2xlYXI6IGJvdGg7XG59XG5cbi5xdWl6LWludHJvIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbGkgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxufVxuXG4ucXVpei1xdWVzdGlvbnMtbGlzdCB7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTBweCAwO1xuICAgIH1cbiAgICAucXVlc3Rpb24tdGl0bGUge1xuICAgICAgICBtYXJnaW46IDAgMCA1cHggMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgfVxuICAgIC5jdXJyZW50IHtcbiAgICAgICAgLnF1ZXN0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgJjpjaGVja2VkIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjMDBiOWViO1xuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzAwYjllYjtcbiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICAgICAgICAgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7XG4gICAgICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICAgICAgICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzNkZWcpO1xuICAgICAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgICAgIGhlaWdodDogMTZweDtcblxuICAgICAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICAgICAgbGVmdDogNXB4O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjREREO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAmOmNoZWNrZWQge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwYjllYjtcbiAgICAgICAgICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEREQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5xdWVzdGlvbi1yZXN1bHRzIHtcbiAgICAucXVlc3Rpb24tdGl0bGUge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAmLmNvcnJlY3Qge1xuICAgICAgICAucXVlc3Rpb24tdGl0bGUge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ1xcZjE0Nyc7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMGFkZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi5za2lwcGVkIHtcbiAgICAgICAgLnF1ZXN0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGY1MzQnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjYzZjNmM2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICYuaW5jb3JyZWN0IHtcbiAgICAgICAgLnF1ZXN0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYzMzUnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmY1NDI1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC51c2VyLWFuc3dlci1mYWxzZSB7XG4gICAgICAgICAgICAub3B0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAuYW5zd2VyLXRydWUge1xuICAgICAgICBjb2xvcjogIzAwN2FjYztcbiAgICAgICAgLm9wdGlvbi10aXRsZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOWQ4O1xuICAgICAgICAgICAgcGFkZGluZzogMCA1cHg7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogLTVweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnB1dCB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxufVxuXG4ucXVpei1kZXNjcmlwdGlvbixcbi5xdWVzdGlvbi1jb250ZW50IHtcbiAgICAubGVhcm4tcHJlc3MtcXVlc3Rpb24tdGl0bGUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbn1cblxuLnF1aXotY291bnRkb3duIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1pbi13aWR0aDogMTUwcHg7XG4gICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHBhZGRpbmc6IDVweCAwO1xufVxuXG4jcXVpei1jb3VudGRvd24ge1xuICAgIC5wcm9ncmVzcy1jaXJjbGUge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgM3B4ICNiZGJkYmQgaW5zZXQ7XG4gICAgICAgIC5pbnNpZGUge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgICAgICAuY291bnRkb3duIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwODc5OTg7XG4gICAgICAgICAgICAgICAgX3RleHQtc2hhZG93OiAxcHggMXB4ICM4ZWU1ZmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTEwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNEREQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBiOWViO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAjMDk3YTk4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4jcXVpei1wcm9ncmVzcyB7XG4gICAgLnByb2dyZXNzLWNpcmNsZShAc2l6ZTogMjAwcHgsIEBiYWNrZ3JvdW5kOiAjRERELCBAZmlsbDogI0ZGMDAwMCwgQGluaXRpYWxpemU6IDAlLCBAaW5zaWRlLXNpemU6IDE3MHB4LCBAaW5zaWRlLWJhY2tncm91bmQ6ICNGRkYpO1xufVxuXG4ucXVpei1yZXN1bHQge1xuICAgIC5xdWl6LXJlc3VsdC1tYXJrIHtcbiAgICAgICAgLnByb2dyZXNzLWNpcmNsZSgpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICAucXVpei1yZXN1bHQtc3VtbWFyeSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgICAgIC5xdWl6LXJlc3VsdC1maWVsZCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCA4cHggMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoNHB4KTtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgICAgICAgIHNwYW4sIHNwYW46YWZ0ZXIsICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS10ZXh0KTtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgcGFkZGluZzogM3B4IDEwcHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC41cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW46YWZ0ZXIge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogM3B4IDEwcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuY29ycmVjdCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIyYjRmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYud3Jvbmcge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZjU0MjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmVtcHR5IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzY1NkQ2RDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwLnF1aXotcmVzdWx0LXRpbWUge1xuICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgfVxuICAgIC5xdWl6LWdyYWRlIHtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgICAgICAmLnBhc3NlZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMjJiNGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLmZhaWxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjZmY1NDI1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmVsZW1lbnQtZGF0YS1wZXJjZW50LWxvb3AgKEBpKSB3aGVuIChAaSA8PSAxMDApIHtcbiAgICAuc2luZ2xlLXF1aXogLnF1aXotcmVzdWx0LWZpZWxkW2RhdGEtdmFsdWU9XCJAe2l9XCJdOmJlZm9yZSxcbiAgICAuc2luZ2xlLXF1aXogLnF1aXotcmVzdWx0LWZpZWxkW2RhdGEtdmFsdWU9XCJAe2l9XCJdIHNwYW4sXG4gICAgI3F1aXotY291bnRkb3duW2RhdGEtdmFsdWU9XCJAe2l9XCJdOmFmdGVyIHtcbiAgICAgICAgd2lkdGg6IH5cIkB7aX0lXCI7XG4gICAgfVxuICAgIC5lbGVtZW50LWRhdGEtcGVyY2VudC1sb29wKEBpICsgMSk7XG59XG5cbi5lbGVtZW50LWRhdGEtcGVyY2VudC1sb29wICgwKTtcblxuLyogUVVFU1RJT04gKi9cbi5sZWFybi1wcmVzcy1xdWVzdGlvbi1vcHRpb25zIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgID4gbGkuYW5zd2VyLW9wdGlvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAuYm9yZGVyLXJhZGl1cyg0cHgpO1xuICAgICAgICA+IGxhYmVsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLCBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAmOmNoZWNrZWQ6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogNHB4IHNvbGlkICMwMGI5ZWI7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAzcHg7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDhweDtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0ocm90YXRlKDM2ZGVnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6Y2hlY2tlZCArIHAge1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwYjllYjtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSwgaW5wdXRbdHlwZT1cInJhZGlvXCJdW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNXB4IDIwcHggNXB4IDYwcHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgICAgICAgICAmLnNpbmdsZS1saW5lcyB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweCAwIDYwcHg7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4OyAvKiBtaWRkbGUgKi9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwgcCB7XG4gICAgICAgICAgICAuYm9yZGVyLXJhZGl1cyg0cHgpO1xuICAgICAgICB9XG4gICAgICAgICYuYW5zd2VyLXRydWUgbGFiZWwgcCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBiOWViO1xuICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlciBsYWJlbCBwIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNENEQ0RDQ7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgJi51c2VyLWFuc3dlci1mYWxzZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgICAgICAgICAgPiBsYWJlbCB7XG4gICAgICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdICsgcCwgaW5wdXRbdHlwZT1cInJhZGlvXCJdICsgcCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0ZGMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmFuc3dlci1vcHRpb24tcmVzdWx0IHtcbiAgICAgICAgbGFiZWwge1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnB1dFtkaXNhYmxlZF0ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5sZWFybnByZXNzLWNvbnRlbnQge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5jb3Vyc2UtbWV0YSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAuY291cnNlLW9yaWdpbi1wcmljZSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgfVxuICAgIC5jb3Vyc2UtcHJpY2Uge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG5cbn1cblxuLyoqIE1FU1NBR0UgKi9cbi5sZWFybi1wcmVzcy1tZXNzYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAwQTBEMjtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHggMHB4IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gICAgcCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAmLm5vdGljZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjYjNkMjBhO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNiODFjMjM7XG4gICAgfVxuICAgIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIH1cbn1cblxuLyoqL1xuLmxlYXJuLXByZXNzLWNoZWNrb3V0LWNvbW1lbnQsXG4ubGVhcm4tcHJlc3MtY2hlY2tvdXQtcGF5bWVudCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLmxlYXJuLXByZXNzLWNoZWNrb3V0LXBheW1lbnQge1xuICAgIC5wYXltZW50LW1ldGhvZHMge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG4vKiBDT1VSU0UgUVVJWiAqL1xuLnNpbmdsZS1xdWl6IHtcbiAgICAucXVpei1xdWVzdGlvbnMtbGlzdCB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICAgIC5xdWl6LWludHJvIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgfVxuICAgIGg0IHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLXRvb2x0aXAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBiYWNrZ3JvdW5kOiAjMGY0OTU2O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCI/XCI7XG4gICAgICAgIGZvbnQtc2l6ZTogN3B4O1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIGxlZnQ6IDNweDtcbiAgICB9XG59XG5cbi8qIEZvcm0gZmllbGQgKi9cbi5scC1mb3JtLWZpZWxkLXdyYXAge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIC5scC1mb3JtLWZpZWxkIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAubHAtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5scC1mb3JtLWZpZWxkLWlucHV0IC5kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XG4gICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWZpZWxkLWVycm9yLW1lc3NhZ2Uge1xuICAgICAgICAgICAgY29sb3I6ICNGRjAwMDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5sZWFybi1wcmVzcy11c2VyLXByb2ZpbGUge1xuICAgICNsZWFybi1wcmVzcy11c2VyLWluZm97XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIC51c2VyLWF2YXRhciB7XG4gICAgICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIC5hdmF0YXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnVzZXItYmFzaWMtaW5mb3tcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNzBweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAubHAtZWRpdC1wcm9maWxlIHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAuY2xlYXJmaXgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudXNlci1iYXNpYy1pbmZvIHtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICB9XG4gICAgLmxlYXJuLXByZXNzLXRhYnMge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDMwcHggMCAyMHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgJiA+IGxpIHtcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDtcbiAgICAgICAgICAgICYgPiBhIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4O1xuICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzY4Njg2ODtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuY3VycmVudCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICMwMDdhY2M7XG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA3YWNjO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAubGVhcm4tcHJlc3Mtc3VidGFicyB7XG4gICAgICAgICYgPiBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC5sZWFybi1wcmVzcy1zdWJ0YWItY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICYuY3VycmVudCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgaDMge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5wcm9maWxlLWNvdXJzZXMge1xuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgICAgLmxlYXJuLXByZXNzLWNvdXJzZS1yZXN1bHRzLXByb2dyZXNzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDE1cHggMTVweCAxNXB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBidXR0b24ubGVhcm4tcHJlc3MtY291cnNlLXdpc2hsaXN0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgLnVzZXItcHJvZmlsZS1lZGl0LWZvcm0ge1xuXG4gICAgICAgIC5pbmZvLWZpZWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItcHJvZmlsZS1waWN0dXJlIHtcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICAgICAgLnBpY3R1cmUsIC5jaGFuZ2UtcGljdHVyZSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmNoYW5nZS1waWN0dXJlIHtcbiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICAuY2xlYXJmaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5wcm9maWxlLWZpZWxkLW5hbWUge1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmNoYW5nZS1wYXNzd29yZCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgI3VzZXJfcHJvZmlsZV9wYXNzd29yZF9mb3JtIHtcbiAgICAgICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMTVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC51cGRhdGUtcHJvZmlsZSB7XG4gICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjREREO1xuICAgICAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICB9XG4gICAgLmxlYXJuLXByZXNzLXN1YnRhYi1jb250ZW50IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNscC11c2VyLWVkaXQtYXZhdGFyIHtcbiAgICAgICAgLm1veGllLXNoaW0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAubHAtZm9ybS1maWVsZC1hdmF0YXIge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgI2xwLWF2YXRhci1hY3Rpb25zIHtcbiAgICAgICAgICAgIG1hcmdpbjogMjBweCAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5scC1hdmF0YXItcHJldmlldyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNEREQ7XG4gICAgICAgIC5wcm9maWxlLXBpY3R1cmUge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMDAlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5wcm9maWxlLWF2YXRhci1oaWRkZW4ge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWF2YXRhci1wcmV2aWV3LWFjdGlvbnMge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xNHB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5scC1hdmF0YXItdXBsb2FkLXByb2dyZXNzIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC01cHg7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgLmxwLWF2YXRhci11cGxvYWQtcHJvZ3Jlc3MtdmFsdWUge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNTYzZDdjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5scC1hdmF0YXItdXBsb2FkLWVycm9yIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWF2YXRhci1wcmV2aWV3LWFjdGlvbnMge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIC5scC1hdmF0YXItcHJldmlldy1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnVwbG9hZGluZywgJi51cGxvYWQtZXJyb3Ige1xuICAgICAgICAgICAgLmxwLWF2YXRhci1wcmV2aWV3LWFjdGlvbnMge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubHAtYXZhdGFyLXVwbG9hZC1wcm9ncmVzcyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnVwbG9hZC1lcnJvciB7XG4gICAgICAgICAgICAubHAtYXZhdGFyLXVwbG9hZC1lcnJvciB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5jcm9waW5nIHtcbiAgICAgICAgICAgIC5scC1hdmF0YXItcHJldmlldy1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmxwLWF2YXRhci1jcm9wLWltYWdlIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLmxwLWNyb3AtY29udHJvbHMge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgLmxwLXpvb20ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzU2M2Q3YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC51aS1zbGlkZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudWktc2xpZGVyLWhhbmRsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNTYzZDdhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLmxwLWNhbmNlbC11cGxvYWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiA1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogNXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIC5jbGVhcmZpeCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ib2R5IHtcbiAgICAmLnByb2ZpbGUtZHJhZ2dpbmcge1xuICAgICAgICBjdXJzb3I6IG1vdmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgJi5wcm9maWxlLXJlc2l6aW5nIHtcbiAgICAgICAgY3Vyc29yOiBldy1yZXNpemUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5sZWFybi1wcmVzcy1wYWdpbmF0aW9uIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdWwge1xuICAgICAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICAgICAgICAmID4gbGkge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAxMHB4O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLWJlY29tZS10ZWFjaGVyLWZvcm0ge1xuICAgIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyogakFsZXJ0cyAqL1xuI3BvcHVwX2NvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcblxuICAgICNwb3B1cF90aXRsZSB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICAgICAgYmFja2dyb3VuZDogIzE4QjZDNztcbiAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgICNwb3B1cF9jb250ZW50IHtcbiAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgI3BvcHVwX21lc3NhZ2Uge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNwb3B1cF9wYW5lbCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG59XG5cbi5sZWFybi1wcmVzcy1hdXRvLXJlZGlyZWN0LW5leHQtaXRlbSB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgICYuYWN0aXZlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxufVxuXG4uc2luZ2xlLWxwX2NvdXJzZSB7XG4gICAgLmNvdXJzZS1zdW1tYXJ5IHtcbiAgICAgICAgLmxwX2NvdXJzZSB7XG4gICAgICAgICAgICAuZW50cnktZm9vdGVyIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC5sZWFybi1wcmVzcy1tZXNzYWdlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjVweDtcblxuICAgICAgICAubGVhcm4tcHJlc3MtY291bnRkb3duIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiAxLjVlbTtcbiAgICAgICAgICAgIGhlaWdodDogMS41ZW07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjY2M1NDBkO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICB9XG4gICAgICAgIC5sZWFybnByZXNzLWRpc21pc3Mtbm90aWNlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAxZW07XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjE1M1wiO1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG4vKiB0b29sdGlwICovXG4ubGVhcm4tcHJlc3MtdG9vbHRpcC1idWJibGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI2LCAyNiwgMjYsIDAuOSk7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgcGFkZGluZzogOHB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHotaW5kZXg6IDk5OTk5OTk7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4vKiBmaWxsIGluIGJsYW5rICovXG5pbnB1dC5ibGFuay1maWxsLWNvcnJlY3Qge1xuICAgIHdpZHRoOiBhdXRvO1xufVxuXG5ib2R5LmNvbnRlbnQtaXRlbS1vbmx5IHtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgLmxlYXJuLXByZXNzLWNvbnRlbnQtaXRlbS1vbmx5IHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB6LWluZGV4OiA5OTk5OTk5O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgI2xlYXJuLXByZXNzLWNvbnRlbnQtaXRlbSB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zaXRpb246IG1heC13aWR0aCBsaW5lYXIgMC4yNXM7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMDBweDtcbiAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgJi5leHBhbmQge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5scC1ncm91cC1oZWFkaW5nLXRpdGxlIHtcbiAgICAmLnRvZ2dsZS1vZmYsICYudG9nZ2xlLW9uIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAudG9nZ2xlLWljb24ge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgZm9udC1zaXplOiBsYXJnZXI7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnKyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi50b2dnbGUtb24ge1xuICAgICAgICAudG9nZ2xlLWljb24ge1xuICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLypcbi5wYXltZW50LW1ldGhvZC1mb3JtIHtcbiAgICAmLnBheW1lbnRfbWV0aG9kX2F1dGhvcml6ZW5ldCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMjVweDtcbiAgICAgICAgLnJvdy1mbHVpZCB7XG4gICAgICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xuICAgICAgICAgICAgLnNwYW42IHtcbiAgICAgICAgICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxN3B4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCwgaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZWN0LCBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDhweCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3QucmVxdWlyZWQge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzAwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59Ki9cblxuLnBsYWNlLW9yZGVyLWFjdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLndvb2NvbW1lcmNlIHtcbiAgICBmb3JtIC5mb3JtLXJvdyB7XG4gICAgICAgICYudmFsaWRhdGUtZW1haWwsICYudmFsaWRhdGUtcGhvbmUge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jaGVja291dF9jb3Vwb24ge1xuICAgICAgICAuZm9ybS1yb3ctbGFzdCB7XG4gICAgICAgICAgICBpbnB1dC5idXR0b24ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEzcHggMTBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3Mtc2VhcmNoLWNvdXJzZS1mb3JtIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGlucHV0LnNlYXJjaC1jb3Vyc2UtaW5wdXRbbmFtZT1cInNcIl0ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0yMDBweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5zZWFyY2gtY291cnNlLWJ1dHRvbiB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG59XG5cbi50YWJsZS1vcmRlcnMge1xuICAgIC5vcmRlci1zdGF0dXMge1xuICAgICAgICAmLm9yZGVyLXN0YXR1cy1yZW1vdmVkIHtcbiAgICAgICAgICAgIGNvbG9yOiAjRkYwMDAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiBTaG9ydGNvZGUvV2lkZ2V0cyAqL1xuLndpZGdldF9scC13aWRnZXQtcG9wdWxhci1jb3Vyc2VzLCAud2lkZ2V0X2xwLXdpZGdldC1yZWNlbnQtY291cnNlcywgLndpZGdldF9scC13aWRnZXQtZmVhdHVyZWQtY291cnNlcyB7XG4gICAgLmNvdXJzZS1tZXRhLWRhdGEge1xuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnLyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmxhc3QtY2hpbGQ6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgLmNvdXJzZS10aXRsZSB7XG4gICAgICAgIG1hcmdpbjogNXB4IDA7XG4gICAgfVxuICAgIC5jb3Vyc2UtZW50cnkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNEREQ7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgIH1cbn1cblxuLmVkaXQtY291cnNlLWl0ZW0tbGluayB7XG4gICAgYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogXCJcXGY0NjRcIjtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBEYXNoaWNvbnM7XG4gICAgICAgICAgICBmb250LXNpemU6IDI2cHg7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5jb3Vyc2UtaXRlbS1uYXZpZ2F0aW9uIHtcbiAgICBib3JkZXItdG9wOiA0cHggc29saWQgIzMzMztcbiAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIC5uYXYtbGlua3Mge1xuICAgICAgICAubmF2LWxpbmsge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgLm1ldGEtbmF2IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogc21hbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjliOWI5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAucG9zdC10aXRsZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5uYXYtcHJldmlvdXMge1xuICAgICAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5uYXYtbmV4dCB7XG4gICAgICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiB3aWRnZXQgYXR0cmlidXRlcyAqL1xuLmxwLWNvdXJzZS1hdHRyaWJ1dGVzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIGxpIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgLmxwLWNvdXJzZS1hdHRyaWJ1dGUtdmFsdWVzIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxuICAgICYuY291cnNlLWF0dHJpYnV0ZXMge1xuICAgICAgICAubHAtY291cnNlLWF0dHJpYnV0ZS12YWx1ZXMge1xuICAgICAgICAgICAgbGkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGMEYwRjA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCA1cHggNXB4IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi5jb3Vyc2UtZmlsdGVycyB7XG4gICAgICAgIC5scC1jb3Vyc2UtYXR0cmlidXRlLXZhbHVlcyB7XG4gICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgYTpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEREQ7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOmhvdmVyIGE6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzRhY2ZmZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaS5hY3RpdmUge1xuICAgICAgICAgICAgICAgIGE6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzRhY2ZmZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJjpob3ZlciBhOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNhMjAwMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5ALW1vei1rZXlmcmFtZXMgc3Bpbi0xMiB7XG4gICAgMCUge1xuICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4tMTIge1xuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgc3Bpbi0xMiB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG59XG5cbkAtbW96LWtleWZyYW1lcyBzcGluLTEzIHtcbiAgICAxMDAlIHtcbiAgICAgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG4gICAgMCUge1xuICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgdHJhbnNsYXRlKDBweCk7XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbi0xMyB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBzcGluLTEzIHtcbiAgICAxMDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZykgdHJhbnNsYXRlKDBweCk7XG4gICAgfVxuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTI1MHB4KSB7XG4gICAgLnNpbmdsZS1scF9jb3Vyc2UgLmxlYXJuLXByZXNzLWNvdXJzZS1yZXN1bHRzLXByb2dyZXNzIHtcbiAgICAgICAgLml0ZW1zLXByb2dyZXNzLCAuY291cnNlLXByb2dyZXNzIHtcbiAgICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgLml0ZW1zLXByb2dyZXNzIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI2xlYXJuLXByZXNzLWJsb2NrLWNvbnRlbnQge1xuICAgICAgICAubGVhcm4tcHJlc3MtYmxvY2stY29udGVudC1taXhpbig2MHB4KTtcbiAgICB9XG5cbiAgICAubGVhcm4tcHJlc3MtY291cnNlLXJlc3VsdHMtcHJvZ3Jlc3Mge1xuICAgICAgICAuaXRlbXMtcHJvZ3Jlc3MsIC5jb3Vyc2UtcHJvZ3Jlc3Mge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgLmxlYXJuLXByZXNzLWNvdXJzZXMge1xuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgJjpudGgtY2hpbGQoNG4rMSkge1xuICAgICAgICAgICAgICAgIGNsZWFyOiBsZWZ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAubGVhcm4tcHJlc3MtY291cnNlcyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkgYW5kIChtaW4td2lkdGg6IDYwMHB4ICkge1xuXG4gICAgLmxlYXJuLXByZXNzLWNvdXJzZXMge1xuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgd2lkdGg6IDMxLjMzJTtcbiAgICAgICAgICAgIG1hcmdpbjogMCAyJSAzMHB4IDA7XG4gICAgICAgICAgICAvKiBwYWRkaW5nOiAwIDIwcHg7ICovXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgzbisxKSB7XG4gICAgICAgICAgICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSBhbmQgKG1pbi13aWR0aDogNDAwcHggKSB7XG5cbiAgICAubGVhcm4tcHJlc3MtY291cnNlcyB7XG4gICAgICAgIGxpLmNvdXJzZSB7XG4gICAgICAgICAgICB3aWR0aDogNDglO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDIlIDMwcHggMDtcbiAgICAgICAgICAgIC8qIHBhZGRpbmc6IDAgMjBweDsgKi9cbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDJuKzEpIHtcbiAgICAgICAgICAgICAgICBjbGVhcjogbGVmdDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vKlxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLndvb2NvbW1lcmNlIHtcbiAgICAgICAgLmNoZWNrb3V0X2NvdXBvbiB7XG4gICAgICAgICAgICAuZm9ybS1yb3cge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuXG4gICAgLmxlYXJuLXByZXNzLWNvdXJzZXMge1xuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCAzMHB4IDA7XG4gICAgICAgICAgICBjbGVhcjogbGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMzUwcHgpIHtcbiAgICAjY291cnNlLWN1cnJpY3VsdW0tcG9wdXAgI3BvcHVwLXNpZGViYXIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG59XG5cbi8qIGZ1bGwgd2lkdGggd2l0aCB0d2VudHlzaXh0ZWVuIHRoZW1lICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MS41NjI1ZW0pIHtcbiAgICBib2R5LnNpbmdsZS1scF9jb3Vyc2Uge1xuICAgICAgICBhcnRpY2xlLmxwX2NvdXJzZSB7XG4gICAgICAgICAgICAuZW50cnktY29udGVudCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuZW50cnktZm9vdGVyIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKlxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjE1cHgpIHtcbiAgICAucGF5bWVudC1tZXRob2QtZm9ybSB7XG4gICAgICAgICYucGF5bWVudF9tZXRob2RfYXV0aG9yaXplbmV0IHtcbiAgICAgICAgICAgIC5yb3ctZmx1aWQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgIC5zcGFuNiB7XG4gICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxN3B4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCwgaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0LCBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA4cHggMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QucmVxdWlyZWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgI2xlYXJuLXByZXNzLWF1dGhvcml6ZW5ldC1wYXltZW50LWV4cG1vbnRoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4qLyJdLCJmaWxlIjoibGVhcm5wcmVzcy5jc3MifQ== */
assets/css/owl.carousel.css DELETED
@@ -1,71 +0,0 @@
1
- /*
2
- * Core Owl Carousel CSS File
3
- * v1.3.3
4
- */
5
-
6
- /* clearfix */
7
- .owl-carousel .owl-wrapper:after {
8
- content: ".";
9
- display: block;
10
- clear: both;
11
- visibility: hidden;
12
- line-height: 0;
13
- height: 0;
14
- }
15
- /* display none until init */
16
- .owl-carousel{
17
- display: none;
18
- position: relative;
19
- width: 100%;
20
- -ms-touch-action: pan-y;
21
- }
22
- .owl-carousel .owl-wrapper{
23
- display: none;
24
- position: relative;
25
- -webkit-transform: translate3d(0px, 0px, 0px);
26
- }
27
- .owl-carousel .owl-wrapper-outer{
28
- overflow: hidden;
29
- position: relative;
30
- width: 100%;
31
- }
32
- .owl-carousel .owl-wrapper-outer.autoHeight{
33
- -webkit-transition: height 500ms ease-in-out;
34
- -moz-transition: height 500ms ease-in-out;
35
- -ms-transition: height 500ms ease-in-out;
36
- -o-transition: height 500ms ease-in-out;
37
- transition: height 500ms ease-in-out;
38
- }
39
-
40
- .owl-carousel .owl-item{
41
- float: left;
42
- }
43
- .owl-controls .owl-page,
44
- .owl-controls .owl-buttons div{
45
- cursor: pointer;
46
- }
47
- .owl-controls {
48
- -webkit-user-select: none;
49
- -khtml-user-select: none;
50
- -moz-user-select: none;
51
- -ms-user-select: none;
52
- user-select: none;
53
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
54
- }
55
-
56
- /* mouse grab icon */
57
- .grabbing {
58
- cursor:url(grabbing.png) 8 8, move;
59
- }
60
-
61
- /* fix */
62
- .owl-carousel .owl-wrapper,
63
- .owl-carousel .owl-item{
64
- -webkit-backface-visibility: hidden;
65
- -moz-backface-visibility: hidden;
66
- -ms-backface-visibility: hidden;
67
- -webkit-transform: translate3d(0,0,0);
68
- -moz-transform: translate3d(0,0,0);
69
- -ms-transform: translate3d(0,0,0);
70
- }
71
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/Chart.bundle.min.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Chart.js
3
+ * http://chartjs.org/
4
+ * Version: 2.5.0
5
+ *
6
+ * Copyright 2017 Nick Downie
7
+ * Released under the MIT license
8
+ * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
9
+ */
10
+ !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Chart=t()}}(function(){var t;return function t(e,n,i){function a(o,s){if(!n[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(r)return r(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var d=n[o]={exports:{}};e[o][0].call(d.exports,function(t){var n=e[o][1][t];return a(n?n:t)},d,d.exports,t,e,n,i)}return n[o].exports}for(var r="function"==typeof require&&require,o=0;o<i.length;o++)a(i[o]);return a}({1:[function(t,e,n){function i(t){if(t){var e=/^#([a-fA-F0-9]{3})$/,n=/^#([a-fA-F0-9]{6})$/,i=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,r=/(\w+)/,o=[0,0,0],s=1,l=t.match(e);if(l){l=l[1];for(var u=0;u<o.length;u++)o[u]=parseInt(l[u]+l[u],16)}else if(l=t.match(n)){l=l[1];for(var u=0;u<o.length;u++)o[u]=parseInt(l.slice(2*u,2*u+2),16)}else if(l=t.match(i)){for(var u=0;u<o.length;u++)o[u]=parseInt(l[u+1]);s=parseFloat(l[4])}else if(l=t.match(a)){for(var u=0;u<o.length;u++)o[u]=Math.round(2.55*parseFloat(l[u+1]));s=parseFloat(l[4])}else if(l=t.match(r)){if("transparent"==l[1])return[0,0,0,0];if(o=x[l[1]],!o)return}for(var u=0;u<o.length;u++)o[u]=b(o[u],0,255);return s=s||0==s?b(s,0,1):1,o[3]=s,o}}function a(t){if(t){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),r=b(parseFloat(n[2]),0,100),o=b(parseFloat(n[3]),0,100),s=b(isNaN(i)?1:i,0,1);return[a,r,o,s]}}}function r(t){if(t){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),r=b(parseFloat(n[2]),0,100),o=b(parseFloat(n[3]),0,100),s=b(isNaN(i)?1:i,0,1);return[a,r,o,s]}}}function o(t){var e=i(t);return e&&e.slice(0,3)}function s(t){var e=a(t);return e&&e.slice(0,3)}function l(t){var e=i(t);return e?e[3]:(e=a(t))?e[3]:(e=r(t))?e[3]:void 0}function u(t){return"#"+y(t[0])+y(t[1])+y(t[2])}function d(t,e){return e<1||t[3]&&t[3]<1?c(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"}function c(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function h(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"}function f(t,e){var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgba("+n+"%, "+i+"%, "+a+"%, "+(e||t[3]||1)+")"}function g(t,e){return e<1||t[3]&&t[3]<1?m(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"}function m(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function v(t){return k[t.slice(0,3)]}function b(t,e,n){return Math.min(Math.max(e,t),n)}function y(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var x=t(5);e.exports={getRgba:i,getHsla:a,getRgb:o,getHsl:s,getHwb:r,getAlpha:l,hexString:u,rgbString:d,rgbaString:c,percentString:h,percentaString:f,hslString:g,hslaString:m,hwbString:p,keyword:v};var k={};for(var _ in x)k[x[_]]=_},{5:5}],2:[function(t,e,n){var i=t(4),a=t(1),r=function(t){if(t instanceof r)return t;if(!(this instanceof r))return new r(t);this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var e;if("string"==typeof t)if(e=a.getRgba(t))this.setValues("rgb",e);else if(e=a.getHsla(t))this.setValues("hsl",e);else{if(!(e=a.getHwb(t)))throw new Error('Unable to parse color from string "'+t+'"');this.setValues("hwb",e)}else if("object"==typeof t)if(e=t,void 0!==e.r||void 0!==e.red)this.setValues("rgb",e);else if(void 0!==e.l||void 0!==e.lightness)this.setValues("hsl",e);else if(void 0!==e.v||void 0!==e.value)this.setValues("hsv",e);else if(void 0!==e.w||void 0!==e.whiteness)this.setValues("hwb",e);else{if(void 0===e.c&&void 0===e.cyan)throw new Error("Unable to parse color from object "+JSON.stringify(t));this.setValues("cmyk",e)}};r.prototype={rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t%=360,t=t<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return a.hexString(this.values.rgb)},rgbString:function(){return a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb,e=(299*t[0]+587*t[1]+114*t[2])/1e3;return e<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=this,i=t,a=void 0===e?.5:e,r=2*a-1,o=n.alpha()-i.alpha(),s=((r*o===-1?r:(r+o)/(1+r*o))+1)/2,l=1-s;return this.rgb(s*n.red()+l*i.red(),s*n.green()+l*i.green(),s*n.blue()+l*i.blue()).alpha(n.alpha()*a+i.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new r,i=this.values,a=n.values;for(var o in i)i.hasOwnProperty(o)&&(t=i[o],e={}.toString.call(t),"[object Array]"===e?a[o]=t.slice(0):"[object Number]"===e?a[o]=t:console.error("unexpected color value:",t));return n}},r.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},r.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},r.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},r.prototype.setValues=function(t,e){var n,a=this.values,r=this.spaces,o=this.maxes,s=1;if("alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];s=e.a}else if(void 0!==e[r[t][0]]){var l=r[t];for(n=0;n<t.length;n++)a[t][n]=e[l[n]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;var u;for(n=0;n<t.length;n++)u=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(u);for(var d in r)d!==t&&(a[d]=i[t][d](a[t]));return!0},r.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},r.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=r),e.exports=r},{1:1,4:4}],3:[function(t,e,n){function i(t){var e,n,i,a=t[0]/255,r=t[1]/255,o=t[2]/255,s=Math.min(a,r,o),l=Math.max(a,r,o),u=l-s;return l==s?e=0:a==l?e=(r-o)/u:r==l?e=2+(o-a)/u:o==l&&(e=4+(a-r)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=(s+l)/2,n=l==s?0:i<=.5?u/(l+s):u/(2-l-s),[e,100*n,100*i]}function a(t){var e,n,i,a=t[0],r=t[1],o=t[2],s=Math.min(a,r,o),l=Math.max(a,r,o),u=l-s;return n=0==l?0:u/l*1e3/10,l==s?e=0:a==l?e=(r-o)/u:r==l?e=2+(o-a)/u:o==l&&(e=4+(a-r)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=l/255*1e3/10,[e,n,i]}function o(t){var e=t[0],n=t[1],a=t[2],r=i(t)[0],o=1/255*Math.min(e,Math.min(n,a)),a=1-1/255*Math.max(e,Math.max(n,a));return[r,100*o,100*a]}function s(t){var e,n,i,a,r=t[0]/255,o=t[1]/255,s=t[2]/255;return a=Math.min(1-r,1-o,1-s),e=(1-r-a)/(1-a)||0,n=(1-o-a)/(1-a)||0,i=(1-s-a)/(1-a)||0,[100*e,100*n,100*i,100*a]}function l(t){return K[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92;var a=.4124*e+.3576*n+.1805*i,r=.2126*e+.7152*n+.0722*i,o=.0193*e+.1192*n+.9505*i;return[100*a,100*r,100*o]}function d(t){var e,n,i,a=u(t),r=a[0],o=a[1],s=a[2];return r/=95.047,o/=100,s/=108.883,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,s=s>.008856?Math.pow(s,1/3):7.787*s+16/116,e=116*o-16,n=500*(r-o),i=200*(o-s),[e,n,i]}function c(t){return Y(d(t))}function h(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return r=255*l,[r,r,r];n=l<.5?l*(1+s):l+s-l*s,e=2*l-n,a=[0,0,0];for(var u=0;u<3;u++)i=o+1/3*-(u-1),i<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a}function f(t){var e,n,i=t[0],a=t[1]/100,r=t[2]/100;return 0===r?[0,0,0]:(r*=2,a*=r<=1?r:2-r,n=(r+a)/2,e=2*a/(r+a),[i,100*e,100*n])}function m(t){return o(h(t))}function p(t){return s(h(t))}function v(t){return l(h(t))}function y(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r)),i=255*i;switch(a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}}function x(t){var e,n,i=t[0],a=t[1]/100,r=t[2]/100;return n=(2-a)*r,e=a*r,e/=n<=1?n:2-n,e=e||0,n/=2,[i,100*e,100*n]}function k(t){return o(y(t))}function _(t){return s(y(t))}function w(t){return l(y(t))}function S(t){var e,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(u>1&&(s/=u,l/=u),e=Math.floor(6*o),n=1-l,i=6*o-e,0!=(1&e)&&(i=1-i),a=s+i*(n-s),e){default:case 6:case 0:r=n,g=a,b=s;break;case 1:r=a,g=n,b=s;break;case 2:r=s,g=n,b=a;break;case 3:r=s,g=a,b=n;break;case 4:r=a,g=s,b=n;break;case 5:r=n,g=s,b=a}return[255*r,255*g,255*b]}function M(t){return i(S(t))}function D(t){return a(S(t))}function C(t){return s(S(t))}function T(t){return l(S(t))}function P(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100,s=t[3]/100;return e=1-Math.min(1,a*(1-s)+s),n=1-Math.min(1,r*(1-s)+s),i=1-Math.min(1,o*(1-s)+s),[255*e,255*n,255*i]}function I(t){return i(P(t))}function A(t){return a(P(t))}function F(t){return o(P(t))}function O(t){return l(P(t))}function R(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return e=3.2406*a+r*-1.5372+o*-.4986,n=a*-.9689+1.8758*r+.0415*o,i=.0557*a+r*-.204+1.057*o,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,e=Math.min(Math.max(0,e),1),n=Math.min(Math.max(0,n),1),i=Math.min(Math.max(0,i),1),[255*e,255*n,255*i]}function L(t){var e,n,i,a=t[0],r=t[1],o=t[2];return a/=95.047,r/=100,o/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,e=116*r-16,n=500*(a-r),i=200*(r-o),[e,n,i]}function V(t){return Y(L(t))}function W(t){var e,n,i,a,r=t[0],o=t[1],s=t[2];return r<=8?(n=100*r/903.3,a=7.787*(n/100)+16/116):(n=100*Math.pow((r+16)/116,3),a=Math.pow(n/100,1/3)),e=e/95.047<=.008856?e=95.047*(o/500+a-16/116)/7.787:95.047*Math.pow(o/500+a,3),i=i/108.883<=.008859?i=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3),[e,n,i]}function Y(t){var e,n,i,a=t[0],r=t[1],o=t[2];return e=Math.atan2(o,r),n=360*e/2/Math.PI,n<0&&(n+=360),i=Math.sqrt(r*r+o*o),[a,i,n]}function B(t){return R(W(t))}function z(t){var e,n,i,a=t[0],r=t[1],o=t[2];return i=o/360*2*Math.PI,e=r*Math.cos(i),n=r*Math.sin(i),[a,e,n]}function N(t){return W(z(t))}function H(t){return B(z(t))}function E(t){return J[t]}function U(t){return i(E(t))}function j(t){return a(E(t))}function G(t){return o(E(t))}function q(t){return s(E(t))}function Z(t){return d(E(t))}function X(t){return u(E(t))}e.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:s,rgb2keyword:l,rgb2xyz:u,rgb2lab:d,rgb2lch:c,hsl2rgb:h,hsl2hsv:f,hsl2hwb:m,hsl2cmyk:p,hsl2keyword:v,hsv2rgb:y,hsv2hsl:x,hsv2hwb:k,hsv2cmyk:_,hsv2keyword:w,hwb2rgb:S,hwb2hsl:M,hwb2hsv:D,hwb2cmyk:C,hwb2keyword:T,cmyk2rgb:P,cmyk2hsl:I,cmyk2hsv:A,cmyk2hwb:F,cmyk2keyword:O,keyword2rgb:E,keyword2hsl:U,keyword2hsv:j,keyword2hwb:G,keyword2cmyk:q,keyword2lab:Z,keyword2xyz:X,xyz2rgb:R,xyz2lab:L,xyz2lch:V,lab2xyz:W,lab2rgb:B,lab2lch:Y,lch2lab:z,lch2xyz:N,lch2rgb:H};var J={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},K={};for(var Q in J)K[JSON.stringify(J[Q])]=Q},{}],4:[function(t,e,n){var i=t(3),a=function(){return new u};for(var r in i){a[r+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),i[t](e)}}(r);var o=/(\w+)2(\w+)/.exec(r),s=o[1],l=o[2];a[s]=a[s]||{},a[s][l]=a[r]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var n=i[t](e);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(r)}var u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},u.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space,i=this.convs[n];e=a[n][t](i),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){u.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{3:3}],5:[function(t,e,n){e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],6:[function(e,n,i){!function(e,a){"object"==typeof i&&"undefined"!=typeof n?n.exports=a():"function"==typeof t&&t.amd?t(a):e.moment=a()}(this,function(){"use strict";function t(){return vi.apply(null,arguments)}function i(t){vi=t}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function r(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){var e;for(e in t)return!1;return!0}function s(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));return i}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function c(t,e){for(var n in e)d(e,n)&&(t[n]=e[n]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function h(t,e,n,i){return ye(t,e,n,i,!0).utc()}function f(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function g(t){return null==t._pf&&(t._pf=f()),t._pf}function m(t){if(null==t._isValid){var e=g(t),n=yi.call(e.parsedDateParts,function(t){return null!=t}),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function p(t){var e=h(NaN);return null!=t?c(g(e),t):g(e).userInvalidated=!0,e}function v(t){return void 0===t}function b(t,e){var n,i,a;if(v(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),v(e._i)||(t._i=e._i),v(e._f)||(t._f=e._f),v(e._l)||(t._l=e._l),v(e._strict)||(t._strict=e._strict),v(e._tzm)||(t._tzm=e._tzm),v(e._isUTC)||(t._isUTC=e._isUTC),v(e._offset)||(t._offset=e._offset),v(e._pf)||(t._pf=g(e)),v(e._locale)||(t._locale=e._locale),xi.length>0)for(n in xi)i=xi[n],a=e[i],v(a)||(t[i]=a);return t}function y(e){b(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),ki===!1&&(ki=!0,t.updateOffset(this),ki=!1)}function x(t){return t instanceof y||null!=t&&null!=t._isAMomentObject}function k(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function _(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=k(e)),n}function w(t,e,n){var i,a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),o=0;for(i=0;i<a;i++)(n&&t[i]!==e[i]||!n&&_(t[i])!==_(e[i]))&&o++;return o+r}function S(e){t.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function M(e,n){var i=!0;return c(function(){if(null!=t.deprecationHandler&&t.deprecationHandler(null,e),i){for(var a,r=[],o=0;o<arguments.length;o++){if(a="","object"==typeof arguments[o]){a+="\n["+o+"] ";for(var s in arguments[0])a+=s+": "+arguments[0][s]+", ";a=a.slice(0,-2)}else a=arguments[o];r.push(a)}S(e+"\nArguments: "+Array.prototype.slice.call(r).join("")+"\n"+(new Error).stack),i=!1}return n.apply(this,arguments)},n)}function D(e,n){null!=t.deprecationHandler&&t.deprecationHandler(e,n),_i[e]||(S(n),_i[e]=!0)}function C(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function T(t){var e,n;for(n in t)e=t[n],C(e)?this[n]=e:this["_"+n]=e;this._config=t,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function P(t,e){var n,i=c({},t);for(n in e)d(e,n)&&(r(t[n])&&r(e[n])?(i[n]={},c(i[n],t[n]),c(i[n],e[n])):null!=e[n]?i[n]=e[n]:delete i[n]);for(n in t)d(t,n)&&!d(e,n)&&r(t[n])&&(i[n]=c({},i[n]));return i}function I(t){null!=t&&this.set(t)}function A(t,e,n){var i=this._calendar[t]||this._calendar.sameElse;return C(i)?i.call(e,n):i}function F(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function O(){return this._invalidDate}function R(t){return this._ordinal.replace("%d",t)}function L(t,e,n,i){var a=this._relativeTime[n];return C(a)?a(t,e,n,i):a.replace(/%d/i,t)}function V(t,e){var n=this._relativeTime[t>0?"future":"past"];return C(n)?n(e):n.replace(/%s/i,e)}function W(t,e){var n=t.toLowerCase();Fi[n]=Fi[n+"s"]=Fi[e]=t}function Y(t){return"string"==typeof t?Fi[t]||Fi[t.toLowerCase()]:void 0}function B(t){var e,n,i={};for(n in t)d(t,n)&&(e=Y(n),e&&(i[e]=t[n]));return i}function z(t,e){Oi[t]=e}function N(t){var e=[];for(var n in t)e.push({unit:n,priority:Oi[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function H(e,n){return function(i){return null!=i?(U(this,e,i),t.updateOffset(this,n),this):E(this,e)}}function E(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function U(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function j(t){return t=Y(t),C(this[t])?this[t]():this}function G(t,e){if("object"==typeof t){t=B(t);for(var n=N(t),i=0;i<n.length;i++)this[n[i].unit](t[n[i].unit])}else if(t=Y(t),C(this[t]))return this[t](e);return this}function q(t,e,n){var i=""+Math.abs(t),a=e-i.length,r=t>=0;return(r?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+i}function Z(t,e,n,i){var a=i;"string"==typeof i&&(a=function(){return this[i]()}),t&&(Wi[t]=a),e&&(Wi[e[0]]=function(){return q(a.apply(this,arguments),e[1],e[2])}),n&&(Wi[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function X(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function J(t){var e,n,i=t.match(Ri);for(e=0,n=i.length;e<n;e++)Wi[i[e]]?i[e]=Wi[i[e]]:i[e]=X(i[e]);return function(e){var a,r="";for(a=0;a<n;a++)r+=i[a]instanceof Function?i[a].call(e,t):i[a];return r}}function K(t,e){return t.isValid()?(e=Q(e,t.localeData()),Vi[e]=Vi[e]||J(e),Vi[e](t)):t.localeData().invalidDate()}function Q(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(Li.lastIndex=0;i>=0&&Li.test(t);)t=t.replace(Li,n),Li.lastIndex=0,i-=1;return t}function $(t,e,n){ea[t]=C(e)?e:function(t,i){return t&&n?n:e}}function tt(t,e){return d(ea,t)?ea[t](e._strict,e._locale):new RegExp(et(t))}function et(t){return nt(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,a){return e||n||i||a}))}function nt(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function it(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),s(e)&&(i=function(t,n){n[e]=_(t)}),n=0;n<t.length;n++)na[t[n]]=i}function at(t,e){it(t,function(t,n,i,a){i._w=i._w||{},e(t,i._w,i,a)})}function rt(t,e,n){null!=e&&d(na,t)&&na[t](e,n._a,n,t)}function ot(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function st(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||fa).test(e)?"format":"standalone"][t.month()]:this._months}function lt(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[fa.test(e)?"format":"standalone"][t.month()]:this._monthsShort}function ut(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i<12;++i)r=h([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===e?(a=ha.call(this._shortMonthsParse,o),a!==-1?a:null):(a=ha.call(this._longMonthsParse,o),a!==-1?a:null):"MMM"===e?(a=ha.call(this._shortMonthsParse,o),a!==-1?a:(a=ha.call(this._longMonthsParse,o),a!==-1?a:null)):(a=ha.call(this._longMonthsParse,o),a!==-1?a:(a=ha.call(this._shortMonthsParse,o),a!==-1?a:null))}function dt(t,e,n){var i,a,r;if(this._monthsParseExact)return ut.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=h([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}function ct(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=_(e);else if(e=t.localeData().monthsParse(e),!s(e))return t;return n=Math.min(t.date(),ot(t.year(),e)),
11
+ t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function ht(e){return null!=e?(ct(this,e),t.updateOffset(this,!0),this):E(this,"Month")}function ft(){return ot(this.year(),this.month())}function gt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||pt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=pa),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function mt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||pt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=va),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function pt(){function t(t,e){return e.length-t.length}var e,n,i=[],a=[],r=[];for(e=0;e<12;e++)n=h([2e3,e]),i.push(this.monthsShort(n,"")),a.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(i.sort(t),a.sort(t),r.sort(t),e=0;e<12;e++)i[e]=nt(i[e]),a[e]=nt(a[e]);for(e=0;e<24;e++)r[e]=nt(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function vt(t){return bt(t)?366:365}function bt(t){return t%4===0&&t%100!==0||t%400===0}function yt(){return bt(this.year())}function xt(t,e,n,i,a,r,o){var s=new Date(t,e,n,i,a,r,o);return t<100&&t>=0&&isFinite(s.getFullYear())&&s.setFullYear(t),s}function kt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function _t(t,e,n){var i=7+e-n,a=(7+kt(t,0,i).getUTCDay()-e)%7;return-a+i-1}function wt(t,e,n,i,a){var r,o,s=(7+n-i)%7,l=_t(t,i,a),u=1+7*(e-1)+s+l;return u<=0?(r=t-1,o=vt(r)+u):u>vt(t)?(r=t+1,o=u-vt(t)):(r=t,o=u),{year:r,dayOfYear:o}}function St(t,e,n){var i,a,r=_t(t.year(),e,n),o=Math.floor((t.dayOfYear()-r-1)/7)+1;return o<1?(a=t.year()-1,i=o+Mt(a,e,n)):o>Mt(t.year(),e,n)?(i=o-Mt(t.year(),e,n),a=t.year()+1):(a=t.year(),i=o),{week:i,year:a}}function Mt(t,e,n){var i=_t(t,e,n),a=_t(t+1,e,n);return(vt(t)-i+a)/7}function Dt(t){return St(t,this._week.dow,this._week.doy).week}function Ct(){return this._week.dow}function Tt(){return this._week.doy}function Pt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function It(t){var e=St(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function At(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Ft(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Ot(t,e){return t?a(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:this._weekdays}function Rt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Lt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Vt(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)r=h([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===e?(a=ha.call(this._weekdaysParse,o),a!==-1?a:null):"ddd"===e?(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:null):(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:null):"dddd"===e?(a=ha.call(this._weekdaysParse,o),a!==-1?a:(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:null))):"ddd"===e?(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:(a=ha.call(this._weekdaysParse,o),a!==-1?a:(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:null))):(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:(a=ha.call(this._weekdaysParse,o),a!==-1?a:(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:null)))}function Wt(t,e,n){var i,a,r;if(this._weekdaysParseExact)return Vt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(a=h([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(a,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(a,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(a,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function Yt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=At(t,this.localeData()),this.add(t-e,"d")):e}function Bt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function zt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Ft(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Nt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Ut.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=wa),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ht(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Ut.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Sa),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Et(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Ut.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ma),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ut(){function t(t,e){return e.length-t.length}var e,n,i,a,r,o=[],s=[],l=[],u=[];for(e=0;e<7;e++)n=h([2e3,1]).day(e),i=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),r=this.weekdays(n,""),o.push(i),s.push(a),l.push(r),u.push(i),u.push(a),u.push(r);for(o.sort(t),s.sort(t),l.sort(t),u.sort(t),e=0;e<7;e++)s[e]=nt(s[e]),l[e]=nt(l[e]),u[e]=nt(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function jt(){return this.hours()%12||12}function Gt(){return this.hours()||24}function qt(t,e){Z(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Zt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Jt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function Qt(t){for(var e,n,i,a,r=0;r<t.length;){for(a=Kt(t[r]).split("-"),e=a.length,n=Kt(t[r+1]),n=n?n.split("-"):null;e>0;){if(i=$t(a.slice(0,e).join("-")))return i;if(n&&n.length>=e&&w(a,n,!0)>=e-1)break;e--}r++}return null}function $t(t){var i=null;if(!Ia[t]&&"undefined"!=typeof n&&n&&n.exports)try{i=Da._abbr,e("./locale/"+t),te(i)}catch(t){}return Ia[t]}function te(t,e){var n;return t&&(n=v(e)?ie(t):ee(t,e),n&&(Da=n)),Da._abbr}function ee(t,e){if(null!==e){var n=Pa;if(e.abbr=t,null!=Ia[t])D("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Ia[t]._config;else if(null!=e.parentLocale){if(null==Ia[e.parentLocale])return Aa[e.parentLocale]||(Aa[e.parentLocale]=[]),Aa[e.parentLocale].push({name:t,config:e}),null;n=Ia[e.parentLocale]._config}return Ia[t]=new I(P(n,e)),Aa[t]&&Aa[t].forEach(function(t){ee(t.name,t.config)}),te(t),Ia[t]}return delete Ia[t],null}function ne(t,e){if(null!=e){var n,i=Pa;null!=Ia[t]&&(i=Ia[t]._config),e=P(i,e),n=new I(e),n.parentLocale=Ia[t],Ia[t]=n,te(t)}else null!=Ia[t]&&(null!=Ia[t].parentLocale?Ia[t]=Ia[t].parentLocale:null!=Ia[t]&&delete Ia[t]);return Ia[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Da;if(!a(t)){if(e=$t(t))return e;t=[t]}return Qt(t)}function ae(){return Mi(Ia)}function re(t){var e,n=t._a;return n&&g(t).overflow===-2&&(e=n[aa]<0||n[aa]>11?aa:n[ra]<1||n[ra]>ot(n[ia],n[aa])?ra:n[oa]<0||n[oa]>24||24===n[oa]&&(0!==n[sa]||0!==n[la]||0!==n[ua])?oa:n[sa]<0||n[sa]>59?sa:n[la]<0||n[la]>59?la:n[ua]<0||n[ua]>999?ua:-1,g(t)._overflowDayOfYear&&(e<ia||e>ra)&&(e=ra),g(t)._overflowWeeks&&e===-1&&(e=da),g(t)._overflowWeekday&&e===-1&&(e=ca),g(t).overflow=e),t}function oe(t){var e,n,i,a,r,o,s=t._i,l=Fa.exec(s)||Oa.exec(s);if(l){for(g(t).iso=!0,e=0,n=La.length;e<n;e++)if(La[e][1].exec(l[1])){a=La[e][0],i=La[e][2]!==!1;break}if(null==a)return void(t._isValid=!1);if(l[3]){for(e=0,n=Va.length;e<n;e++)if(Va[e][1].exec(l[3])){r=(l[2]||" ")+Va[e][0];break}if(null==r)return void(t._isValid=!1)}if(!i&&null!=r)return void(t._isValid=!1);if(l[4]){if(!Ra.exec(l[4]))return void(t._isValid=!1);o="Z"}t._f=a+(r||"")+(o||""),he(t)}else t._isValid=!1}function se(e){var n=Wa.exec(e._i);return null!==n?void(e._d=new Date(+n[1])):(oe(e),void(e._isValid===!1&&(delete e._isValid,t.createFromInputFallback(e))))}function le(t,e,n){return null!=t?t:null!=e?e:n}function ue(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function de(t){var e,n,i,a,r=[];if(!t._d){for(i=ue(t),t._w&&null==t._a[ra]&&null==t._a[aa]&&ce(t),t._dayOfYear&&(a=le(t._a[ia],i[ia]),t._dayOfYear>vt(a)&&(g(t)._overflowDayOfYear=!0),n=kt(a,0,t._dayOfYear),t._a[aa]=n.getUTCMonth(),t._a[ra]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=r[e]=i[e];for(;e<7;e++)t._a[e]=r[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[oa]&&0===t._a[sa]&&0===t._a[la]&&0===t._a[ua]&&(t._nextDay=!0,t._a[oa]=0),t._d=(t._useUTC?kt:xt).apply(null,r),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[oa]=24)}}function ce(t){var e,n,i,a,r,o,s,l;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)r=1,o=4,n=le(e.GG,t._a[ia],St(xe(),1,4).year),i=le(e.W,1),a=le(e.E,1),(a<1||a>7)&&(l=!0);else{r=t._locale._week.dow,o=t._locale._week.doy;var u=St(xe(),r,o);n=le(e.gg,t._a[ia],u.year),i=le(e.w,u.week),null!=e.d?(a=e.d,(a<0||a>6)&&(l=!0)):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(l=!0)):a=r}i<1||i>Mt(n,r,o)?g(t)._overflowWeeks=!0:null!=l?g(t)._overflowWeekday=!0:(s=wt(n,i,a,r,o),t._a[ia]=s.year,t._dayOfYear=s.dayOfYear)}function he(e){if(e._f===t.ISO_8601)return void oe(e);e._a=[],g(e).empty=!0;var n,i,a,r,o,s=""+e._i,l=s.length,u=0;for(a=Q(e._f,e._locale).match(Ri)||[],n=0;n<a.length;n++)r=a[n],i=(s.match(tt(r,e))||[])[0],i&&(o=s.substr(0,s.indexOf(i)),o.length>0&&g(e).unusedInput.push(o),s=s.slice(s.indexOf(i)+i.length),u+=i.length),Wi[r]?(i?g(e).empty=!1:g(e).unusedTokens.push(r),rt(r,i,e)):e._strict&&!i&&g(e).unusedTokens.push(r);g(e).charsLeftOver=l-u,s.length>0&&g(e).unusedInput.push(s),e._a[oa]<=12&&g(e).bigHour===!0&&e._a[oa]>0&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[oa]=fe(e._locale,e._a[oa],e._meridiem),de(e),re(e)}function fe(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function ge(t){var e,n,i,a,r;if(0===t._f.length)return g(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;a<t._f.length;a++)r=0,e=b({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[a],he(e),m(e)&&(r+=g(e).charsLeftOver,r+=10*g(e).unusedTokens.length,g(e).score=r,(null==i||r<i)&&(i=r,n=e));c(t,n||e)}function me(t){if(!t._d){var e=B(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),de(t)}}function pe(t){var e=new y(re(ve(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function ve(t){var e=t._i,n=t._f;return t._locale=t._locale||ie(t._l),null===e||void 0===n&&""===e?p({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),x(e)?new y(re(e)):(l(e)?t._d=e:a(n)?ge(t):n?he(t):be(t),m(t)||(t._d=null),t))}function be(e){var n=e._i;void 0===n?e._d=new Date(t.now()):l(n)?e._d=new Date(n.valueOf()):"string"==typeof n?se(e):a(n)?(e._a=u(n.slice(0),function(t){return parseInt(t,10)}),de(e)):"object"==typeof n?me(e):s(n)?e._d=new Date(n):t.createFromInputFallback(e)}function ye(t,e,n,i,s){var l={};return n!==!0&&n!==!1||(i=n,n=void 0),(r(t)&&o(t)||a(t)&&0===t.length)&&(t=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=s,l._l=n,l._i=t,l._f=e,l._strict=i,pe(l)}function xe(t,e,n,i){return ye(t,e,n,i,!1)}function ke(t,e){var n,i;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return xe();for(n=e[0],i=1;i<e.length;++i)e[i].isValid()&&!e[i][t](n)||(n=e[i]);return n}function _e(){var t=[].slice.call(arguments,0);return ke("isBefore",t)}function we(){var t=[].slice.call(arguments,0);return ke("isAfter",t)}function Se(t){var e=B(t),n=e.year||0,i=e.quarter||0,a=e.month||0,r=e.week||0,o=e.day||0,s=e.hour||0,l=e.minute||0,u=e.second||0,d=e.millisecond||0;this._milliseconds=+d+1e3*u+6e4*l+1e3*s*60*60,this._days=+o+7*r,this._months=+a+3*i+12*n,this._data={},this._locale=ie(),this._bubble()}function Me(t){return t instanceof Se}function De(t){return t<0?Math.round(-1*t)*-1:Math.round(t)}function Ce(t,e){Z(t,0,0,function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+q(~~(t/60),2)+e+q(~~t%60,2)})}function Te(t,e){var n=(e||"").match(t);if(null===n)return null;var i=n[n.length-1]||[],a=(i+"").match(Na)||["-",0,0],r=+(60*a[1])+_(a[2]);return 0===r?0:"+"===a[0]?r:-r}function Pe(e,n){var i,a;return n._isUTC?(i=n.clone(),a=(x(e)||l(e)?e.valueOf():xe(e).valueOf())-i.valueOf(),i._d.setTime(i._d.valueOf()+a),t.updateOffset(i,!1),i):xe(e).local()}function Ie(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Ae(e,n){var i,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(e=Te(Qi,e),null===e)return this}else Math.abs(e)<16&&(e*=60);return!this._isUTC&&n&&(i=Ie(this)),this._offset=e,this._isUTC=!0,null!=i&&this.add(i,"m"),a!==e&&(!n||this._changeInProgress?qe(this,He(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ie(this)}function Fe(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Oe(t){return this.utcOffset(0,t)}function Re(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ie(this),"m")),this}function Le(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var t=Te(Ki,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Ve(t){return!!this.isValid()&&(t=t?xe(t).utcOffset():0,(this.utcOffset()-t)%60===0)}function We(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!v(this._isDSTShifted))return this._isDSTShifted;var t={};if(b(t,this),t=ve(t),t._a){var e=t._isUTC?h(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Be(){return!!this.isValid()&&!this._isUTC}function ze(){return!!this.isValid()&&this._isUTC}function Ne(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function He(t,e){var n,i,a,r=t,o=null;return Me(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:s(t)?(r={},e?r[e]=t:r.milliseconds=t):(o=Ha.exec(t))?(n="-"===o[1]?-1:1,r={y:0,d:_(o[ra])*n,h:_(o[oa])*n,m:_(o[sa])*n,s:_(o[la])*n,ms:_(De(1e3*o[ua]))*n}):(o=Ea.exec(t))?(n="-"===o[1]?-1:1,r={y:Ee(o[2],n),M:Ee(o[3],n),w:Ee(o[4],n),d:Ee(o[5],n),h:Ee(o[6],n),m:Ee(o[7],n),s:Ee(o[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(a=je(xe(r.from),xe(r.to)),r={},r.ms=a.milliseconds,r.M=a.months),i=new Se(r),Me(t)&&d(t,"_locale")&&(i._locale=t._locale),i}function Ee(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Ue(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function je(t,e){var n;return t.isValid()&&e.isValid()?(e=Pe(e,t),t.isBefore(e)?n=Ue(t,e):(n=Ue(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Ge(t,e){return function(n,i){var a,r;return null===i||isNaN(+i)||(D(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=i,i=r),n="string"==typeof n?+n:n,a=He(n,i),qe(this,a,t),this}}function qe(e,n,i,a){var r=n._milliseconds,o=De(n._days),s=De(n._months);e.isValid()&&(a=null==a||a,r&&e._d.setTime(e._d.valueOf()+r*i),o&&U(e,"Date",E(e,"Date")+o*i),s&&ct(e,E(e,"Month")+s*i),a&&t.updateOffset(e,o||s))}function Ze(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Xe(e,n){var i=e||xe(),a=Pe(i,this).startOf("day"),r=t.calendarFormat(this,a)||"sameElse",o=n&&(C(n[r])?n[r].call(this,i):n[r]);return this.format(o||this.localeData().calendar(r,this,xe(i)))}function Je(){return new y(this)}function Ke(t,e){var n=x(t)?t:xe(t);return!(!this.isValid()||!n.isValid())&&(e=Y(v(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())}function Qe(t,e){var n=x(t)?t:xe(t);return!(!this.isValid()||!n.isValid())&&(e=Y(v(e)?"millisecond":e),"millisecond"===e?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())}function $e(t,e,n,i){return i=i||"()",("("===i[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===i[1]?this.isBefore(e,n):!this.isAfter(e,n))}function tn(t,e){var n,i=x(t)?t:xe(t);return!(!this.isValid()||!i.isValid())&&(e=Y(e||"millisecond"),"millisecond"===e?this.valueOf()===i.valueOf():(n=i.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))}function en(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function nn(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function an(t,e,n){var i,a,r,o;return this.isValid()?(i=Pe(t,this),i.isValid()?(a=6e4*(i.utcOffset()-this.utcOffset()),e=Y(e),"year"===e||"month"===e||"quarter"===e?(o=rn(this,i),"quarter"===e?o/=3:"year"===e&&(o/=12)):(r=this-i,o="second"===e?r/1e3:"minute"===e?r/6e4:"hour"===e?r/36e5:"day"===e?(r-a)/864e5:"week"===e?(r-a)/6048e5:r),n?o:k(o)):NaN):NaN}function rn(t,e){var n,i,a=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(a,"months");return e-r<0?(n=t.clone().add(a-1,"months"),i=(e-r)/(r-n)):(n=t.clone().add(a+1,"months"),i=(e-r)/(n-r)),-(a+i)||0}function on(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function sn(){var t=this.clone().utc();return 0<t.year()&&t.year()<=9999?C(Date.prototype.toISOString)?this.toDate().toISOString():K(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):K(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function ln(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a="-MM-DD[T]HH:mm:ss.SSS",r=e+'[")]';return this.format(n+i+a+r)}function un(e){e||(e=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var n=K(this,e);return this.localeData().postformat(n)}function dn(t,e){return this.isValid()&&(x(t)&&t.isValid()||xe(t).isValid())?He({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function cn(t){return this.from(xe(),t)}function hn(t,e){return this.isValid()&&(x(t)&&t.isValid()||xe(t).isValid())?He({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function fn(t){return this.to(xe(),t)}function gn(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function mn(){return this._locale}function pn(t){switch(t=Y(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function vn(t){return t=Y(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function bn(){return this._d.valueOf()-6e4*(this._offset||0)}function yn(){return Math.floor(this.valueOf()/1e3)}function xn(){return new Date(this.valueOf())}function kn(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function _n(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function wn(){return this.isValid()?this.toISOString():null}function Sn(){return m(this)}function Mn(){return c({},g(this))}function Dn(){return g(this).overflow}function Cn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Tn(t,e){Z(0,[t,t.length],0,e)}function Pn(t){return On.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function In(t){return On.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function An(){return Mt(this.year(),1,4)}function Fn(){var t=this.localeData()._week;return Mt(this.year(),t.dow,t.doy)}function On(t,e,n,i,a){var r;return null==t?St(this,i,a).year:(r=Mt(t,i,a),e>r&&(e=r),Rn.call(this,t,e,n,i,a))}function Rn(t,e,n,i,a){var r=wt(t,e,n,i,a),o=kt(r.year,0,r.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Ln(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Vn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Wn(t,e){e[ua]=_(1e3*("0."+t))}function Yn(){return this._isUTC?"UTC":""}function Bn(){return this._isUTC?"Coordinated Universal Time":""}function zn(t){return xe(1e3*t)}function Nn(){return xe.apply(null,arguments).parseZone()}function Hn(t){return t}function En(t,e,n,i){var a=ie(),r=h().set(i,e);return a[n](r,t)}function Un(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return En(t,e,n,"month");var i,a=[];for(i=0;i<12;i++)a[i]=En(t,i,n,"month");return a}function jn(t,e,n,i){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,s(e)&&(n=e,e=void 0),e=e||"");var a=ie(),r=t?a._week.dow:0;if(null!=n)return En(e,(n+r)%7,i,"day");var o,l=[];for(o=0;o<7;o++)l[o]=En(e,(o+r)%7,i,"day");return l}function Gn(t,e){return Un(t,e,"months")}function qn(t,e){return Un(t,e,"monthsShort")}function Zn(t,e,n){return jn(t,e,n,"weekdays")}function Xn(t,e,n){return jn(t,e,n,"weekdaysShort")}function Jn(t,e,n){return jn(t,e,n,"weekdaysMin")}function Kn(){var t=this._data;return this._milliseconds=tr(this._milliseconds),this._days=tr(this._days),this._months=tr(this._months),t.milliseconds=tr(t.milliseconds),t.seconds=tr(t.seconds),t.minutes=tr(t.minutes),t.hours=tr(t.hours),t.months=tr(t.months),t.years=tr(t.years),this}function Qn(t,e,n,i){var a=He(e,n);return t._milliseconds+=i*a._milliseconds,t._days+=i*a._days,t._months+=i*a._months,t._bubble()}function $n(t,e){return Qn(this,t,e,1)}function ti(t,e){return Qn(this,t,e,-1)}function ei(t){return t<0?Math.floor(t):Math.ceil(t)}function ni(){var t,e,n,i,a,r=this._milliseconds,o=this._days,s=this._months,l=this._data;return r>=0&&o>=0&&s>=0||r<=0&&o<=0&&s<=0||(r+=864e5*ei(ai(s)+o),o=0,s=0),l.milliseconds=r%1e3,t=k(r/1e3),l.seconds=t%60,e=k(t/60),l.minutes=e%60,n=k(e/60),l.hours=n%24,o+=k(n/24),a=k(ii(o)),s+=a,o-=ei(ai(a)),i=k(s/12),s%=12,l.days=o,l.months=s,l.years=i,this}function ii(t){return 4800*t/146097}function ai(t){return 146097*t/4800}function ri(t){var e,n,i=this._milliseconds;if(t=Y(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+ii(e),"month"===t?n:n/12;switch(e=this._days+Math.round(ai(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function oi(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12)}function si(t){return function(){return this.as(t)}}function li(t){return t=Y(t),this[t+"s"]()}function ui(t){return function(){return this._data[t]}}function di(){return k(this.days()/7)}function ci(t,e,n,i,a){return a.relativeTime(e||1,!!n,t,i)}function hi(t,e,n){var i=He(t).abs(),a=pr(i.as("s")),r=pr(i.as("m")),o=pr(i.as("h")),s=pr(i.as("d")),l=pr(i.as("M")),u=pr(i.as("y")),d=a<vr.s&&["s",a]||r<=1&&["m"]||r<vr.m&&["mm",r]||o<=1&&["h"]||o<vr.h&&["hh",o]||s<=1&&["d"]||s<vr.d&&["dd",s]||l<=1&&["M"]||l<vr.M&&["MM",l]||u<=1&&["y"]||["yy",u];return d[2]=e,d[3]=+t>0,d[4]=n,ci.apply(null,d)}function fi(t){return void 0===t?pr:"function"==typeof t&&(pr=t,!0)}function gi(t,e){return void 0!==vr[t]&&(void 0===e?vr[t]:(vr[t]=e,!0))}function mi(t){var e=this.localeData(),n=hi(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function pi(){var t,e,n,i=br(this._milliseconds)/1e3,a=br(this._days),r=br(this._months);t=k(i/60),e=k(t/60),i%=60,t%=60,n=k(r/12),r%=12;var o=n,s=r,l=a,u=e,d=t,c=i,h=this.asSeconds();return h?(h<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||d||c?"T":"")+(u?u+"H":"")+(d?d+"M":"")+(c?c+"S":""):"P0D"}var vi,bi;bi=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i<n;i++)if(i in e&&t.call(this,e[i],i,e))return!0;return!1};var yi=bi,xi=t.momentProperties=[],ki=!1,_i={};t.suppressDeprecationWarnings=!1,t.deprecationHandler=null;var wi;wi=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)d(t,e)&&n.push(e);return n};var Si,Mi=wi,Di={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ci={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ti="Invalid date",Pi="%d",Ii=/\d{1,2}/,Ai={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Fi={},Oi={},Ri=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Li=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Vi={},Wi={},Yi=/\d/,Bi=/\d\d/,zi=/\d{3}/,Ni=/\d{4}/,Hi=/[+-]?\d{6}/,Ei=/\d\d?/,Ui=/\d\d\d\d?/,ji=/\d\d\d\d\d\d?/,Gi=/\d{1,3}/,qi=/\d{1,4}/,Zi=/[+-]?\d{1,6}/,Xi=/\d+/,Ji=/[+-]?\d+/,Ki=/Z|[+-]\d\d:?\d\d/gi,Qi=/Z|[+-]\d\d(?::?\d\d)?/gi,$i=/[+-]?\d+(\.\d{1,3})?/,ta=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ea={},na={},ia=0,aa=1,ra=2,oa=3,sa=4,la=5,ua=6,da=7,ca=8;Si=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1};var ha=Si;Z("M",["MM",2],"Mo",function(){return this.month()+1}),Z("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),Z("MMMM",0,0,function(t){return this.localeData().months(this,t)}),W("month","M"),z("month",8),$("M",Ei),$("MM",Ei,Bi),$("MMM",function(t,e){return e.monthsShortRegex(t)}),$("MMMM",function(t,e){return e.monthsRegex(t)}),it(["M","MM"],function(t,e){e[aa]=_(t)-1}),it(["MMM","MMMM"],function(t,e,n,i){var a=n._locale.monthsParse(t,i,n._strict);null!=a?e[aa]=a:g(n).invalidMonth=t});var fa=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,ga="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ma="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),pa=ta,va=ta;Z("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),Z(0,["YY",2],0,function(){return this.year()%100}),Z(0,["YYYY",4],0,"year"),Z(0,["YYYYY",5],0,"year"),Z(0,["YYYYYY",6,!0],0,"year"),W("year","y"),z("year",1),$("Y",Ji),$("YY",Ei,Bi),$("YYYY",qi,Ni),$("YYYYY",Zi,Hi),$("YYYYYY",Zi,Hi),it(["YYYYY","YYYYYY"],ia),it("YYYY",function(e,n){n[ia]=2===e.length?t.parseTwoDigitYear(e):_(e)}),it("YY",function(e,n){n[ia]=t.parseTwoDigitYear(e)}),it("Y",function(t,e){e[ia]=parseInt(t,10)}),t.parseTwoDigitYear=function(t){return _(t)+(_(t)>68?1900:2e3)};var ba=H("FullYear",!0);Z("w",["ww",2],"wo","week"),Z("W",["WW",2],"Wo","isoWeek"),W("week","w"),W("isoWeek","W"),z("week",5),z("isoWeek",5),$("w",Ei),$("ww",Ei,Bi),$("W",Ei),$("WW",Ei,Bi),at(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=_(t)});var ya={dow:0,doy:6};Z("d",0,"do","day"),Z("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),Z("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),Z("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),Z("e",0,0,"weekday"),Z("E",0,0,"isoWeekday"),W("day","d"),W("weekday","e"),W("isoWeekday","E"),z("day",11),z("weekday",11),z("isoWeekday",11),$("d",Ei),$("e",Ei),$("E",Ei),$("dd",function(t,e){return e.weekdaysMinRegex(t)}),$("ddd",function(t,e){return e.weekdaysShortRegex(t)}),$("dddd",function(t,e){return e.weekdaysRegex(t)}),at(["dd","ddd","dddd"],function(t,e,n,i){var a=n._locale.weekdaysParse(t,i,n._strict);null!=a?e.d=a:g(n).invalidWeekday=t}),at(["d","e","E"],function(t,e,n,i){e[i]=_(t)});var xa="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ka="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),_a="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),wa=ta,Sa=ta,Ma=ta;Z("H",["HH",2],0,"hour"),Z("h",["hh",2],0,jt),Z("k",["kk",2],0,Gt),Z("hmm",0,0,function(){return""+jt.apply(this)+q(this.minutes(),2)}),Z("hmmss",0,0,function(){return""+jt.apply(this)+q(this.minutes(),2)+q(this.seconds(),2)}),Z("Hmm",0,0,function(){return""+this.hours()+q(this.minutes(),2)}),Z("Hmmss",0,0,function(){return""+this.hours()+q(this.minutes(),2)+q(this.seconds(),2)}),qt("a",!0),qt("A",!1),W("hour","h"),z("hour",13),$("a",Zt),$("A",Zt),$("H",Ei),$("h",Ei),$("HH",Ei,Bi),$("hh",Ei,Bi),$("hmm",Ui),$("hmmss",ji),$("Hmm",Ui),$("Hmmss",ji),it(["H","HH"],oa),it(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),it(["h","hh"],function(t,e,n){e[oa]=_(t),g(n).bigHour=!0}),it("hmm",function(t,e,n){var i=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i)),g(n).bigHour=!0}),it("hmmss",function(t,e,n){var i=t.length-4,a=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i,2)),e[la]=_(t.substr(a)),g(n).bigHour=!0}),it("Hmm",function(t,e,n){var i=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i))}),it("Hmmss",function(t,e,n){var i=t.length-4,a=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i,2)),e[la]=_(t.substr(a))});var Da,Ca=/[ap]\.?m?\.?/i,Ta=H("Hours",!0),Pa={calendar:Di,longDateFormat:Ci,invalidDate:Ti,ordinal:Pi,ordinalParse:Ii,relativeTime:Ai,months:ga,monthsShort:ma,week:ya,weekdays:xa,weekdaysMin:_a,weekdaysShort:ka,meridiemParse:Ca},Ia={},Aa={},Fa=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Oa=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ra=/Z|[+-]\d\d(?::?\d\d)?/,La=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Va=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Wa=/^\/?Date\((\-?\d+)/i;
12
+ t.createFromInputFallback=M("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),t.ISO_8601=function(){};var Ya=M("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=xe.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:p()}),Ba=M("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=xe.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:p()}),za=function(){return Date.now?Date.now():+new Date};Ce("Z",":"),Ce("ZZ",""),$("Z",Qi),$("ZZ",Qi),it(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Te(Qi,t)});var Na=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var Ha=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ea=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;He.fn=Se.prototype;var Ua=Ge(1,"add"),ja=Ge(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ga=M("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});Z(0,["gg",2],0,function(){return this.weekYear()%100}),Z(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Tn("gggg","weekYear"),Tn("ggggg","weekYear"),Tn("GGGG","isoWeekYear"),Tn("GGGGG","isoWeekYear"),W("weekYear","gg"),W("isoWeekYear","GG"),z("weekYear",1),z("isoWeekYear",1),$("G",Ji),$("g",Ji),$("GG",Ei,Bi),$("gg",Ei,Bi),$("GGGG",qi,Ni),$("gggg",qi,Ni),$("GGGGG",Zi,Hi),$("ggggg",Zi,Hi),at(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=_(t)}),at(["gg","GG"],function(e,n,i,a){n[a]=t.parseTwoDigitYear(e)}),Z("Q",0,"Qo","quarter"),W("quarter","Q"),z("quarter",7),$("Q",Yi),it("Q",function(t,e){e[aa]=3*(_(t)-1)}),Z("D",["DD",2],"Do","date"),W("date","D"),z("date",9),$("D",Ei),$("DD",Ei,Bi),$("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),it(["D","DD"],ra),it("Do",function(t,e){e[ra]=_(t.match(Ei)[0],10)});var qa=H("Date",!0);Z("DDD",["DDDD",3],"DDDo","dayOfYear"),W("dayOfYear","DDD"),z("dayOfYear",4),$("DDD",Gi),$("DDDD",zi),it(["DDD","DDDD"],function(t,e,n){n._dayOfYear=_(t)}),Z("m",["mm",2],0,"minute"),W("minute","m"),z("minute",14),$("m",Ei),$("mm",Ei,Bi),it(["m","mm"],sa);var Za=H("Minutes",!1);Z("s",["ss",2],0,"second"),W("second","s"),z("second",15),$("s",Ei),$("ss",Ei,Bi),it(["s","ss"],la);var Xa=H("Seconds",!1);Z("S",0,0,function(){return~~(this.millisecond()/100)}),Z(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Z(0,["SSS",3],0,"millisecond"),Z(0,["SSSS",4],0,function(){return 10*this.millisecond()}),Z(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),Z(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),Z(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),Z(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),Z(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),W("millisecond","ms"),z("millisecond",16),$("S",Gi,Yi),$("SS",Gi,Bi),$("SSS",Gi,zi);var Ja;for(Ja="SSSS";Ja.length<=9;Ja+="S")$(Ja,Xi);for(Ja="S";Ja.length<=9;Ja+="S")it(Ja,Wn);var Ka=H("Milliseconds",!1);Z("z",0,0,"zoneAbbr"),Z("zz",0,0,"zoneName");var Qa=y.prototype;Qa.add=Ua,Qa.calendar=Xe,Qa.clone=Je,Qa.diff=an,Qa.endOf=vn,Qa.format=un,Qa.from=dn,Qa.fromNow=cn,Qa.to=hn,Qa.toNow=fn,Qa.get=j,Qa.invalidAt=Dn,Qa.isAfter=Ke,Qa.isBefore=Qe,Qa.isBetween=$e,Qa.isSame=tn,Qa.isSameOrAfter=en,Qa.isSameOrBefore=nn,Qa.isValid=Sn,Qa.lang=Ga,Qa.locale=gn,Qa.localeData=mn,Qa.max=Ba,Qa.min=Ya,Qa.parsingFlags=Mn,Qa.set=G,Qa.startOf=pn,Qa.subtract=ja,Qa.toArray=kn,Qa.toObject=_n,Qa.toDate=xn,Qa.toISOString=sn,Qa.inspect=ln,Qa.toJSON=wn,Qa.toString=on,Qa.unix=yn,Qa.valueOf=bn,Qa.creationData=Cn,Qa.year=ba,Qa.isLeapYear=yt,Qa.weekYear=Pn,Qa.isoWeekYear=In,Qa.quarter=Qa.quarters=Ln,Qa.month=ht,Qa.daysInMonth=ft,Qa.week=Qa.weeks=Pt,Qa.isoWeek=Qa.isoWeeks=It,Qa.weeksInYear=Fn,Qa.isoWeeksInYear=An,Qa.date=qa,Qa.day=Qa.days=Yt,Qa.weekday=Bt,Qa.isoWeekday=zt,Qa.dayOfYear=Vn,Qa.hour=Qa.hours=Ta,Qa.minute=Qa.minutes=Za,Qa.second=Qa.seconds=Xa,Qa.millisecond=Qa.milliseconds=Ka,Qa.utcOffset=Ae,Qa.utc=Oe,Qa.local=Re,Qa.parseZone=Le,Qa.hasAlignedHourOffset=Ve,Qa.isDST=We,Qa.isLocal=Be,Qa.isUtcOffset=ze,Qa.isUtc=Ne,Qa.isUTC=Ne,Qa.zoneAbbr=Yn,Qa.zoneName=Bn,Qa.dates=M("dates accessor is deprecated. Use date instead.",qa),Qa.months=M("months accessor is deprecated. Use month instead",ht),Qa.years=M("years accessor is deprecated. Use year instead",ba),Qa.zone=M("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Fe),Qa.isDSTShifted=M("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ye);var $a=I.prototype;$a.calendar=A,$a.longDateFormat=F,$a.invalidDate=O,$a.ordinal=R,$a.preparse=Hn,$a.postformat=Hn,$a.relativeTime=L,$a.pastFuture=V,$a.set=T,$a.months=st,$a.monthsShort=lt,$a.monthsParse=dt,$a.monthsRegex=mt,$a.monthsShortRegex=gt,$a.week=Dt,$a.firstDayOfYear=Tt,$a.firstDayOfWeek=Ct,$a.weekdays=Ot,$a.weekdaysMin=Lt,$a.weekdaysShort=Rt,$a.weekdaysParse=Wt,$a.weekdaysRegex=Nt,$a.weekdaysShortRegex=Ht,$a.weekdaysMinRegex=Et,$a.isPM=Xt,$a.meridiem=Jt,te("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),t.lang=M("moment.lang is deprecated. Use moment.locale instead.",te),t.langData=M("moment.langData is deprecated. Use moment.localeData instead.",ie);var tr=Math.abs,er=si("ms"),nr=si("s"),ir=si("m"),ar=si("h"),rr=si("d"),or=si("w"),sr=si("M"),lr=si("y"),ur=ui("milliseconds"),dr=ui("seconds"),cr=ui("minutes"),hr=ui("hours"),fr=ui("days"),gr=ui("months"),mr=ui("years"),pr=Math.round,vr={s:45,m:45,h:22,d:26,M:11},br=Math.abs,yr=Se.prototype;return yr.abs=Kn,yr.add=$n,yr.subtract=ti,yr.as=ri,yr.asMilliseconds=er,yr.asSeconds=nr,yr.asMinutes=ir,yr.asHours=ar,yr.asDays=rr,yr.asWeeks=or,yr.asMonths=sr,yr.asYears=lr,yr.valueOf=oi,yr._bubble=ni,yr.get=li,yr.milliseconds=ur,yr.seconds=dr,yr.minutes=cr,yr.hours=hr,yr.days=fr,yr.weeks=di,yr.months=gr,yr.years=mr,yr.humanize=mi,yr.toISOString=pi,yr.toString=pi,yr.toJSON=pi,yr.locale=gn,yr.localeData=mn,yr.toIsoString=M("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",pi),yr.lang=Ga,Z("X",0,0,"unix"),Z("x",0,0,"valueOf"),$("x",Ji),$("X",$i),it("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),it("x",function(t,e,n){n._d=new Date(_(t))}),t.version="2.17.1",i(xe),t.fn=Qa,t.min=_e,t.max=we,t.now=za,t.utc=h,t.unix=zn,t.months=Gn,t.isDate=l,t.locale=te,t.invalid=p,t.duration=He,t.isMoment=x,t.weekdays=Zn,t.parseZone=Nn,t.localeData=ie,t.isDuration=Me,t.monthsShort=qn,t.weekdaysMin=Jn,t.defineLocale=ee,t.updateLocale=ne,t.locales=ae,t.weekdaysShort=Xn,t.normalizeUnits=Y,t.relativeTimeRounding=fi,t.relativeTimeThreshold=gi,t.calendarFormat=Ze,t.prototype=Qa,t})},{}],7:[function(t,e,n){var i=t(28)();t(26)(i),t(42)(i),t(22)(i),t(31)(i),t(25)(i),t(21)(i),t(23)(i),t(24)(i),t(29)(i),t(33)(i),t(34)(i),t(32)(i),t(35)(i),t(30)(i),t(27)(i),t(36)(i),t(37)(i),t(38)(i),t(39)(i),t(40)(i),t(45)(i),t(43)(i),t(44)(i),t(46)(i),t(47)(i),t(48)(i),t(15)(i),t(16)(i),t(17)(i),t(18)(i),t(19)(i),t(20)(i),t(8)(i),t(9)(i),t(10)(i),t(11)(i),t(12)(i),t(13)(i),t(14)(i),window.Chart=e.exports=i},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,36:36,37:37,38:38,39:39,40:40,42:42,43:43,44:44,45:45,46:46,47:47,48:48,8:8,9:9}],8:[function(t,e,n){"use strict";e.exports=function(t){t.Bar=function(e,n){return n.type="bar",new t(e,n)}}},{}],9:[function(t,e,n){"use strict";e.exports=function(t){t.Bubble=function(e,n){return n.type="bubble",new t(e,n)}}},{}],10:[function(t,e,n){"use strict";e.exports=function(t){t.Doughnut=function(e,n){return n.type="doughnut",new t(e,n)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t){t.Line=function(e,n){return n.type="line",new t(e,n)}}},{}],12:[function(t,e,n){"use strict";e.exports=function(t){t.PolarArea=function(e,n){return n.type="polarArea",new t(e,n)}}},{}],13:[function(t,e,n){"use strict";e.exports=function(t){t.Radar=function(e,n){return n.type="radar",new t(e,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t){var e={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-1"}],yAxes:[{type:"linear",position:"left",id:"y-axis-1"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}};t.defaults.scatter=e,t.controllers.scatter=t.controllers.line,t.Scatter=function(e,n){return n.type="scatter",new t(e,n)}}},{}],15:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bar={hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}},t.controllers.bar=t.DatasetController.extend({dataElementType:t.elements.Rectangle,initialize:function(e,n){t.DatasetController.prototype.initialize.call(this,e,n);var i=this,a=i.getMeta(),r=i.getDataset();a.stack=r.stack,a.bar=!0},getStackCount:function(){var t=this,n=t.getMeta(),i=t.getScaleForId(n.yAxisID),a=[];return e.each(t.chart.data.datasets,function(e,n){var r=t.chart.getDatasetMeta(n);r.bar&&t.chart.isDatasetVisible(n)&&(i.options.stacked===!1||i.options.stacked===!0&&a.indexOf(r.stack)===-1||void 0===i.options.stacked&&(void 0===r.stack||a.indexOf(r.stack)===-1))&&a.push(r.stack)},t),a.length},update:function(t){var n=this;e.each(n.getMeta().data,function(e,i){n.updateElement(e,i,t)},n)},updateElement:function(t,n,i){var a=this,r=a.getMeta(),o=a.getScaleForId(r.xAxisID),s=a.getScaleForId(r.yAxisID),l=s.getBasePixel(),u=a.chart.options.elements.rectangle,d=t.custom||{},c=a.getDataset();t._xScale=o,t._yScale=s,t._datasetIndex=a.index,t._index=n;var h=a.getRuler(n);t._model={x:a.calculateBarX(n,a.index,h),y:i?l:a.calculateBarY(n,a.index),label:a.chart.data.labels[n],datasetLabel:c.label,horizontal:!1,base:i?l:a.calculateBarBase(a.index,n),width:a.calculateBarWidth(h),backgroundColor:d.backgroundColor?d.backgroundColor:e.getValueAtIndexOrDefault(c.backgroundColor,n,u.backgroundColor),borderSkipped:d.borderSkipped?d.borderSkipped:u.borderSkipped,borderColor:d.borderColor?d.borderColor:e.getValueAtIndexOrDefault(c.borderColor,n,u.borderColor),borderWidth:d.borderWidth?d.borderWidth:e.getValueAtIndexOrDefault(c.borderWidth,n,u.borderWidth)},t.pivot()},calculateBarBase:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.yAxisID),r=a.getBaseValue(),o=r;if(a.options.stacked===!0||void 0===a.options.stacked&&void 0!==i.stack){for(var s=n.chart,l=s.data.datasets,u=Number(l[t].data[e]),d=0;d<t;d++){var c=l[d],h=s.getDatasetMeta(d);if(h.bar&&h.yAxisID===a.id&&s.isDatasetVisible(d)&&i.stack===h.stack){var f=Number(c.data[e]);r+=u<0?Math.min(f,o):Math.max(f,o)}}return a.getPixelForValue(r)}return a.getBasePixel()},getRuler:function(){var t=this,e=t.getMeta(),n=t.getScaleForId(e.xAxisID),i=t.getStackCount(),a=n.width/n.ticks.length,r=a*n.options.categoryPercentage,o=(a-a*n.options.categoryPercentage)/2,s=r/i,l=s*n.options.barPercentage,u=s-s*n.options.barPercentage;return{stackCount:i,tickWidth:a,categoryWidth:r,categorySpacing:o,fullBarWidth:s,barWidth:l,barSpacing:u}},calculateBarWidth:function(t){var e=this,n=e.getMeta(),i=e.getScaleForId(n.xAxisID);return i.options.barThickness?i.options.barThickness:t.barWidth},getStackIndex:function(t){var e,n,i=this,a=i.chart.getDatasetMeta(t),r=i.getScaleForId(a.yAxisID),o=[a.stack];for(n=0;n<t;++n)e=this.chart.getDatasetMeta(n),e.bar&&this.chart.isDatasetVisible(n)&&(r.options.stacked===!1||r.options.stacked===!0&&o.indexOf(e.stack)===-1||void 0===r.options.stacked&&(void 0===e.stack||o.indexOf(e.stack)===-1))&&o.push(e.stack);return o.length-1},calculateBarX:function(t,e,n){var i=this,a=i.getMeta(),r=i.getScaleForId(a.xAxisID),o=i.getStackIndex(e),s=r.getPixelForValue(null,t,e,i.chart.isCombo);return s-=i.chart.isCombo?n.tickWidth/2:0,s+n.barWidth/2+n.categorySpacing+n.barWidth*o+n.barSpacing/2+n.barSpacing*o},calculateBarY:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.yAxisID),r=Number(n.getDataset().data[t]);if(a.options.stacked||void 0===a.options.stacked&&void 0!==i.stack){for(var o=a.getBaseValue(),s=o,l=o,u=0;u<e;u++){var d=n.chart.data.datasets[u],c=n.chart.getDatasetMeta(u);if(c.bar&&c.yAxisID===a.id&&n.chart.isDatasetVisible(u)&&i.stack===c.stack){var h=Number(d.data[t]);h<0?l+=h||0:s+=h||0}}return r<0?a.getPixelForValue(l+r):a.getPixelForValue(s+r)}return a.getPixelForValue(r)},draw:function(e){var n,i,a=this,r=e||1,o=a.getMeta().data,s=a.getDataset();for(t.canvasHelpers.clipArea(a.chart.chart.ctx,a.chart.chartArea),n=0,i=o.length;n<i;++n){var l=s.data[n];null===l||void 0===l||isNaN(l)||o[n].transition(r).draw()}t.canvasHelpers.unclipArea(a.chart.chart.ctx)},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model;r.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.hoverBackgroundColor,i,e.getHoverColor(r.backgroundColor)),r.borderColor=a.hoverBorderColor?a.hoverBorderColor:e.getValueAtIndexOrDefault(n.hoverBorderColor,i,e.getHoverColor(r.borderColor)),r.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:e.getValueAtIndexOrDefault(n.hoverBorderWidth,i,r.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model,o=this.chart.options.elements.rectangle;r.backgroundColor=a.backgroundColor?a.backgroundColor:e.getValueAtIndexOrDefault(n.backgroundColor,i,o.backgroundColor),r.borderColor=a.borderColor?a.borderColor:e.getValueAtIndexOrDefault(n.borderColor,i,o.borderColor),r.borderWidth=a.borderWidth?a.borderWidth:e.getValueAtIndexOrDefault(n.borderWidth,i,o.borderWidth)}}),t.defaults.horizontalBar={hover:{mode:"label"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{position:"left",type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{callbacks:{title:function(t,e){var n="";return t.length>0&&(t[0].yLabel?n=t[0].yLabel:e.labels.length>0&&t[0].index<e.labels.length&&(n=e.labels[t[0].index])),n},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n+": "+t.xLabel}}}},t.controllers.horizontalBar=t.controllers.bar.extend({getStackCount:function(){var t=this,n=t.getMeta(),i=t.getScaleForId(n.xAxisID),a=[];return e.each(t.chart.data.datasets,function(e,n){var r=t.chart.getDatasetMeta(n);r.bar&&t.chart.isDatasetVisible(n)&&(i.options.stacked===!1||i.options.stacked===!0&&a.indexOf(r.stack)===-1||void 0===i.options.stacked&&(void 0===r.stack||a.indexOf(r.stack)===-1))&&a.push(r.stack)},t),a.length},updateElement:function(t,n,i){var a=this,r=a.getMeta(),o=a.getScaleForId(r.xAxisID),s=a.getScaleForId(r.yAxisID),l=o.getBasePixel(),u=t.custom||{},d=a.getDataset(),c=a.chart.options.elements.rectangle;t._xScale=o,t._yScale=s,t._datasetIndex=a.index,t._index=n;var h=a.getRuler(n);t._model={x:i?l:a.calculateBarX(n,a.index),y:a.calculateBarY(n,a.index,h),label:a.chart.data.labels[n],datasetLabel:d.label,horizontal:!0,base:i?l:a.calculateBarBase(a.index,n),height:a.calculateBarHeight(h),backgroundColor:u.backgroundColor?u.backgroundColor:e.getValueAtIndexOrDefault(d.backgroundColor,n,c.backgroundColor),borderSkipped:u.borderSkipped?u.borderSkipped:c.borderSkipped,borderColor:u.borderColor?u.borderColor:e.getValueAtIndexOrDefault(d.borderColor,n,c.borderColor),borderWidth:u.borderWidth?u.borderWidth:e.getValueAtIndexOrDefault(d.borderWidth,n,c.borderWidth)},t.pivot()},calculateBarBase:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.xAxisID),r=a.getBaseValue(),o=r;if(a.options.stacked||void 0===a.options.stacked&&void 0!==i.stack){for(var s=n.chart,l=s.data.datasets,u=Number(l[t].data[e]),d=0;d<t;d++){var c=l[d],h=s.getDatasetMeta(d);if(h.bar&&h.xAxisID===a.id&&s.isDatasetVisible(d)&&i.stack===h.stack){var f=Number(c.data[e]);r+=u<0?Math.min(f,o):Math.max(f,o)}}return a.getPixelForValue(r)}return a.getBasePixel()},getRuler:function(){var t=this,e=t.getMeta(),n=t.getScaleForId(e.yAxisID),i=t.getStackCount(),a=n.height/n.ticks.length,r=a*n.options.categoryPercentage,o=(a-a*n.options.categoryPercentage)/2,s=r/i,l=s*n.options.barPercentage,u=s-s*n.options.barPercentage;return{stackCount:i,tickHeight:a,categoryHeight:r,categorySpacing:o,fullBarHeight:s,barHeight:l,barSpacing:u}},calculateBarHeight:function(t){var e=this,n=e.getMeta(),i=e.getScaleForId(n.yAxisID);return i.options.barThickness?i.options.barThickness:t.barHeight},getStackIndex:function(t){var e,n,i=this,a=i.chart.getDatasetMeta(t),r=i.getScaleForId(a.xAxisID),o=[a.stack];for(n=0;n<t;++n)e=this.chart.getDatasetMeta(n),e.bar&&this.chart.isDatasetVisible(n)&&(r.options.stacked===!1||r.options.stacked===!0&&o.indexOf(e.stack)===-1||void 0===r.options.stacked&&(void 0===e.stack||o.indexOf(e.stack)===-1))&&o.push(e.stack);return o.length-1},calculateBarX:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.xAxisID),r=Number(n.getDataset().data[t]);if(a.options.stacked||void 0===a.options.stacked&&void 0!==i.stack){for(var o=a.getBaseValue(),s=o,l=o,u=0;u<e;u++){var d=n.chart.data.datasets[u],c=n.chart.getDatasetMeta(u);if(c.bar&&c.xAxisID===a.id&&n.chart.isDatasetVisible(u)&&i.stack===c.stack){var h=Number(d.data[t]);h<0?l+=h||0:s+=h||0}}return r<0?a.getPixelForValue(l+r):a.getPixelForValue(s+r)}return a.getPixelForValue(r)},calculateBarY:function(t,e,n){var i=this,a=i.getMeta(),r=i.getScaleForId(a.yAxisID),o=i.getStackIndex(e),s=r.getPixelForValue(null,t,e,i.chart.isCombo);return s-=i.chart.isCombo?n.tickHeight/2:0,s+n.barHeight/2+n.categorySpacing+n.barHeight*o+n.barSpacing/2+n.barSpacing*o}})}},{}],16:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bubble={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}},t.controllers.bubble=t.DatasetController.extend({dataElementType:t.elements.Point,update:function(t){var n=this,i=n.getMeta(),a=i.data;e.each(a,function(e,i){n.updateElement(e,i,t)})},updateElement:function(n,i,a){var r=this,o=r.getMeta(),s=r.getScaleForId(o.xAxisID),l=r.getScaleForId(o.yAxisID),u=n.custom||{},d=r.getDataset(),c=d.data[i],h=r.chart.options.elements.point,f=r.index;e.extend(n,{_xScale:s,_yScale:l,_datasetIndex:f,_index:i,_model:{x:a?s.getPixelForDecimal(.5):s.getPixelForValue("object"==typeof c?c:NaN,i,f,r.chart.isCombo),y:a?l.getBasePixel():l.getPixelForValue(c,i,f),radius:a?0:u.radius?u.radius:r.getRadius(c),hitRadius:u.hitRadius?u.hitRadius:e.getValueAtIndexOrDefault(d.hitRadius,i,h.hitRadius)}}),t.DatasetController.prototype.removeHoverStyle.call(r,n,h);var g=n._model;g.skip=u.skip?u.skip:isNaN(g.x)||isNaN(g.y),n.pivot()},getRadius:function(t){return t.r||this.chart.options.elements.point.radius},setHoverStyle:function(n){var i=this;t.DatasetController.prototype.setHoverStyle.call(i,n);var a=i.chart.data.datasets[n._datasetIndex],r=n._index,o=n.custom||{},s=n._model;s.radius=o.hoverRadius?o.hoverRadius:e.getValueAtIndexOrDefault(a.hoverRadius,r,i.chart.options.elements.point.hoverRadius)+i.getRadius(a.data[r])},removeHoverStyle:function(e){var n=this;t.DatasetController.prototype.removeHoverStyle.call(n,e,n.chart.options.elements.point);var i=n.chart.data.datasets[e._datasetIndex].data[e._index],a=e.custom||{},r=e._model;r.radius=a.radius?a.radius:n.getRadius(i)}})}},{}],17:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults;n.doughnut={animation:{animateRotate:!0,animateScale:!1},aspectRatio:1,hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var r=t.getDatasetMeta(0),o=n.datasets[0],s=r.data[a],l=s&&s.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=l.backgroundColor?l.backgroundColor:u(o.backgroundColor,a,d.backgroundColor),h=l.borderColor?l.borderColor:u(o.borderColor,a,d.borderColor),f=l.borderWidth?l.borderWidth:u(o.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(o.data[a])||r.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)a=o.getDatasetMeta(n),a.data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:Math.PI*-.5,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,n){var i=n.labels[t.index],a=": "+n.datasets[t.datasetIndex].data[t.index];return e.isArray(i)?(i=i.slice(),i[0]+=a):i+=a,i}}}},n.pie=e.clone(n.doughnut),e.extend(n.pie,{cutoutPercentage:0}),t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var n=this,i=n.chart,a=i.chartArea,r=i.options,o=r.elements.arc,s=a.right-a.left-o.borderWidth,l=a.bottom-a.top-o.borderWidth,u=Math.min(s,l),d={x:0,y:0},c=n.getMeta(),h=r.cutoutPercentage,f=r.circumference;if(f<2*Math.PI){var g=r.rotation%(2*Math.PI);g+=2*Math.PI*(g>=Math.PI?-1:g<-Math.PI?1:0);var m=g+f,p={x:Math.cos(g),y:Math.sin(g)},v={x:Math.cos(m),y:Math.sin(m)},b=g<=0&&0<=m||g<=2*Math.PI&&2*Math.PI<=m,y=g<=.5*Math.PI&&.5*Math.PI<=m||g<=2.5*Math.PI&&2.5*Math.PI<=m,x=g<=-Math.PI&&-Math.PI<=m||g<=Math.PI&&Math.PI<=m,k=g<=.5*-Math.PI&&.5*-Math.PI<=m||g<=1.5*Math.PI&&1.5*Math.PI<=m,_=h/100,w={x:x?-1:Math.min(p.x*(p.x<0?1:_),v.x*(v.x<0?1:_)),y:k?-1:Math.min(p.y*(p.y<0?1:_),v.y*(v.y<0?1:_))},S={x:b?1:Math.max(p.x*(p.x>0?1:_),v.x*(v.x>0?1:_)),y:y?1:Math.max(p.y*(p.y>0?1:_),v.y*(v.y>0?1:_))},M={width:.5*(S.x-w.x),height:.5*(S.y-w.y)};u=Math.min(s/M.width,l/M.height),d={x:(S.x+w.x)*-.5,y:(S.y+w.y)*-.5}}i.borderWidth=n.getMaxBorderWidth(c.data),i.outerRadius=Math.max((u-i.borderWidth)/2,0),i.innerRadius=Math.max(h?i.outerRadius/100*h:0,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),i.offsetX=d.x*i.outerRadius,i.offsetY=d.y*i.outerRadius,c.total=n.calculateTotal(),n.outerRadius=i.outerRadius-i.radiusLength*n.getRingIndex(n.index),n.innerRadius=Math.max(n.outerRadius-i.radiusLength,0),e.each(c.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){var a=this,r=a.chart,o=r.chartArea,s=r.options,l=s.animation,u=(o.left+o.right)/2,d=(o.top+o.bottom)/2,c=s.rotation,h=s.rotation,f=a.getDataset(),g=i&&l.animateRotate?0:t.hidden?0:a.calculateCircumference(f.data[n])*(s.circumference/(2*Math.PI)),m=i&&l.animateScale?0:a.innerRadius,p=i&&l.animateScale?0:a.outerRadius,v=e.getValueAtIndexOrDefault;e.extend(t,{_datasetIndex:a.index,_index:n,_model:{x:u+r.offsetX,y:d+r.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:p,innerRadius:m,label:v(f.label,n,r.data.labels[n])}});var b=t._model;this.removeHoverStyle(t),i&&l.animateRotate||(0===n?b.startAngle=s.rotation:b.startAngle=a.getMeta().data[n-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,n=this.getDataset(),i=this.getMeta(),a=0;return e.each(i.data,function(e,i){t=n.data[i],isNaN(t)||e.hidden||(a+=Math.abs(t))}),a},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(t/e):0},getMaxBorderWidth:function(t){for(var e,n,i=0,a=this.index,r=t.length,o=0;o<r;o++)e=t[o]._model?t[o]._model.borderWidth:0,n=t[o]._chart?t[o]._chart.config.data.datasets[a].hoverBorderWidth:0,i=e>i?e:i,i=n>i?n:i;return i}})}},{}],18:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return n.getValueOrDefault(t.showLine,e.showLines)}var n=t.helpers;t.defaults.line={showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}},t.controllers.line=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,update:function(t){var i,a,r,o=this,s=o.getMeta(),l=s.dataset,u=s.data||[],d=o.chart.options,c=d.elements.line,h=o.getScaleForId(s.yAxisID),f=o.getDataset(),g=e(f,d);for(g&&(r=l.custom||{},void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),l._scale=h,l._datasetIndex=o.index,l._children=u,l._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:r.tension?r.tension:n.getValueOrDefault(f.lineTension,c.tension),backgroundColor:r.backgroundColor?r.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:f.borderWidth||c.borderWidth,borderColor:r.borderColor?r.borderColor:f.borderColor||c.borderColor,borderCapStyle:r.borderCapStyle?r.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:r.borderDash?r.borderDash:f.borderDash||c.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:r.fill?r.fill:void 0!==f.fill?f.fill:c.fill,steppedLine:r.steppedLine?r.steppedLine:n.getValueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:r.cubicInterpolationMode?r.cubicInterpolationMode:n.getValueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode),scaleTop:h.top,scaleBottom:h.bottom,scaleZero:h.getBasePixel()},l.pivot()),i=0,a=u.length;i<a;++i)o.updateElement(u[i],i,t);for(g&&0!==l._model.tension&&o.updateBezierControlPoints(),i=0,a=u.length;i<a;++i)u[i].pivot()},getPointBackgroundColor:function(t,e){var i=this.chart.options.elements.point.backgroundColor,a=this.getDataset(),r=t.custom||{};return r.backgroundColor?i=r.backgroundColor:a.pointBackgroundColor?i=n.getValueAtIndexOrDefault(a.pointBackgroundColor,e,i):a.backgroundColor&&(i=a.backgroundColor),i},getPointBorderColor:function(t,e){var i=this.chart.options.elements.point.borderColor,a=this.getDataset(),r=t.custom||{};return r.borderColor?i=r.borderColor:a.pointBorderColor?i=n.getValueAtIndexOrDefault(a.pointBorderColor,e,i):a.borderColor&&(i=a.borderColor),i},getPointBorderWidth:function(t,e){var i=this.chart.options.elements.point.borderWidth,a=this.getDataset(),r=t.custom||{};return isNaN(r.borderWidth)?isNaN(a.pointBorderWidth)?isNaN(a.borderWidth)||(i=a.borderWidth):i=n.getValueAtIndexOrDefault(a.pointBorderWidth,e,i):i=r.borderWidth,i},updateElement:function(t,e,i){var a,r,o=this,s=o.getMeta(),l=t.custom||{},u=o.getDataset(),d=o.index,c=u.data[e],h=o.getScaleForId(s.yAxisID),f=o.getScaleForId(s.xAxisID),g=o.chart.options.elements.point,m=o.chart.data.labels||[],p=1===m.length||1===u.data.length||o.chart.isCombo;void 0!==u.radius&&void 0===u.pointRadius&&(u.pointRadius=u.radius),void 0!==u.hitRadius&&void 0===u.pointHitRadius&&(u.pointHitRadius=u.hitRadius),a=f.getPixelForValue("object"==typeof c?c:NaN,e,d,p),r=i?h.getBasePixel():o.calculatePointY(c,e,d),t._xScale=f,t._yScale=h,t._datasetIndex=d,t._index=e,t._model={x:a,y:r,skip:l.skip||isNaN(a)||isNaN(r),radius:l.radius||n.getValueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:l.pointStyle||n.getValueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:o.getPointBackgroundColor(t,e),borderColor:o.getPointBorderColor(t,e),borderWidth:o.getPointBorderWidth(t,e),tension:s.dataset._model?s.dataset._model.tension:0,steppedLine:!!s.dataset._model&&s.dataset._model.steppedLine,hitRadius:l.hitRadius||n.getValueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,n){var i,a,r,o=this,s=o.chart,l=o.getMeta(),u=o.getScaleForId(l.yAxisID),d=0,c=0;if(u.options.stacked){for(i=0;i<n;i++)if(a=s.data.datasets[i],r=s.getDatasetMeta(i),"line"===r.type&&r.yAxisID===u.id&&s.isDatasetVisible(i)){var h=Number(u.getRightValue(a.data[e]));h<0?c+=h||0:d+=h||0}var f=Number(u.getRightValue(t));return f<0?u.getPixelForValue(c+f):u.getPixelForValue(d+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){function t(t,e,n){return Math.max(Math.min(t,n),e)}var e,i,a,r,o,s=this,l=s.getMeta(),u=s.chart.chartArea,d=l.data||[];if(l.dataset._model.spanGaps&&(d=d.filter(function(t){return!t._model.skip})),"monotone"===l.dataset._model.cubicInterpolationMode)n.splineCurveMonotone(d);else for(e=0,i=d.length;e<i;++e)a=d[e],r=a._model,o=n.splineCurve(n.previousItem(d,e)._model,r,n.nextItem(d,e)._model,l.dataset._model.tension),r.controlPointPreviousX=o.previous.x,r.controlPointPreviousY=o.previous.y,r.controlPointNextX=o.next.x,r.controlPointNextY=o.next.y;if(s.chart.options.elements.line.capBezierPoints)for(e=0,i=d.length;e<i;++e)r=d[e]._model,r.controlPointPreviousX=t(r.controlPointPreviousX,u.left,u.right),r.controlPointPreviousY=t(r.controlPointPreviousY,u.top,u.bottom),r.controlPointNextX=t(r.controlPointNextX,u.left,u.right),r.controlPointNextY=t(r.controlPointNextY,u.top,u.bottom)},draw:function(n){var i,a,r=this,o=r.getMeta(),s=o.data||[],l=n||1;for(i=0,a=s.length;i<a;++i)s[i].transition(l);for(t.canvasHelpers.clipArea(r.chart.chart.ctx,r.chart.chartArea),e(r.getDataset(),r.chart.options)&&o.dataset.transition(l).draw(),t.canvasHelpers.unclipArea(r.chart.chart.ctx),i=0,a=s.length;i<a;++i)s[i].draw(r.chart.chartArea)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model;r.radius=a.hoverRadius||n.getValueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),r.backgroundColor=a.hoverBackgroundColor||n.getValueAtIndexOrDefault(e.pointHoverBackgroundColor,i,n.getHoverColor(r.backgroundColor)),r.borderColor=a.hoverBorderColor||n.getValueAtIndexOrDefault(e.pointHoverBorderColor,i,n.getHoverColor(r.borderColor)),r.borderWidth=a.hoverBorderWidth||n.getValueAtIndexOrDefault(e.pointHoverBorderWidth,i,r.borderWidth)},removeHoverStyle:function(t){var e=this,i=e.chart.data.datasets[t._datasetIndex],a=t._index,r=t.custom||{},o=t._model;void 0!==i.radius&&void 0===i.pointRadius&&(i.pointRadius=i.radius),o.radius=r.radius||n.getValueAtIndexOrDefault(i.pointRadius,a,e.chart.options.elements.point.radius),o.backgroundColor=e.getPointBackgroundColor(t,a),o.borderColor=e.getPointBorderColor(t,a),o.borderWidth=e.getPointBorderWidth(t,a)}})}},{}],19:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.polarArea={scale:{type:"radialLinear",lineArc:!0,ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,aspectRatio:1,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("");
13
+ },legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var r=t.getDatasetMeta(0),o=n.datasets[0],s=r.data[a],l=s.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=l.backgroundColor?l.backgroundColor:u(o.backgroundColor,a,d.backgroundColor),h=l.borderColor?l.borderColor:u(o.borderColor,a,d.borderColor),f=l.borderWidth?l.borderWidth:u(o.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(o.data[a])||r.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)a=o.getDatasetMeta(n),a.data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}},t.controllers.polarArea=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,update:function(t){var n=this,i=n.chart,a=i.chartArea,r=n.getMeta(),o=i.options,s=o.elements.arc,l=Math.min(a.right-a.left,a.bottom-a.top);i.outerRadius=Math.max((l-s.borderWidth/2)/2,0),i.innerRadius=Math.max(o.cutoutPercentage?i.outerRadius/100*o.cutoutPercentage:1,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),n.outerRadius=i.outerRadius-i.radiusLength*n.index,n.innerRadius=n.outerRadius-i.radiusLength,r.count=n.countVisibleElements(),e.each(r.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){for(var a=this,r=a.chart,o=a.getDataset(),s=r.options,l=s.animation,u=r.scale,d=e.getValueAtIndexOrDefault,c=r.data.labels,h=a.calculateCircumference(o.data[n]),f=u.xCenter,g=u.yCenter,m=0,p=a.getMeta(),v=0;v<n;++v)isNaN(o.data[v])||p.data[v].hidden||++m;var b=s.startAngle,y=t.hidden?0:u.getDistanceFromCenterForValue(o.data[n]),x=b+h*m,k=x+(t.hidden?0:h),_=l.animateScale?0:u.getDistanceFromCenterForValue(o.data[n]);e.extend(t,{_datasetIndex:a.index,_index:n,_scale:u,_model:{x:f,y:g,innerRadius:0,outerRadius:i?_:y,startAngle:i&&l.animateRotate?b:x,endAngle:i&&l.animateRotate?b:k,label:d(c,n,c[n])}}),a.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var t=this.getDataset(),n=this.getMeta(),i=0;return e.each(n.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},calculateCircumference:function(t){var e=this.getMeta().count;return e>0&&!isNaN(t)?2*Math.PI/e:0}})}},{}],20:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.radar={aspectRatio:1,scale:{type:"radialLinear"},elements:{line:{tension:0}}},t.controllers.radar=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,linkScales:e.noop,update:function(t){var n=this,i=n.getMeta(),a=i.dataset,r=i.data,o=a.custom||{},s=n.getDataset(),l=n.chart.options.elements.line,u=n.chart.scale;void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),e.extend(i.dataset,{_datasetIndex:n.index,_children:r,_loop:!0,_model:{tension:o.tension?o.tension:e.getValueOrDefault(s.lineTension,l.tension),backgroundColor:o.backgroundColor?o.backgroundColor:s.backgroundColor||l.backgroundColor,borderWidth:o.borderWidth?o.borderWidth:s.borderWidth||l.borderWidth,borderColor:o.borderColor?o.borderColor:s.borderColor||l.borderColor,fill:o.fill?o.fill:void 0!==s.fill?s.fill:l.fill,borderCapStyle:o.borderCapStyle?o.borderCapStyle:s.borderCapStyle||l.borderCapStyle,borderDash:o.borderDash?o.borderDash:s.borderDash||l.borderDash,borderDashOffset:o.borderDashOffset?o.borderDashOffset:s.borderDashOffset||l.borderDashOffset,borderJoinStyle:o.borderJoinStyle?o.borderJoinStyle:s.borderJoinStyle||l.borderJoinStyle,scaleTop:u.top,scaleBottom:u.bottom,scaleZero:u.getBasePosition()}}),i.dataset.pivot(),e.each(r,function(e,i){n.updateElement(e,i,t)},n),n.updateBezierControlPoints()},updateElement:function(t,n,i){var a=this,r=t.custom||{},o=a.getDataset(),s=a.chart.scale,l=a.chart.options.elements.point,u=s.getPointPositionForValue(n,o.data[n]);e.extend(t,{_datasetIndex:a.index,_index:n,_scale:s,_model:{x:i?s.xCenter:u.x,y:i?s.yCenter:u.y,tension:r.tension?r.tension:e.getValueOrDefault(o.lineTension,a.chart.options.elements.line.tension),radius:r.radius?r.radius:e.getValueAtIndexOrDefault(o.pointRadius,n,l.radius),backgroundColor:r.backgroundColor?r.backgroundColor:e.getValueAtIndexOrDefault(o.pointBackgroundColor,n,l.backgroundColor),borderColor:r.borderColor?r.borderColor:e.getValueAtIndexOrDefault(o.pointBorderColor,n,l.borderColor),borderWidth:r.borderWidth?r.borderWidth:e.getValueAtIndexOrDefault(o.pointBorderWidth,n,l.borderWidth),pointStyle:r.pointStyle?r.pointStyle:e.getValueAtIndexOrDefault(o.pointStyle,n,l.pointStyle),hitRadius:r.hitRadius?r.hitRadius:e.getValueAtIndexOrDefault(o.hitRadius,n,l.hitRadius)}}),t._model.skip=r.skip?r.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,n=this.getMeta();e.each(n.data,function(i,a){var r=i._model,o=e.splineCurve(e.previousItem(n.data,a,!0)._model,r,e.nextItem(n.data,a,!0)._model,r.tension);r.controlPointPreviousX=Math.max(Math.min(o.previous.x,t.right),t.left),r.controlPointPreviousY=Math.max(Math.min(o.previous.y,t.bottom),t.top),r.controlPointNextX=Math.max(Math.min(o.next.x,t.right),t.left),r.controlPointNextY=Math.max(Math.min(o.next.y,t.bottom),t.top),i.pivot()})},draw:function(t){var n=this.getMeta(),i=t||1;e.each(n.data,function(t){t.transition(i)}),n.dataset.transition(i).draw(),e.each(n.data,function(t){t.draw()})},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,r=t._model;r.radius=i.hoverRadius?i.hoverRadius:e.getValueAtIndexOrDefault(n.pointHoverRadius,a,this.chart.options.elements.point.hoverRadius),r.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.pointHoverBackgroundColor,a,e.getHoverColor(r.backgroundColor)),r.borderColor=i.hoverBorderColor?i.hoverBorderColor:e.getValueAtIndexOrDefault(n.pointHoverBorderColor,a,e.getHoverColor(r.borderColor)),r.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:e.getValueAtIndexOrDefault(n.pointHoverBorderWidth,a,r.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,r=t._model,o=this.chart.options.elements.point;r.radius=i.radius?i.radius:e.getValueAtIndexOrDefault(n.radius,a,o.radius),r.backgroundColor=i.backgroundColor?i.backgroundColor:e.getValueAtIndexOrDefault(n.pointBackgroundColor,a,o.backgroundColor),r.borderColor=i.borderColor?i.borderColor:e.getValueAtIndexOrDefault(n.pointBorderColor,a,o.borderColor),r.borderWidth=i.borderWidth?i.borderWidth:e.getValueAtIndexOrDefault(n.pointBorderWidth,a,o.borderWidth)}})}},{}],21:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.animation={duration:1e3,easing:"easeOutQuart",onProgress:e.noop,onComplete:e.noop},t.Animation=t.Element.extend({currentStep:null,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,n,i){var a=this;i||(t.animating=!0);for(var r=0;r<a.animations.length;++r)if(a.animations[r].chartInstance===t)return void(a.animations[r].animationObject=e);a.animations.push({chartInstance:t,animationObject:e}),1===a.animations.length&&a.requestAnimationFrame()},cancelAnimation:function(t){var n=e.findIndex(this.animations,function(e){return e.chartInstance===t});n!==-1&&(this.animations.splice(n,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=e.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var t=this,e=Date.now(),n=0;t.dropFrames>1&&(n=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1);for(var i=0;i<t.animations.length;)null===t.animations[i].animationObject.currentStep&&(t.animations[i].animationObject.currentStep=0),t.animations[i].animationObject.currentStep+=1+n,t.animations[i].animationObject.currentStep>t.animations[i].animationObject.numSteps&&(t.animations[i].animationObject.currentStep=t.animations[i].animationObject.numSteps),t.animations[i].animationObject.render(t.animations[i].chartInstance,t.animations[i].animationObject),t.animations[i].animationObject.onAnimationProgress&&t.animations[i].animationObject.onAnimationProgress.call&&t.animations[i].animationObject.onAnimationProgress.call(t.animations[i].chartInstance,t.animations[i]),t.animations[i].animationObject.currentStep===t.animations[i].animationObject.numSteps?(t.animations[i].animationObject.onAnimationComplete&&t.animations[i].animationObject.onAnimationComplete.call&&t.animations[i].animationObject.onAnimationComplete.call(t.animations[i].chartInstance,t.animations[i]),t.animations[i].chartInstance.animating=!1,t.animations.splice(i,1)):++i;var a=Date.now(),r=(a-e)/t.frameDuration;t.dropFrames+=r,t.animations.length>0&&t.requestAnimationFrame()}}}},{}],22:[function(t,e,n){"use strict";e.exports=function(t){var e=t.canvasHelpers={};e.drawPoint=function(e,n,i,a,r){var o,s,l,u,d,c;if("object"==typeof n&&(o=n.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return void e.drawImage(n,a-n.width/2,r-n.height/2);if(!(isNaN(i)||i<=0)){switch(n){default:e.beginPath(),e.arc(a,r,i,0,2*Math.PI),e.closePath(),e.fill();break;case"triangle":e.beginPath(),s=3*i/Math.sqrt(3),d=s*Math.sqrt(3)/2,e.moveTo(a-s/2,r+d/3),e.lineTo(a+s/2,r+d/3),e.lineTo(a,r-2*d/3),e.closePath(),e.fill();break;case"rect":c=1/Math.SQRT2*i,e.beginPath(),e.fillRect(a-c,r-c,2*c,2*c),e.strokeRect(a-c,r-c,2*c,2*c);break;case"rectRounded":var h=i/Math.SQRT2,f=a-h,g=r-h,m=Math.SQRT2*i;t.helpers.drawRoundedRectangle(e,f,g,m,m,i/2),e.fill();break;case"rectRot":c=1/Math.SQRT2*i,e.beginPath(),e.moveTo(a-c,r),e.lineTo(a,r+c),e.lineTo(a+c,r),e.lineTo(a,r-c),e.closePath(),e.fill();break;case"cross":e.beginPath(),e.moveTo(a,r+i),e.lineTo(a,r-i),e.moveTo(a-i,r),e.lineTo(a+i,r),e.closePath();break;case"crossRot":e.beginPath(),l=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-l,r-u),e.lineTo(a+l,r+u),e.moveTo(a-l,r+u),e.lineTo(a+l,r-u),e.closePath();break;case"star":e.beginPath(),e.moveTo(a,r+i),e.lineTo(a,r-i),e.moveTo(a-i,r),e.lineTo(a+i,r),l=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-l,r-u),e.lineTo(a+l,r+u),e.moveTo(a-l,r+u),e.lineTo(a+l,r-u),e.closePath();break;case"line":e.beginPath(),e.moveTo(a-i,r),e.lineTo(a+i,r),e.closePath();break;case"dash":e.beginPath(),e.moveTo(a,r),e.lineTo(a+i,r),e.closePath()}e.stroke()}},e.clipArea=function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},e.unclipArea=function(t){t.restore()}}},{}],23:[function(t,e,n){"use strict";e.exports=function(t){function e(e){e=e||{};var n=e.data=e.data||{};return n.datasets=n.datasets||[],n.labels=n.labels||[],e.options=i.configMerge(t.defaults.global,t.defaults[e.type],e.options||{}),e}function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&e.scales.xAxes.concat(e.scales.yAxes).forEach(function(e){t.scales[e.id].options=e}),t.tooltip._options=e.tooltips}var i=t.helpers,a=t.plugins,r=t.platform;t.types={},t.instances={},t.controllers={},t.Controller=function(n,a,o){var s=this;a=e(a);var l=r.acquireContext(n,a),u=l&&l.canvas,d=u&&u.height,c=u&&u.width;return o.ctx=l,o.canvas=u,o.config=a,o.width=c,o.height=d,o.aspectRatio=d?c/d:null,s.id=i.uid(),s.chart=o,s.config=a,s.options=a.options,s._bufferedRender=!1,t.instances[s.id]=s,Object.defineProperty(s,"data",{get:function(){return s.config.data}}),l&&u?(s.initialize(),s.update(),s):(console.error("Failed to create chart: can't acquire context from the given item"),s)},i.extend(t.Controller.prototype,{initialize:function(){var t=this;return a.notify(t,"beforeInit"),i.retinaScale(t.chart),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildScales(),t.initToolTip(),a.notify(t,"afterInit"),t},clear:function(){return i.clear(this.chart),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,n=e.chart,r=e.options,o=n.canvas,s=r.maintainAspectRatio&&n.aspectRatio||null,l=Math.floor(i.getMaximumWidth(o)),u=Math.floor(s?l/s:i.getMaximumHeight(o));if((n.width!==l||n.height!==u)&&(o.width=n.width=l,o.height=n.height=u,o.style.width=l+"px",o.style.height=u+"px",i.retinaScale(n),!t)){var d={width:l,height:u};a.notify(e,"resize",[d]),e.options.onResize&&e.options.onResize(e,d),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;i.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),i.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),n&&(n.id=n.id||"scale")},buildScales:function(){var e=this,n=e.options,a=e.scales={},r=[];n.scales&&(r=r.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear"}}))),n.scale&&r.push({options:n.scale,dtype:"radialLinear",isDefault:!0}),i.each(r,function(n){var r=n.options,o=i.getValueOrDefault(r.type,n.dtype),s=t.scaleService.getScaleConstructor(o);if(s){var l=new s({id:r.id,options:r,ctx:e.chart.ctx,chart:e});a[l.id]=l,n.isDefault&&(e.scale=l)}}),t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,n=[],a=[];if(i.each(e.data.datasets,function(i,r){var o=e.getDatasetMeta(r);o.type||(o.type=i.type||e.config.type),n.push(o.type),o.controller?o.controller.updateIndex(r):(o.controller=new t.controllers[o.type](e,r),a.push(o.controller))},e),n.length>1)for(var r=1;r<n.length;r++)if(n[r]!==n[r-1]){e.isCombo=!0;break}return a},resetElements:function(){var t=this;i.each(t.data.datasets,function(e,n){t.getDatasetMeta(n).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t,e){var r=this;if(n(r),a.notify(r,"beforeUpdate")!==!1){r.tooltip._data=r.data;var o=r.buildOrUpdateControllers();i.each(r.data.datasets,function(t,e){r.getDatasetMeta(e).controller.buildOrUpdateElements()},r),r.updateLayout(),i.each(o,function(t){t.reset()}),r.updateDatasets(),a.notify(r,"afterUpdate"),r._bufferedRender?r._bufferedRequest={lazy:e,duration:t}:r.render(t,e)}},updateLayout:function(){var e=this;a.notify(e,"beforeLayout")!==!1&&(t.layoutService.update(this,this.chart.width,this.chart.height),a.notify(e,"afterScaleUpdate"),a.notify(e,"afterLayout"))},updateDatasets:function(){var t=this;if(a.notify(t,"beforeDatasetsUpdate")!==!1){for(var e=0,n=t.data.datasets.length;e<n;++e)t.getDatasetMeta(e).controller.update();a.notify(t,"afterDatasetsUpdate")}},render:function(e,n){var r=this;if(a.notify(r,"beforeRender")!==!1){var o=r.options.animation,s=function(){a.notify(r,"afterRender");var t=o&&o.onComplete;t&&t.call&&t.call(r)};if(o&&("undefined"!=typeof e&&0!==e||"undefined"==typeof e&&0!==o.duration)){var l=new t.Animation;l.numSteps=(e||o.duration)/16.66,l.easing=o.easing,l.render=function(t,e){var n=i.easingEffects[e.easing],a=e.currentStep/e.numSteps,r=n(a);t.draw(r,a,e.currentStep)},l.onAnimationProgress=o.onProgress,l.onAnimationComplete=s,t.animationService.addAnimation(r,l,e,n)}else r.draw(),s();return r}},draw:function(t){var e=this;e.clear(),void 0!==t&&null!==t||(t=1),a.notify(e,"beforeDraw",[t])!==!1&&(i.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&&e.scale.draw(),e.drawDatasets(t),e.tooltip.transition(t).draw(),a.notify(e,"afterDraw",[t]))},drawDatasets:function(t){var e=this;a.notify(e,"beforeDatasetsDraw",[t])!==!1&&(i.each(e.data.datasets,function(n,i){e.isDatasetVisible(i)&&e.getDatasetMeta(i).controller.draw(t)},e,!0),a.notify(e,"afterDatasetsDraw",[t]))},getElementAtEvent:function(e){return t.Interaction.modes.single(this,e)},getElementsAtEvent:function(e){return t.Interaction.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return t.Interaction.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,n,i){var a=t.Interaction.modes[n];return"function"==typeof a?a(this,e,i):[]},getDatasetAtEvent:function(e){return t.Interaction.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(t){var e=this,n=e.data.datasets[t];n._meta||(n._meta={});var i=n._meta[e.id];return i||(i=n._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroy:function(){var e,n,o,s=this,l=s.chart.canvas;for(s.stop(),n=0,o=s.data.datasets.length;n<o;++n)e=s.getDatasetMeta(n),e.controller&&(e.controller.destroy(),e.controller=null);l&&(s.unbindEvents(),i.clear(s.chart),r.releaseContext(s.chart.ctx),s.chart.canvas=null,s.chart.ctx=null),a.notify(s,"destroy"),delete t.instances[s.id]},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new t.Tooltip({_chart:e.chart,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e),e.tooltip.initialize()},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};i.each(t.options.events,function(i){r.addEventListener(t,i,n),e[i]=n}),t.options.responsive&&(n=function(){t.resize()},r.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,i.each(e,function(e,n){r.removeEventListener(t,n,e)}))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"setHoverStyle":"removeHoverStyle";for(a=0,r=t.length;a<r;++a)i=t[a],i&&this.getDatasetMeta(i._datasetIndex).controller[o](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(a.notify(e,"beforeEvent",[t])!==!1){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);i|=n&&n.handleEvent(t),a.notify(e,"afterEvent",[t]);var r=e._bufferedRequest;return r?e.render(r.duration,r.lazy):i&&!e.animating&&(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e=this,n=e.options||{},a=n.hover,r=!1;return e.lastActive=e.lastActive||[],"mouseout"===t.type?e.active=[]:e.active=e.getElementsAtEventForMode(t,a.mode,a),a.onHover&&a.onHover.call(e,t.native,e.active),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(e,t.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,a.mode,!1),e.active.length&&a.mode&&e.updateHoverStyle(e.active,a.mode,!0),r=!i.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,r}})}},{}],24:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t._chartjs?void t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),void a.forEach(function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),r=a.apply(this,e);return i.each(t._chartjs.listeners,function(t){"function"==typeof t[n]&&t[n].apply(t,e)}),r}})}))}function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,r=i.indexOf(e);r!==-1&&i.splice(r,1),i.length>0||(a.forEach(function(e){delete t[e]}),delete t._chartjs)}}var i=t.helpers,a=["push","pop","shift","splice","unshift"];t.DatasetController=function(t,e){this.initialize(t,e)},i.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null===e.xAxisID&&(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null===e.yAxisID&&(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&n(this._data,this)},createMetaDataset:function(){var t=this,e=t.datasetElementType;return e&&new e({_chart:t.chart.chart,_datasetIndex:t.index})},createMetaData:function(t){var e=this,n=e.dataElementType;return n&&new n({_chart:e.chart.chart,_datasetIndex:e.index,_index:t})},addElements:function(){var t,e,n=this,i=n.getMeta(),a=n.getDataset().data||[],r=i.data;for(t=0,e=a.length;t<e;++t)r[t]=r[t]||n.createMetaData(t);i.dataset=i.dataset||n.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t=this,i=t.getDataset(),a=i.data||(i.data=[]);t._data!==a&&(t._data&&n(t._data,t),e(a,t),t._data=a),t.resyncElements()},update:i.noop,draw:function(t){var e,n,i=t||1,a=this.getMeta().data;for(e=0,n=a.length;e<n;++e)a[e].transition(i).draw()},removeHoverStyle:function(t,e){var n=this.chart.data.datasets[t._datasetIndex],a=t._index,r=t.custom||{},o=i.getValueAtIndexOrDefault,s=t._model;s.backgroundColor=r.backgroundColor?r.backgroundColor:o(n.backgroundColor,a,e.backgroundColor),s.borderColor=r.borderColor?r.borderColor:o(n.borderColor,a,e.borderColor),s.borderWidth=r.borderWidth?r.borderWidth:o(n.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},r=i.getValueAtIndexOrDefault,o=i.getHoverColor,s=t._model;s.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:r(e.hoverBackgroundColor,n,o(s.backgroundColor)),s.borderColor=a.hoverBorderColor?a.hoverBorderColor:r(e.hoverBorderColor,n,o(s.borderColor)),s.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:r(e.hoverBorderWidth,n,s.borderWidth)},resyncElements:function(){var t=this,e=t.getMeta(),n=t.getDataset().data,i=e.data.length,a=n.length;a<i?e.data.splice(a,i-a):a>i&&t.insertElements(i,a-i)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=i.inherits}},{}],25:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.elements={},t.Element=function(t){e.extend(this,t),this.initialize.apply(this,arguments)},e.extend(t.Element.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=e.clone(t._model)),t._start=e.clone(t._view),t},transition:function(t){var n=this;return n._view||(n._view=e.clone(n._model)),1===t?(n._view=n._model,n._start=null,n):(n._start||n.pivot(),e.each(n._model,function(i,a){if("_"===a[0]);else if(n._view.hasOwnProperty(a))if(i===n._view[a]);else if("string"==typeof i)try{var r=e.color(n._model[a]).mix(e.color(n._start[a]),t);n._view[a]=r.rgbString()}catch(t){n._view[a]=i}else if("number"==typeof i){var o=void 0!==n._start[a]&&isNaN(n._start[a])===!1?n._start[a]:0;n._view[a]=(n._model[a]-o)*t+o}else n._view[a]=i;else"number"!=typeof i||isNaN(n._view[a])?n._view[a]=i:n._view[a]=i*t},n),n)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return e.isNumber(this._model.x)&&e.isNumber(this._model.y)}}),t.Element.extend=e.inherits}},{}],26:[function(t,e,n){"use strict";var i=t(2);e.exports=function(t){function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),t.indexOf("%")!==-1&&(i=i/100*e.parentNode[n])):i=t,i}function n(t){return void 0!==t&&null!==t&&"none"!==t}function a(t,i,a){var r=document.defaultView,o=t.parentNode,s=r.getComputedStyle(t)[i],l=r.getComputedStyle(o)[i],u=n(s),d=n(l),c=Number.POSITIVE_INFINITY;return u||d?Math.min(u?e(s,t,a):c,d?e(l,o,a):c):"none"}var r=t.helpers={};r.each=function(t,e,n,i){var a,o;if(r.isArray(t))if(o=t.length,i)for(a=o-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<o;a++)e.call(n,t[a],a);else if("object"==typeof t){var s=Object.keys(t);for(o=s.length,a=0;a<o;a++)e.call(n,t[s[a]],s[a])}},r.clone=function(t){var e={};return r.each(t,function(t,n){r.isArray(t)?e[n]=t.slice(0):"object"==typeof t&&null!==t?e[n]=r.clone(t):e[n]=t}),e},r.extend=function(t){for(var e=function(e,n){t[n]=e},n=1,i=arguments.length;n<i;n++)r.each(arguments[n],e);return t},r.configMerge=function(e){var n=r.clone(e);return r.each(Array.prototype.slice.call(arguments,1),function(e){r.each(e,function(e,i){var a=n.hasOwnProperty(i),o=a?n[i]:{};"scales"===i?n[i]=r.scaleMerge(o,e):"scale"===i?n[i]=r.configMerge(o,t.scaleService.getScaleDefaults(e.type),e):!a||"object"!=typeof o||r.isArray(o)||null===o||"object"!=typeof e||r.isArray(e)?n[i]=e:n[i]=r.configMerge(o,e)})}),n},r.scaleMerge=function(e,n){var i=r.clone(e);return r.each(n,function(e,n){"xAxes"===n||"yAxes"===n?i.hasOwnProperty(n)?r.each(e,function(e,a){var o=r.getValueOrDefault(e.type,"xAxes"===n?"category":"linear"),s=t.scaleService.getScaleDefaults(o);a>=i[n].length||!i[n][a].type?i[n].push(r.configMerge(s,e)):e.type&&e.type!==i[n][a].type?i[n][a]=r.configMerge(i[n][a],s,e):i[n][a]=r.configMerge(i[n][a],e)}):(i[n]=[],r.each(e,function(e){var a=r.getValueOrDefault(e.type,"xAxes"===n?"category":"linear");i[n].push(r.configMerge(t.scaleService.getScaleDefaults(a),e))})):i.hasOwnProperty(n)&&"object"==typeof i[n]&&null!==i[n]&&"object"==typeof e?i[n]=r.configMerge(i[n],e):i[n]=e}),i},r.getValueAtIndexOrDefault=function(t,e,n){return void 0===t||null===t?n:r.isArray(t)?e<t.length?t[e]:n:t},r.getValueOrDefault=function(t,e){return void 0===t?e:t},r.indexOf=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;n<i;++n)if(t[n]===e)return n;return-1},r.where=function(t,e){if(r.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return r.each(t,function(t){e(t)&&n.push(t)}),n},r.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},r.findNextWhere=function(t,e,n){void 0!==n&&null!==n||(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},r.findPreviousWhere=function(t,e,n){void 0!==n&&null!==n||(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},r.inherits=function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=r.inherits,t&&r.extend(n.prototype,t),n.__super__=e.prototype,n},r.noop=function(){},r.uid=function(){var t=0;return function(){return t++}}(),r.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},r.almostEquals=function(t,e,n){return Math.abs(t-e)<n},r.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},r.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},r.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},r.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1},r.log10=Math.log10?function(t){return Math.log10(t)}:function(t){return Math.log(t)/Math.LN10},r.toRadians=function(t){return t*(Math.PI/180)},r.toDegrees=function(t){return t*(180/Math.PI)},r.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},r.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},r.aliasPixel=function(t){return t%2===0?0:.5},r.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l);u=isNaN(u)?0:u,d=isNaN(d)?0:d;var c=i*u,h=i*d;return{previous:{x:r.x-c*(o.x-a.x),y:r.y-c*(o.y-a.y)},next:{x:r.x+h*(o.x-a.x),y:r.y+h*(o.y-a.y)}}},r.EPSILON=Number.EPSILON||1e-14,r.splineCurveMonotone=function(t){var e,n,i,a,o=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),s=o.length;for(e=0;e<s;++e)if(i=o[e],!i.model.skip){if(n=e>0?o[e-1]:null,a=e<s-1?o[e+1]:null,a&&!a.model.skip){var l=a.model.x-i.model.x;i.deltaK=0!==l?(a.model.y-i.model.y)/l:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}var u,d,c,h;for(e=0;e<s-1;++e)i=o[e],a=o[e+1],i.model.skip||a.model.skip||(r.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(u=i.mK/i.deltaK,d=a.mK/i.deltaK,h=Math.pow(u,2)+Math.pow(d,2),h<=9||(c=3/Math.sqrt(h),i.mK=u*c*i.deltaK,a.mK=d*c*i.deltaK)));var f;for(e=0;e<s;++e)i=o[e],i.model.skip||(n=e>0?o[e-1]:null,a=e<s-1?o[e+1]:null,n&&!n.model.skip&&(f=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-f,i.model.controlPointPreviousY=i.model.y-f*i.mK),a&&!a.model.skip&&(f=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+f,i.model.controlPointNextY=i.model.y+f*i.mK))},r.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},r.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},r.niceNum=function(t,e){var n,i=Math.floor(r.log10(t)),a=t/Math.pow(10,i);return n=e?a<1.5?1:a<3?2:a<7?5:10:a<=1?1:a<=2?2:a<=5?5:10,n*Math.pow(10,i)};var o=r.easingEffects={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-1*t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1)},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t/1)-1)},easeInExpo:function(t){return 0===t?1:1*Math.pow(2,10*(t/1-1))},easeOutExpo:function(t){return 1===t?1:1*(-Math.pow(2,-10*t/1)+1)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return t>=1?t:-1*(Math.sqrt(1-(t/=1)*t)-1)},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((1*t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2===(t/=.5)?1:(n||(n=1*(.3*1.5)),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?-.5*(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)):i*Math.pow(2,-10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;
14
+ return 1*(t/=1)*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return 1*((t=t/1-1)*t*((e+1)*t+e)+1)},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:function(t){return 1-o.easeOutBounce(1-t)},easeOutBounce:function(t){return(t/=1)<1/2.75?1*(7.5625*t*t):t<2/2.75?1*(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1*(7.5625*(t-=2.25/2.75)*t+.9375):1*(7.5625*(t-=2.625/2.75)*t+.984375)},easeInOutBounce:function(t){return t<.5?.5*o.easeInBounce(2*t):.5*o.easeOutBounce(2*t-1)+.5}};r.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}(),r.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,o=t.currentTarget||t.srcElement,s=o.getBoundingClientRect(),l=a.touches;l&&l.length>0?(n=l[0].clientX,i=l[0].clientY):(n=a.clientX,i=a.clientY);var u=parseFloat(r.getStyle(o,"padding-left")),d=parseFloat(r.getStyle(o,"padding-top")),c=parseFloat(r.getStyle(o,"padding-right")),h=parseFloat(r.getStyle(o,"padding-bottom")),f=s.right-s.left-u-c,g=s.bottom-s.top-d-h;return n=Math.round((n-s.left-u)/f*o.width/e.currentDevicePixelRatio),i=Math.round((i-s.top-d)/g*o.height/e.currentDevicePixelRatio),{x:n,y:i}},r.addEvent=function(t,e,n){t.addEventListener?t.addEventListener(e,n):t.attachEvent?t.attachEvent("on"+e,n):t["on"+e]=n},r.removeEvent=function(t,e,n){t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent?t.detachEvent("on"+e,n):t["on"+e]=r.noop},r.getConstraintWidth=function(t){return a(t,"max-width","clientWidth")},r.getConstraintHeight=function(t){return a(t,"max-height","clientHeight")},r.getMaximumWidth=function(t){var e=t.parentNode,n=parseInt(r.getStyle(e,"padding-left"),10),i=parseInt(r.getStyle(e,"padding-right"),10),a=e.clientWidth-n-i,o=r.getConstraintWidth(t);return isNaN(o)?a:Math.min(a,o)},r.getMaximumHeight=function(t){var e=t.parentNode,n=parseInt(r.getStyle(e,"padding-top"),10),i=parseInt(r.getStyle(e,"padding-bottom"),10),a=e.clientHeight-n-i,o=r.getConstraintHeight(t);return isNaN(o)?a:Math.min(a,o)},r.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},r.retinaScale=function(t){var e=t.currentDevicePixelRatio=window.devicePixelRatio||1;if(1!==e){var n=t.canvas,i=t.height,a=t.width;n.height=i*e,n.width=a*e,t.ctx.scale(e,e),n.style.height=i+"px",n.style.width=a+"px"}},r.clear=function(t){t.ctx.clearRect(0,0,t.width,t.height)},r.fontString=function(t,e,n){return e+" "+t+"px "+n},r.longestText=function(t,e,n,i){i=i||{};var a=i.data=i.data||{},o=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},o=i.garbageCollect=[],i.font=e),t.font=e;var s=0;r.each(n,function(e){void 0!==e&&null!==e&&r.isArray(e)!==!0?s=r.measureText(t,a,o,s,e):r.isArray(e)&&r.each(e,function(e){void 0===e||null===e||r.isArray(e)||(s=r.measureText(t,a,o,s,e))})});var l=o.length/2;if(l>n.length){for(var u=0;u<l;u++)delete a[o[u]];o.splice(0,l)}return s},r.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},r.numberOfLabelLines=function(t){var e=1;return r.each(t,function(t){r.isArray(t)&&t.length>e&&(e=t.length)}),e},r.drawRoundedRectangle=function(t,e,n,i,a,r){t.beginPath(),t.moveTo(e+r,n),t.lineTo(e+i-r,n),t.quadraticCurveTo(e+i,n,e+i,n+r),t.lineTo(e+i,n+a-r),t.quadraticCurveTo(e+i,n+a,e+i-r,n+a),t.lineTo(e+r,n+a),t.quadraticCurveTo(e,n+a,e,n+a-r),t.lineTo(e,n+r),t.quadraticCurveTo(e,n,e+r,n),t.closePath()},r.color=function(e){return i?i(e instanceof CanvasGradient?t.defaults.global.defaultColor:e):(console.error("Color.js not found!"),e)},r.isArray=Array.isArray?function(t){return Array.isArray(t)}:function(t){return"[object Array]"===Object.prototype.toString.call(t)},r.arrayEquals=function(t,e){var n,i,a,o;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],o=e[n],a instanceof Array&&o instanceof Array){if(!r.arrayEquals(a,o))return!1}else if(a!==o)return!1;return!0},r.callCallback=function(t,e,n){t&&"function"==typeof t.call&&t.apply(n,e)},r.getHoverColor=function(t){return t instanceof CanvasPattern?t:r.color(t).saturate(.5).darken(.1).rgbString()}}},{2:2}],27:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.native?{x:t.x,y:t.y}:o.getRelativePosition(t,e)}function n(t,e){var n,i,a,r,o,s=t.data.datasets;for(i=0,r=s.length;i<r;++i)if(t.isDatasetVisible(i))for(n=t.getDatasetMeta(i),a=0,o=n.data.length;a<o;++a){var l=n.data[a];l._view.skip||e(l)}}function i(t,e){var i=[];return n(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function a(t,e,i,a){var r=Number.POSITIVE_INFINITY,s=[];return a||(a=o.distanceBetweenPoints),n(t,function(t){if(!i||t.inRange(e.x,e.y)){var n=t.getCenterPoint(),o=a(e,n);o<r?(s=[t],r=o):o===r&&s.push(t)}}),s}function r(t,n,r){var o=e(n,t.chart),s=function(t,e){return Math.abs(t.x-e.x)},l=r.intersect?i(t,o):a(t,o,!1,s),u=[];return l.length?(t.data.datasets.forEach(function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n),a=i.data[l[0]._index];a&&!a._view.skip&&u.push(a)}}),u):[]}var o=t.helpers;t.Interaction={modes:{single:function(t,i){var a=e(i,t.chart),r=[];return n(t,function(t){if(t.inRange(a.x,a.y))return r.push(t),r}),r.slice(0,1)},label:r,index:r,dataset:function(t,n,r){var o=e(n,t.chart),s=r.intersect?i(t,o):a(t,o,!1);return s.length>0&&(s=t.getDatasetMeta(s[0]._datasetIndex).data),s},"x-axis":function(t,e){return r(t,e,!0)},point:function(t,n){var a=e(n,t.chart);return i(t,a)},nearest:function(t,n,i){var r=e(n,t.chart),o=a(t,r,i.intersect);return o.length>1&&o.sort(function(t,e){var n=t.getArea(),i=e.getArea(),a=n-i;return 0===a&&(a=t._datasetIndex-e._datasetIndex),a}),o.slice(0,1)},x:function(t,i,a){var r=e(i,t.chart),o=[],s=!1;return n(t,function(t){t.inXRange(r.x)&&o.push(t),t.inRange(r.x,r.y)&&(s=!0)}),a.intersect&&!s&&(o=[]),o},y:function(t,i,a){var r=e(i,t.chart),o=[],s=!1;return n(t,function(t){t.inYRange(r.y)&&o.push(t),t.inRange(r.x,r.y)&&(s=!0)}),a.intersect&&!s&&(o=[]),o}}}}},{}],28:[function(t,e,n){"use strict";e.exports=function(){var t=function(e,n){return this.controller=new t.Controller(e,n,this),this.controller};return t.defaults={global:{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}}},t.Chart=t,t}},{}],29:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),t.boxes.push(e)},removeBox:function(t,e){t.boxes&&t.boxes.splice(t.boxes.indexOf(e),1)},update:function(t,n,i){function a(t){var e,n=t.isHorizontal();n?(e=t.update(t.options.fullWidth?y:M,S),D-=e.height):(e=t.update(w,_),M-=e.width),C.push({horizontal:n,minSize:e,box:t})}function r(t){var n=e.findNextWhere(C,function(e){return e.box===t});if(n)if(t.isHorizontal()){var i={left:Math.max(F,T),right:Math.max(O,P),top:0,bottom:0};t.update(t.options.fullWidth?y:M,x/2,i)}else t.update(n.minSize.width,D)}function o(t){var n=e.findNextWhere(C,function(e){return e.box===t}),i={left:0,right:0,top:R,bottom:L};n&&t.update(n.minSize.width,D,i)}function s(t){t.isHorizontal()?(t.left=t.options.fullWidth?d:F,t.right=t.options.fullWidth?n-c:F+M,t.top=N,t.bottom=N+t.height,N=t.bottom):(t.left=z,t.right=z+t.width,t.top=R,t.bottom=R+D,z=t.right)}if(t){var l=t.options.layout,u=l?l.padding:null,d=0,c=0,h=0,f=0;isNaN(u)?(d=u.left||0,c=u.right||0,h=u.top||0,f=u.bottom||0):(d=u,c=u,h=u,f=u);var g=e.where(t.boxes,function(t){return"left"===t.options.position}),m=e.where(t.boxes,function(t){return"right"===t.options.position}),p=e.where(t.boxes,function(t){return"top"===t.options.position}),v=e.where(t.boxes,function(t){return"bottom"===t.options.position}),b=e.where(t.boxes,function(t){return"chartArea"===t.options.position});p.sort(function(t,e){return(e.options.fullWidth?1:0)-(t.options.fullWidth?1:0)}),v.sort(function(t,e){return(t.options.fullWidth?1:0)-(e.options.fullWidth?1:0)});var y=n-d-c,x=i-h-f,k=y/2,_=x/2,w=(n-k)/(g.length+m.length),S=(i-_)/(p.length+v.length),M=y,D=x,C=[];e.each(g.concat(m,p,v),a);var T=0,P=0,I=0,A=0;e.each(p.concat(v),function(t){if(t.getPadding){var e=t.getPadding();T=Math.max(T,e.left),P=Math.max(P,e.right)}}),e.each(g.concat(m),function(t){if(t.getPadding){var e=t.getPadding();I=Math.max(I,e.top),A=Math.max(A,e.bottom)}});var F=d,O=c,R=h,L=f;e.each(g.concat(m),r),e.each(g,function(t){F+=t.width}),e.each(m,function(t){O+=t.width}),e.each(p.concat(v),r),e.each(p,function(t){R+=t.height}),e.each(v,function(t){L+=t.height}),e.each(g.concat(m),o),F=d,O=c,R=h,L=f,e.each(g,function(t){F+=t.width}),e.each(m,function(t){O+=t.width}),e.each(p,function(t){R+=t.height}),e.each(v,function(t){L+=t.height});var V=Math.max(T-F,0);F+=V,O+=Math.max(P-O,0);var W=Math.max(I-R,0);R+=W,L+=Math.max(A-L,0);var Y=i-R-L,B=n-F-O;B===M&&Y===D||(e.each(g,function(t){t.height=Y}),e.each(m,function(t){t.height=Y}),e.each(p,function(t){t.options.fullWidth||(t.width=B)}),e.each(v,function(t){t.options.fullWidth||(t.width=B)}),D=Y,M=B);var z=d+V,N=h+W;e.each(g.concat(p),s),z+=M,N+=D,e.each(m,s),e.each(v,s),t.chartArea={left:F,top:R,right:F+M,bottom:R+D},e.each(b,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(M,D)})}}}}},{}],30:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}function n(e,n){var i=new t.Legend({ctx:e.chart.ctx,options:n,chart:e});e.legend=i,t.layoutService.addBox(e,i)}var i=t.helpers,a=i.noop;t.defaults.global.legend={display:!0,position:"top",fullWidth:!0,reverse:!1,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return i.isArray(e.datasets)?e.datasets.map(function(e,n){return{text:e.label,fillStyle:i.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}},this):[]}}},t.Legend=t.Element.extend({initialize:function(t){i.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:a,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:a,beforeSetDimensions:a,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:a,beforeBuildLabels:a,buildLabels:function(){var t=this,e=t.options.labels,n=e.generateLabels.call(t,t.chart);e.filter&&(n=n.filter(function(n){return e.filter(n,t.chart.data)})),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:a,beforeFit:a,fit:function(){var n=this,a=n.options,r=a.labels,o=a.display,s=n.ctx,l=t.defaults.global,u=i.getValueOrDefault,d=u(r.fontSize,l.defaultFontSize),c=u(r.fontStyle,l.defaultFontStyle),h=u(r.fontFamily,l.defaultFontFamily),f=i.fontString(d,c,h),g=n.legendHitBoxes=[],m=n.minSize,p=n.isHorizontal();if(p?(m.width=n.maxWidth,m.height=o?10:0):(m.width=o?10:0,m.height=n.maxHeight),o)if(s.font=f,p){var v=n.lineWidths=[0],b=n.legendItems.length?d+r.padding:0;s.textAlign="left",s.textBaseline="top",i.each(n.legendItems,function(t,i){var a=e(r,d),o=a+d/2+s.measureText(t.text).width;v[v.length-1]+o+r.padding>=n.width&&(b+=d+r.padding,v[v.length]=n.left),g[i]={left:0,top:0,width:o,height:d},v[v.length-1]+=o+r.padding}),m.height+=b}else{var y=r.padding,x=n.columnWidths=[],k=r.padding,_=0,w=0,S=d+y;i.each(n.legendItems,function(t,n){var i=e(r,d),a=i+d/2+s.measureText(t.text).width;w+S>m.height&&(k+=_+r.padding,x.push(_),_=0,w=0),_=Math.max(_,a),w+=S,g[n]={left:0,top:0,width:a,height:d}}),k+=_,x.push(_),m.width+=k}n.width=m.width,n.height=m.height},afterFit:a,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var n=this,a=n.options,r=a.labels,o=t.defaults.global,s=o.elements.line,l=n.width,u=n.lineWidths;if(a.display){var d,c=n.ctx,h=i.getValueOrDefault,f=h(r.fontColor,o.defaultFontColor),g=h(r.fontSize,o.defaultFontSize),m=h(r.fontStyle,o.defaultFontStyle),p=h(r.fontFamily,o.defaultFontFamily),v=i.fontString(g,m,p);c.textAlign="left",c.textBaseline="top",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=v;var b=e(r,g),y=n.legendHitBoxes,x=function(e,n,i){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(i.fillStyle,o.defaultColor),c.lineCap=h(i.lineCap,s.borderCapStyle),c.lineDashOffset=h(i.lineDashOffset,s.borderDashOffset),c.lineJoin=h(i.lineJoin,s.borderJoinStyle),c.lineWidth=h(i.lineWidth,s.borderWidth),c.strokeStyle=h(i.strokeStyle,o.defaultColor);var r=0===h(i.lineWidth,s.borderWidth);if(c.setLineDash&&c.setLineDash(h(i.lineDash,s.borderDash)),a.labels&&a.labels.usePointStyle){var l=g*Math.SQRT2/2,u=l/Math.SQRT2,d=e+u,f=n+u;t.canvasHelpers.drawPoint(c,i.pointStyle,l,d,f)}else r||c.strokeRect(e,n,b,g),c.fillRect(e,n,b,g);c.restore()}},k=function(t,e,n,i){c.fillText(n.text,b+g/2+t,e),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(b+g/2+t,e+g/2),c.lineTo(b+g/2+t+i,e+g/2),c.stroke())},_=n.isHorizontal();d=_?{x:n.left+(l-u[0])/2,y:n.top+r.padding,line:0}:{x:n.left+r.padding,y:n.top+r.padding,line:0};var w=g+r.padding;i.each(n.legendItems,function(t,e){var i=c.measureText(t.text).width,a=b+g/2+i,o=d.x,s=d.y;_?o+a>=l&&(s=d.y+=w,d.line++,o=d.x=n.left+(l-u[d.line])/2):s+w>n.bottom&&(o=d.x=o+n.columnWidths[d.line]+r.padding,s=d.y=n.top+r.padding,d.line++),x(o,s,t),y[e].left=o,y[e].top=s,k(o,s,t,i),_?d.x+=a+r.padding:d.y+=w})}},handleEvent:function(t){var e=this,n=e.options,i="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===i){if(!n.onHover)return}else{if("click"!==i)return;if(!n.onClick)return}var r=t.x,o=t.y;if(r>=e.left&&r<=e.right&&o>=e.top&&o<=e.bottom)for(var s=e.legendHitBoxes,l=0;l<s.length;++l){var u=s[l];if(r>=u.left&&r<=u.left+u.width&&o>=u.top&&o<=u.top+u.height){if("click"===i){n.onClick.call(e,t.native,e.legendItems[l]),a=!0;break}if("mousemove"===i){n.onHover.call(e,t.native,e.legendItems[l]),a=!0;break}}}return a}}),t.plugins.register({beforeInit:function(t){var e=t.options.legend;e&&n(t,e)},beforeUpdate:function(e){var a=e.options.legend;a?(a=i.configMerge(t.defaults.global.legend,a),e.legend?e.legend.options=a:n(e,a)):(t.layoutService.removeBox(e,e.legend),delete e.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}})}},{}],31:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.plugins={},t.plugins={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){e.indexOf(t)===-1&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var n=e.indexOf(t);n!==-1&&e.splice(n,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if(a=l[i],r=a.plugin,s=r[e],"function"==typeof s&&(o=[t].concat(n||[]),o.push(a.options),s.apply(r,o)===!1))return!1;return!0},descriptors:function(n){var i=n._plugins||(n._plugins={});if(i.id===this._cacheId)return i.descriptors;var a=[],r=[],o=n&&n.config||{},s=t.defaults.global.plugins,l=o.options&&o.options.plugins||{};return this._plugins.concat(o.plugins||[]).forEach(function(t){var n=a.indexOf(t);if(n===-1){var i=t.id,o=l[i];o!==!1&&(o===!0&&(o=e.clone(s[i])),a.push(t),r.push({plugin:t,options:o||{}}))}}),i.descriptors=r,i.id=this._cacheId,r}},t.pluginService=t.plugins,t.PluginBase=e.inherits({})}},{}],32:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e,n){return i.isArray(e)?i.longestText(t,n,e):t.measureText(e).width}function n(e){var n=i.getValueOrDefault,a=t.defaults.global,r=n(e.fontSize,a.defaultFontSize),o=n(e.fontStyle,a.defaultFontStyle),s=n(e.fontFamily,a.defaultFontFamily);return{size:r,style:o,family:s,font:i.fontString(r,o,s)}}var i=t.helpers;t.defaults.scale={display:!0,position:"left",gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{labelString:"",display:!1},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:t.Ticks.formatters.values}},t.Scale=t.Element.extend({getPadding:function(){var t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}},beforeUpdate:function(){i.callCallback(this.options.beforeUpdate,[this])},update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=i.extend({left:0,right:0,top:0,bottom:0},n),a.longestTextCache=a.longestTextCache||{},a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeDataLimits(),a.determineDataLimits(),a.afterDataLimits(),a.beforeBuildTicks(),a.buildTicks(),a.afterBuildTicks(),a.beforeTickToLabelConversion(),a.convertTicksToLabels(),a.afterTickToLabelConversion(),a.beforeCalculateTickRotation(),a.calculateTickRotation(),a.afterCalculateTickRotation(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:function(){i.callCallback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){i.callCallback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){i.callCallback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){i.callCallback(this.options.beforeDataLimits,[this])},determineDataLimits:i.noop,afterDataLimits:function(){i.callCallback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){i.callCallback(this.options.beforeBuildTicks,[this])},buildTicks:i.noop,afterBuildTicks:function(){i.callCallback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){i.callCallback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this,e=t.options.ticks;t.ticks=t.ticks.map(e.userCallback||e.callback)},afterTickToLabelConversion:function(){i.callCallback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){i.callCallback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,a=t.options.ticks,r=n(a);e.font=r.font;var o=a.minRotation||0;if(t.options.display&&t.isHorizontal())for(var s,l,u=i.longestText(e,r.font,t.ticks,t.longestTextCache),d=u,c=t.getPixelForTick(1)-t.getPixelForTick(0)-6;d>c&&o<a.maxRotation;){var h=i.toRadians(o);if(s=Math.cos(h),l=Math.sin(h),l*u>t.maxHeight){o--;break}o++,d=s*u}t.labelRotation=o},afterCalculateTickRotation:function(){i.callCallback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){i.callCallback(this.options.beforeFit,[this])},fit:function(){var t=this,a=t.minSize={width:0,height:0},r=t.options,o=r.ticks,s=r.scaleLabel,l=r.gridLines,u=r.display,d=t.isHorizontal(),c=n(o),h=1.5*n(s).size,f=r.gridLines.tickMarkLength;if(d?a.width=t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:a.width=u&&l.drawTicks?f:0,d?a.height=u&&l.drawTicks?f:0:a.height=t.maxHeight,s.display&&u&&(d?a.height+=h:a.width+=h),o.display&&u){var g=i.longestText(t.ctx,c.font,t.ticks,t.longestTextCache),m=i.numberOfLabelLines(t.ticks),p=.5*c.size;if(d){t.longestLabelWidth=g;var v=i.toRadians(t.labelRotation),b=Math.cos(v),y=Math.sin(v),x=y*g+c.size*m+p*m;a.height=Math.min(t.maxHeight,a.height+x),t.ctx.font=c.font;var k=t.ticks[0],_=e(t.ctx,k,c.font),w=t.ticks[t.ticks.length-1],S=e(t.ctx,w,c.font);0!==t.labelRotation?(t.paddingLeft="bottom"===r.position?b*_+3:b*p+3,t.paddingRight="bottom"===r.position?b*p+3:b*S+3):(t.paddingLeft=_/2+3,t.paddingRight=S/2+3)}else o.mirror?g=0:g+=t.options.ticks.padding,a.width+=g,t.paddingTop=c.size/2,t.paddingBottom=c.size/2}t.handleMargins(),t.width=a.width,t.height=a.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){i.callCallback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){return null===t||"undefined"==typeof t?NaN:"number"!=typeof t||isFinite(t)?"object"==typeof t?t instanceof Date||t.isValid?t:this.getRightValue(this.isHorizontal()?t.x:t.y):t:NaN},getLabelForIndex:i.noop,getPixelForValue:i.noop,getValueForPixel:i.noop,getPixelForTick:function(t,e){var n=this;if(n.isHorizontal()){var i=n.width-(n.paddingLeft+n.paddingRight),a=i/Math.max(n.ticks.length-(n.options.gridLines.offsetGridLines?0:1),1),r=a*t+n.paddingLeft;e&&(r+=a/2);var o=n.left+Math.round(r);return o+=n.isFullWidth()?n.margins.left:0}var s=n.height-(n.paddingTop+n.paddingBottom);return n.top+t*(s/(n.ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var n=e.width-(e.paddingLeft+e.paddingRight),i=n*t+e.paddingLeft,a=e.left+Math.round(i);return a+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this,e=t.min,n=t.max;return t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0},draw:function(e){var a=this,r=a.options;if(r.display){var o,s,l=a.ctx,u=t.defaults.global,d=r.ticks,c=r.gridLines,h=r.scaleLabel,f=0!==a.labelRotation,g=d.autoSkip,m=a.isHorizontal();d.maxTicksLimit&&(s=d.maxTicksLimit);var p=i.getValueOrDefault(d.fontColor,u.defaultFontColor),v=n(d),b=c.drawTicks?c.tickMarkLength:0,y=i.getValueOrDefault(c.borderDash,u.borderDash),x=i.getValueOrDefault(c.borderDashOffset,u.borderDashOffset),k=i.getValueOrDefault(h.fontColor,u.defaultFontColor),_=n(h),w=i.toRadians(a.labelRotation),S=Math.cos(w),M=a.longestLabelWidth*S;l.fillStyle=p;var D=[];if(m){if(o=!1,f&&(M/=2),(M+d.autoSkipPadding)*a.ticks.length>a.width-(a.paddingLeft+a.paddingRight)&&(o=1+Math.floor((M+d.autoSkipPadding)*a.ticks.length/(a.width-(a.paddingLeft+a.paddingRight)))),s&&a.ticks.length>s)for(;!o||a.ticks.length/(o||1)>s;)o||(o=1),o+=1;g||(o=!1)}var C="right"===r.position?a.left:a.right-b,T="right"===r.position?a.left+b:a.right,P="bottom"===r.position?a.top:a.bottom-b,I="bottom"===r.position?a.top+b:a.bottom;if(i.each(a.ticks,function(t,n){if(void 0!==t&&null!==t){var s=a.ticks.length===n+1,l=o>1&&n%o>0||n%o===0&&n+o>=a.ticks.length;if((!l||s)&&void 0!==t&&null!==t){var u,h;n===("undefined"!=typeof a.zeroLineIndex?a.zeroLineIndex:0)?(u=c.zeroLineWidth,h=c.zeroLineColor):(u=i.getValueAtIndexOrDefault(c.lineWidth,n),h=i.getValueAtIndexOrDefault(c.color,n));var g,p,v,k,_,S,M,A,F,O,R="middle",L="middle";if(m){"bottom"===r.position?(L=f?"middle":"top",R=f?"right":"center",O=a.top+b):(L=f?"middle":"bottom",R=f?"left":"center",O=a.bottom-b);var V=a.getPixelForTick(n)+i.aliasPixel(u);F=a.getPixelForTick(n,c.offsetGridLines)+d.labelOffset,g=v=_=M=V,p=P,k=I,S=e.top,A=e.bottom}else{var W,Y="left"===r.position,B=d.padding;d.mirror?(R=Y?"left":"right",W=B):(R=Y?"right":"left",W=b+B),F=Y?a.right-W:a.left+W;var z=a.getPixelForTick(n);z+=i.aliasPixel(u),O=a.getPixelForTick(n,c.offsetGridLines),g=C,v=T,_=e.left,M=e.right,p=k=S=A=z}D.push({tx1:g,ty1:p,tx2:v,ty2:k,x1:_,y1:S,x2:M,y2:A,labelX:F,labelY:O,glWidth:u,glColor:h,glBorderDash:y,glBorderDashOffset:x,rotation:-1*w,label:t,textBaseline:L,textAlign:R})}}}),i.each(D,function(t){if(c.display&&(l.save(),l.lineWidth=t.glWidth,l.strokeStyle=t.glColor,l.setLineDash&&(l.setLineDash(t.glBorderDash),l.lineDashOffset=t.glBorderDashOffset),l.beginPath(),c.drawTicks&&(l.moveTo(t.tx1,t.ty1),l.lineTo(t.tx2,t.ty2)),c.drawOnChartArea&&(l.moveTo(t.x1,t.y1),l.lineTo(t.x2,t.y2)),l.stroke(),l.restore()),d.display){l.save(),l.translate(t.labelX,t.labelY),l.rotate(t.rotation),l.font=v.font,l.textBaseline=t.textBaseline,l.textAlign=t.textAlign;var e=t.label;if(i.isArray(e))for(var n=0,a=0;n<e.length;++n)l.fillText(""+e[n],0,a),a+=1.5*v.size;else l.fillText(e,0,0);l.restore()}}),h.display){var A,F,O=0;if(m)A=a.left+(a.right-a.left)/2,F="bottom"===r.position?a.bottom-_.size/2:a.top+_.size/2;else{var R="left"===r.position;A=R?a.left+_.size/2:a.right-_.size/2,F=a.top+(a.bottom-a.top)/2,O=R?-.5*Math.PI:.5*Math.PI}l.save(),l.translate(A,F),l.rotate(O),l.textAlign="center",l.textBaseline="middle",l.fillStyle=k,l.font=_.font,l.fillText(h.labelString,0,0),l.restore()}if(c.drawBorder){l.lineWidth=i.getValueAtIndexOrDefault(c.lineWidth,0),l.strokeStyle=i.getValueAtIndexOrDefault(c.color,0);var L=a.left,V=a.right,W=a.top,Y=a.bottom,B=i.aliasPixel(l.lineWidth);m?(W=Y="top"===r.position?a.bottom:a.top,W+=B,Y+=B):(L=V="left"===r.position?a.right:a.left,L+=B,V+=B),l.beginPath(),l.moveTo(L,W),l.lineTo(V,Y),l.stroke()}}}})}},{}],33:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.scaleService={constructors:{},defaults:{},registerScaleType:function(t,n,i){this.constructors[t]=n,this.defaults[t]=e.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(n){return this.defaults.hasOwnProperty(n)?e.scaleMerge(t.defaults.scale,this.defaults[n]):{}},updateScaleDefaults:function(t,n){var i=this.defaults;i.hasOwnProperty(t)&&(i[t]=e.extend(i[t],n))},addScalesToLayout:function(n){e.each(n.scales,function(e){t.layoutService.addBox(n,e)})}}}},{}],34:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.Ticks={generators:{linear:function(t,n){var i,a=[];if(t.stepSize&&t.stepSize>0)i=t.stepSize;else{var r=e.niceNum(n.max-n.min,!1);i=e.niceNum(r/(t.maxTicks-1),!0)}var o=Math.floor(n.min/i)*i,s=Math.ceil(n.max/i)*i;t.min&&t.max&&t.stepSize&&e.almostWhole((t.max-t.min)/t.stepSize,i/1e3)&&(o=t.min,s=t.max);var l=(s-o)/i;l=e.almostEquals(l,Math.round(l),i/1e3)?Math.round(l):Math.ceil(l),a.push(void 0!==t.min?t.min:o);for(var u=1;u<l;++u)a.push(o+u*i);return a.push(void 0!==t.max?t.max:s),a},logarithmic:function(t,n){var i,a,r=[],o=e.getValueOrDefault,s=o(t.min,Math.pow(10,Math.floor(e.log10(n.min)))),l=Math.floor(e.log10(n.max)),u=Math.ceil(n.max/Math.pow(10,l));0===s?(i=Math.floor(e.log10(n.minNotZero)),a=Math.floor(n.minNotZero/Math.pow(10,i)),r.push(s),s=a*Math.pow(10,i)):(i=Math.floor(e.log10(s)),a=Math.floor(s/Math.pow(10,i)));do r.push(s),++a,10===a&&(a=1,++i),s=a*Math.pow(10,i);while(i<l||i===l&&a<u);var d=o(t.max,s);return r.push(d),r}},formatters:{values:function(t){return e.isArray(t)?t:""+t},linear:function(t,n,i){var a=i.length>3?i[2]-i[1]:i[1]-i[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var r=e.log10(Math.abs(a)),o="";if(0!==t){var s=-1*Math.floor(r);s=Math.max(Math.min(s,20),0),o=t.toFixed(s)}else o="0";return o},logarithmic:function(t,n,i){var a=t/Math.pow(10,Math.floor(e.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===n||n===i.length-1?t.toExponential():""}}}}},{}],35:[function(t,e,n){"use strict";e.exports=function(t){function e(e,n){var i=new t.Title({ctx:e.chart.ctx,options:n,chart:e});e.titleBlock=i,t.layoutService.addBox(e,i)}var n=t.helpers;t.defaults.global.title={display:!1,position:"top",fullWidth:!0,fontStyle:"bold",padding:10,text:""};var i=n.noop;t.Title=t.Element.extend({initialize:function(t){var e=this;n.extend(e,t),e.legendHitBoxes=[]},beforeUpdate:i,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:i,beforeSetDimensions:i,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:i,beforeBuildLabels:i,buildLabels:i,afterBuildLabels:i,beforeFit:i,fit:function(){var e=this,i=n.getValueOrDefault,a=e.options,r=t.defaults.global,o=a.display,s=i(a.fontSize,r.defaultFontSize),l=e.minSize;e.isHorizontal()?(l.width=e.maxWidth,l.height=o?s+2*a.padding:0):(l.width=o?s+2*a.padding:0,l.height=e.maxHeight),e.width=l.width,e.height=l.height},afterFit:i,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var e=this,i=e.ctx,a=n.getValueOrDefault,r=e.options,o=t.defaults.global;if(r.display){var s,l,u,d=a(r.fontSize,o.defaultFontSize),c=a(r.fontStyle,o.defaultFontStyle),h=a(r.fontFamily,o.defaultFontFamily),f=n.fontString(d,c,h),g=0,m=e.top,p=e.left,v=e.bottom,b=e.right;i.fillStyle=a(r.fontColor,o.defaultFontColor),i.font=f,e.isHorizontal()?(s=p+(b-p)/2,l=m+(v-m)/2,u=b-p):(s="left"===r.position?p+d/2:b-d/2,l=m+(v-m)/2,u=v-m,g=Math.PI*("left"===r.position?-.5:.5)),i.save(),i.translate(s,l),i.rotate(g),i.textAlign="center",i.textBaseline="middle",i.fillText(r.text,0,0,u),i.restore()}}}),t.plugins.register({beforeInit:function(t){var n=t.options.title;n&&e(t,n)},beforeUpdate:function(i){var a=i.options.title;a?(a=n.configMerge(t.defaults.global.title,a),i.titleBlock?i.titleBlock.options=a:e(i,a)):(t.layoutService.removeBox(i,i.titleBlock),delete i.titleBlock)}})}},{}],36:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){var n=l.color(t);return n.alpha(e*n.alpha()).rgbaString()}function n(t,e){return e&&(l.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function i(t){var e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._datasetIndex;return{xLabel:e?e.getLabelForIndex(i,a):"",yLabel:n?n.getLabelForIndex(i,a):"",index:i,datasetIndex:a,x:t._model.x,y:t._model.y}}function a(e){var n=t.defaults.global,i=l.getValueOrDefault;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,bodyFontColor:e.bodyFontColor,_bodyFontFamily:i(e.bodyFontFamily,n.defaultFontFamily),_bodyFontStyle:i(e.bodyFontStyle,n.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:i(e.bodyFontSize,n.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:i(e.titleFontFamily,n.defaultFontFamily),_titleFontStyle:i(e.titleFontStyle,n.defaultFontStyle),titleFontSize:i(e.titleFontSize,n.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,
15
+ titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:i(e.footerFontFamily,n.defaultFontFamily),_footerFontStyle:i(e.footerFontStyle,n.defaultFontStyle),footerFontSize:i(e.footerFontSize,n.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors}}function r(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;i+=s*d,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*c,i+=o?(o-1)*e.bodySpacing:0,i+=u?e.footerMarginTop:0,i+=u*h,i+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,n.measureText(t).width+f)};return n.font=l.fontString(d,e._titleFontStyle,e._titleFontFamily),l.each(e.title,g),n.font=l.fontString(c,e._bodyFontStyle,e._bodyFontFamily),l.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,l.each(r,function(t){l.each(t.before,g),l.each(t.lines,g),l.each(t.after,g)}),f=0,n.font=l.fontString(h,e._footerFontStyle,e._footerFontFamily),l.each(e.footer,g),a+=2*e.xPadding,{width:a,height:i}}function o(t,e){var n=t._model,i=t._chart,a=t._chartInstance.chartArea,r="center",o="center";n.y<e.height?o="top":n.y>i.height-e.height&&(o="bottom");var s,l,u,d,c,h=(a.left+a.right)/2,f=(a.top+a.bottom)/2;"center"===o?(s=function(t){return t<=h},l=function(t){return t>h}):(s=function(t){return t<=e.width/2},l=function(t){return t>=i.width-e.width/2}),u=function(t){return t+e.width>i.width},d=function(t){return t-e.width<0},c=function(t){return t<=f?"top":"bottom"},s(n.x)?(r="left",u(n.x)&&(r="center",o=c(n.y))):l(n.x)&&(r="right",d(n.x)&&(r="center",o=c(n.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:r,yAlign:g.yAlign?g.yAlign:o}}function s(t,e,n){var i=t.x,a=t.y,r=t.caretSize,o=t.caretPadding,s=t.cornerRadius,l=n.xAlign,u=n.yAlign,d=r+o,c=s+o;return"right"===l?i-=e.width:"center"===l&&(i-=e.width/2),"top"===u?a+=d:a-="bottom"===u?e.height+d:e.height/2,"center"===u?"left"===l?i+=d:"right"===l&&(i-=d):"left"===l?i-=c:"right"===l&&(i+=c),{x:i,y:a}}var l=t.helpers;t.defaults.global.tooltips={enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,callbacks:{beforeTitle:l.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:l.noop,beforeBody:l.noop,beforeLabel:l.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n+": "+t.yLabel},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex),i=n.data[t.index],a=i._view;return{borderColor:a.borderColor,backgroundColor:a.backgroundColor}},afterLabel:l.noop,afterBody:l.noop,beforeFooter:l.noop,footer:l.noop,afterFooter:l.noop}},t.Tooltip=t.Element.extend({initialize:function(){this._model=a(this._options)},getTitle:function(){var t=this,e=t._options,i=e.callbacks,a=i.beforeTitle.apply(t,arguments),r=i.title.apply(t,arguments),o=i.afterTitle.apply(t,arguments),s=[];return s=n(s,a),s=n(s,r),s=n(s,o)},getBeforeBody:function(){var t=this._options.callbacks.beforeBody.apply(this,arguments);return l.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var i=this,a=i._options.callbacks,r=[];return l.each(t,function(t){var o={before:[],lines:[],after:[]};n(o.before,a.beforeLabel.call(i,t,e)),n(o.lines,a.label.call(i,t,e)),n(o.after,a.afterLabel.call(i,t,e)),r.push(o)}),r},getAfterBody:function(){var t=this._options.callbacks.afterBody.apply(this,arguments);return l.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var t=this,e=t._options.callbacks,i=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),r=e.afterFooter.apply(t,arguments),o=[];return o=n(o,i),o=n(o,a),o=n(o,r)},update:function(e){var n,u,d=this,c=d._options,h=d._model,f=d._model=a(c),g=d._active,m=d._data,p=d._chartInstance,v={xAlign:h.xAlign,yAlign:h.yAlign},b={x:h.x,y:h.y},y={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(g.length){f.opacity=1;var k=[];x=t.Tooltip.positioners[c.position](g,d._eventPosition);var _=[];for(n=0,u=g.length;n<u;++n)_.push(i(g[n]));c.filter&&(_=_.filter(function(t){return c.filter(t,m)})),c.itemSort&&(_=_.sort(function(t,e){return c.itemSort(t,e,m)})),l.each(_,function(t){k.push(c.callbacks.labelColor.call(d,t,p))}),f.title=d.getTitle(_,m),f.beforeBody=d.getBeforeBody(_,m),f.body=d.getBody(_,m),f.afterBody=d.getAfterBody(_,m),f.footer=d.getFooter(_,m),f.x=Math.round(x.x),f.y=Math.round(x.y),f.caretPadding=l.getValueOrDefault(x.padding,2),f.labelColors=k,f.dataPoints=_,y=r(this,f),v=o(this,y),b=s(f,y,v)}else f.opacity=0;return f.xAlign=v.xAlign,f.yAlign=v.yAlign,f.x=b.x,f.y=b.y,f.width=y.width,f.height=y.height,f.caretX=x.x,f.caretY=x.y,d._model=f,e&&c.custom&&c.custom.call(d,f),d},drawCaret:function(t,n,i){var a,r,o,s,l,u,d=this._view,c=this._chart.ctx,h=d.caretSize,f=d.cornerRadius,g=d.xAlign,m=d.yAlign,p=t.x,v=t.y,b=n.width,y=n.height;"center"===m?("left"===g?(a=p,r=a-h,o=a):(a=p+b,r=a+h,o=a),l=v+y/2,s=l-h,u=l+h):("left"===g?(a=p+f,r=a+h,o=r+h):"right"===g?(a=p+b-f,r=a-h,o=r-h):(r=p+b/2,a=r-h,o=r+h),"top"===m?(s=v,l=s-h,u=s):(s=v+y,l=s+h,u=s)),c.fillStyle=e(d.backgroundColor,i),c.beginPath(),c.moveTo(a,s),c.lineTo(r,l),c.lineTo(o,u),c.closePath(),c.fill()},drawTitle:function(t,n,i,a){var r=n.title;if(r.length){i.textAlign=n._titleAlign,i.textBaseline="top";var o=n.titleFontSize,s=n.titleSpacing;i.fillStyle=e(n.titleFontColor,a),i.font=l.fontString(o,n._titleFontStyle,n._titleFontFamily);var u,d;for(u=0,d=r.length;u<d;++u)i.fillText(r[u],t.x,t.y),t.y+=o+s,u+1===r.length&&(t.y+=n.titleMarginBottom-s)}},drawBody:function(t,n,i,a){var r=n.bodyFontSize,o=n.bodySpacing,s=n.body;i.textAlign=n._bodyAlign,i.textBaseline="top";var u=e(n.bodyFontColor,a);i.fillStyle=u,i.font=l.fontString(r,n._bodyFontStyle,n._bodyFontFamily);var d=0,c=function(e){i.fillText(e,t.x+d,t.y),t.y+=r+o};l.each(n.beforeBody,c);var h=n.displayColors;d=h?r+2:0,l.each(s,function(o,s){l.each(o.before,c),l.each(o.lines,function(o){h&&(i.fillStyle=e(n.legendColorBackground,a),i.fillRect(t.x,t.y,r,r),i.strokeStyle=e(n.labelColors[s].borderColor,a),i.strokeRect(t.x,t.y,r,r),i.fillStyle=e(n.labelColors[s].backgroundColor,a),i.fillRect(t.x+1,t.y+1,r-2,r-2),i.fillStyle=u),c(o)}),l.each(o.after,c)}),d=0,l.each(n.afterBody,c),t.y-=o},drawFooter:function(t,n,i,a){var r=n.footer;r.length&&(t.y+=n.footerMarginTop,i.textAlign=n._footerAlign,i.textBaseline="top",i.fillStyle=e(n.footerFontColor,a),i.font=l.fontString(n.footerFontSize,n._footerFontStyle,n._footerFontFamily),l.each(r,function(e){i.fillText(e,t.x,t.y),t.y+=n.footerFontSize+n.footerSpacing}))},drawBackground:function(t,n,i,a,r){i.fillStyle=e(n.backgroundColor,r),l.drawRoundedRectangle(i,t.x,t.y,a.width,a.height,n.cornerRadius),i.fill()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity;this._options.enabled&&(this.drawBackground(i,e,t,n,a),this.drawCaret(i,n,a),i.x+=e.xPadding,i.y+=e.yPadding,this.drawTitle(i,e,t,a),this.drawBody(i,e,t,a),this.drawFooter(i,e,t,a))}},handleEvent:function(t){var e=this,n=e._options,i=!1;if(e._lastActive=e._lastActive||[],"mouseout"===t.type?e._active=[]:e._active=e._chartInstance.getElementsAtEventForMode(t,n.mode,n),i=!l.arrayEquals(e._active,e._lastActive),e._lastActive=e._active,n.enabled||n.custom){e._eventPosition={x:t.x,y:t.y};var a=e._model;e.update(!0),e.pivot(),i|=a.x!==e._model.x||a.y!==e._model.y}return i}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:Math.round(i/r),y:Math.round(a/r)}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(i=0,a=t.length;i<a;++i){var u=t[i];if(u&&u.hasValue()){var d=u.getCenterPoint(),c=l.distanceBetweenPoints(e,d);c<s&&(s=c,n=u)}}if(n){var h=n.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}}}},{}],37:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults.global;n.elements.arc={backgroundColor:n.defaultColor,borderColor:"#fff",borderWidth:2},t.elements.Arc=t.Element.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,n){var i=this._view;if(i){for(var a=e.getAngleFromPoint(i,{x:t,y:n}),r=a.angle,o=a.distance,s=i.startAngle,l=i.endAngle;l<s;)l+=2*Math.PI;for(;r>l;)r-=2*Math.PI;for(;r<s;)r+=2*Math.PI;var u=r>=s&&r<=l,d=o>=i.innerRadius&&o<=i.outerRadius;return u&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t=this._chart.ctx,e=this._view,n=e.startAngle,i=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,n,i),t.arc(e.x,e.y,e.innerRadius,i,n,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})}},{}],38:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults.global;t.defaults.global.elements.line={tension:.4,backgroundColor:n.defaultColor,borderWidth:3,borderColor:n.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0},t.elements.Line=t.Element.extend({draw:function(){function t(t,e){var n=e._view;e._view.steppedLine===!0?(l.lineTo(n.x,t._view.y),l.lineTo(n.x,n.y)):0===e._view.tension?l.lineTo(n.x,n.y):l.bezierCurveTo(t._view.controlPointNextX,t._view.controlPointNextY,n.controlPointPreviousX,n.controlPointPreviousY,n.x,n.y)}var i=this,a=i._view,r=a.spanGaps,o=a.scaleZero,s=i._loop;s||("top"===a.fill?o=a.scaleTop:"bottom"===a.fill&&(o=a.scaleBottom));var l=i._chart.ctx;l.save();var u=i._children.slice(),d=-1;s&&u.length&&u.push(u[0]);var c,h,f,g;if(u.length&&a.fill){for(l.beginPath(),c=0;c<u.length;++c)h=u[c],f=e.previousItem(u,c),g=h._view,0===c?(s?l.moveTo(o.x,o.y):l.moveTo(g.x,o),g.skip||(d=c,l.lineTo(g.x,g.y))):(f=d===-1?f:u[d],g.skip?r||d!==c-1||(s?l.lineTo(o.x,o.y):l.lineTo(f._view.x,o)):(d!==c-1?r&&d!==-1?t(f,h):s?l.lineTo(g.x,g.y):(l.lineTo(g.x,o),l.lineTo(g.x,g.y)):t(f,h),d=c));s||d===-1||l.lineTo(u[d]._view.x,o),l.fillStyle=a.backgroundColor||n.defaultColor,l.closePath(),l.fill()}var m=n.elements.line;for(l.lineCap=a.borderCapStyle||m.borderCapStyle,l.setLineDash&&l.setLineDash(a.borderDash||m.borderDash),l.lineDashOffset=a.borderDashOffset||m.borderDashOffset,l.lineJoin=a.borderJoinStyle||m.borderJoinStyle,l.lineWidth=a.borderWidth||m.borderWidth,l.strokeStyle=a.borderColor||n.defaultColor,l.beginPath(),d=-1,c=0;c<u.length;++c)h=u[c],f=e.previousItem(u,c),g=h._view,0===c?g.skip||(l.moveTo(g.x,g.y),d=c):(f=d===-1?f:u[d],g.skip||(d!==c-1&&!r||d===-1?l.moveTo(g.x,g.y):t(f,h),d=c));l.stroke(),l.restore()}})}},{}],39:[function(t,e,n){"use strict";e.exports=function(t){function e(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hitRadius,2)}function n(t){var e=this._view;return!!e&&Math.pow(t-e.y,2)<Math.pow(e.radius+e.hitRadius,2)}var i=t.helpers,a=t.defaults.global,r=a.defaultColor;a.elements.point={radius:3,pointStyle:"circle",backgroundColor:r,borderWidth:1,borderColor:r,hitRadius:1,hoverRadius:4,hoverBorderWidth:1},t.elements.Point=t.Element.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:e,inXRange:e,inYRange:n,getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(e){var n=this._view,o=this._model,s=this._chart.ctx,l=n.pointStyle,u=n.radius,d=n.x,c=n.y,h=t.helpers.color,f=1.01,g=0;n.skip||(s.strokeStyle=n.borderColor||r,s.lineWidth=i.getValueOrDefault(n.borderWidth,a.elements.point.borderWidth),s.fillStyle=n.backgroundColor||r,void 0!==e&&(o.x<e.left||e.right*f<o.x||o.y<e.top||e.bottom*f<o.y)&&(o.x<e.left?g=(d-o.x)/(e.left-o.x):e.right*f<o.x?g=(o.x-d)/(o.x-e.right):o.y<e.top?g=(c-o.y)/(e.top-o.y):e.bottom*f<o.y&&(g=(o.y-c)/(o.y-e.bottom)),g=Math.round(100*g)/100,s.strokeStyle=h(s.strokeStyle).alpha(g).rgbString(),s.fillStyle=h(s.fillStyle).alpha(g).rgbString()),t.canvasHelpers.drawPoint(s,l,u,d,c))}})}},{}],40:[function(t,e,n){"use strict";e.exports=function(t){function e(t){return void 0!==t._view.width}function n(t){var n,i,a,r,o=t._view;if(e(t)){var s=o.width/2;n=o.x-s,i=o.x+s,a=Math.min(o.y,o.base),r=Math.max(o.y,o.base)}else{var l=o.height/2;n=Math.min(o.x,o.base),i=Math.max(o.x,o.base),a=o.y-l,r=o.y+l}return{left:n,top:a,right:i,bottom:r}}var i=t.defaults.global;i.elements.rectangle={backgroundColor:i.defaultColor,borderWidth:0,borderColor:i.defaultColor,borderSkipped:"bottom"},t.elements.Rectangle=t.Element.extend({draw:function(){function t(t){return v[(y+t)%4]}var e,n,i,a,r,o,s,l=this._chart.ctx,u=this._view,d=u.borderWidth;if(u.horizontal?(e=u.base,n=u.x,i=u.y-u.height/2,a=u.y+u.height/2,r=n>e?1:-1,o=1,s=u.borderSkipped||"left"):(e=u.x-u.width/2,n=u.x+u.width/2,i=u.y,a=u.base,r=1,o=a>i?1:-1,s=u.borderSkipped||"bottom"),d){var c=Math.min(Math.abs(e-n),Math.abs(i-a));d=d>c?c:d;var h=d/2,f=e+("left"!==s?h*r:0),g=n+("right"!==s?-h*r:0),m=i+("top"!==s?h*o:0),p=a+("bottom"!==s?-h*o:0);f!==g&&(i=m,a=p),m!==p&&(e=f,n=g)}l.beginPath(),l.fillStyle=u.backgroundColor,l.strokeStyle=u.borderColor,l.lineWidth=d;var v=[[e,a],[e,i],[n,i],[n,a]],b=["bottom","left","top","right"],y=b.indexOf(s,0);y===-1&&(y=0);var x=t(0);l.moveTo(x[0],x[1]);for(var k=1;k<4;k++)x=t(k),l.lineTo(x[0],x[1]);l.fill(),d&&l.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=!1;if(this._view){var a=n(this);i=t>=a.left&&t<=a.right&&e>=a.top&&e<=a.bottom}return i},inLabelRange:function(t,i){var a=this;if(!a._view)return!1;var r=!1,o=n(a);return r=e(a)?t>=o.left&&t<=o.right:i>=o.top&&i<=o.bottom},inXRange:function(t){var e=n(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=n(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,n,i=this._view;return e(this)?(t=i.x,n=(i.y+i.base)/2):(t=(i.x+i.base)/2,n=i.y),{x:t,y:n}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})}},{}],41:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){var n=l.getStyle(t,e),i=n&&n.match(/(\d+)px/);return i?Number(i[1]):void 0}function n(t,n){var i=t.style,a=t.getAttribute("height"),r=t.getAttribute("width");if(t._chartjs={initial:{height:a,width:r,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===r||""===r){var o=e(t,"width");void 0!==o&&(t.width=o)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(n.options.aspectRatio||2);else{var s=e(t,"height");void 0!==o&&(t.height=s)}return t}function i(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function a(t,e){var n=u[t.type]||t.type,a=l.getRelativePosition(t,e);return i(n,e,a.x,a.y,t)}function r(t){var e=document.createElement("iframe");return e.className="chartjs-hidden-iframe",e.style.cssText="display:block;overflow:hidden;border:0;margin:0;top:0;left:0;bottom:0;right:0;height:100%;width:100%;position:absolute;pointer-events:none;z-index:-1;",e.tabIndex=-1,l.addEvent(e,"load",function(){l.addEvent(e.contentWindow||e,"resize",t),t()}),e}function o(t,e,n){var a=t._chartjs={ticking:!1},o=function(){a.ticking||(a.ticking=!0,l.requestAnimFrame.call(window,function(){if(a.resizer)return a.ticking=!1,e(i("resize",n))}))};a.resizer=r(o),t.insertBefore(a.resizer,t.firstChild)}function s(t){if(t&&t._chartjs){var e=t._chartjs.resizer;e&&(e.parentNode.removeChild(e),t._chartjs.resizer=null),delete t._chartjs}}var l=t.helpers,u={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};return{acquireContext:function(t,e){if("string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t instanceof HTMLCanvasElement){var i=t.getContext&&t.getContext("2d");if(i instanceof CanvasRenderingContext2D)return n(t,e),i}return null},releaseContext:function(t){var e=t.canvas;if(e._chartjs){var n=e._chartjs.initial;["height","width"].forEach(function(t){var i=n[t];void 0===i||null===i?e.removeAttribute(t):e.setAttribute(t,i)}),l.each(n.style||{},function(t,n){e.style[n]=t}),e.width=e.width,delete e._chartjs}},addEventListener:function(t,e,n){var i=t.chart.canvas;if("resize"===e)return void o(i.parentNode,n,t.chart);var r=n._chartjs||(n._chartjs={}),s=r.proxies||(r.proxies={}),u=s[t.id+"_"+e]=function(e){n(a(e,t.chart))};l.addEvent(i,e,u)},removeEventListener:function(t,e,n){var i=t.chart.canvas;if("resize"===e)return void s(i.parentNode,n);var a=n._chartjs||{},r=a.proxies||{},o=r[t.id+"_"+e];o&&l.removeEvent(i,e,o)}}}},{}],42:[function(t,e,n){"use strict";var i=t(41);e.exports=function(t){t.platform={acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},t.helpers.extend(t.platform,i(t))}},{41:41}],43:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"bottom"},i=t.Scale.extend({getLabels:function(){var t=this.chart.data;return(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t=this,n=t.getLabels();t.minIndex=0,t.maxIndex=n.length-1;var i;void 0!==t.options.ticks.min&&(i=e.indexOf(n,t.options.ticks.min),t.minIndex=i!==-1?i:t.minIndex),void 0!==t.options.ticks.max&&(i=e.indexOf(n,t.options.ticks.max),t.maxIndex=i!==-1?i:t.maxIndex),t.min=n[t.minIndex],t.max=n[t.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,i=n.chart.data,a=n.isHorizontal();return i.yLabels&&!a?n.getRightValue(i.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e,n,i){var a=this,r=Math.max(a.maxIndex+1-a.minIndex-(a.options.gridLines.offsetGridLines?0:1),1);if(void 0!==t&&isNaN(e)){var o=a.getLabels(),s=o.indexOf(t);e=s!==-1?s:e}if(a.isHorizontal()){var l=a.width/r,u=l*(e-a.minIndex);return(a.options.gridLines.offsetGridLines&&i||a.maxIndex===a.minIndex&&i)&&(u+=l/2),a.left+Math.round(u)}var d=a.height/r,c=d*(e-a.minIndex);return a.options.gridLines.offsetGridLines&&i&&(c+=d/2),a.top+Math.round(c)},getPixelForTick:function(t,e){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null,e)},getValueForPixel:function(t){var e,n=this,i=Math.max(n.ticks.length-(n.options.gridLines.offsetGridLines?0:1),1),a=n.isHorizontal(),r=(a?n.width:n.height)/i;return t-=a?n.left:n.top,n.options.gridLines.offsetGridLines&&(t-=r/2),e=t<=0?0:Math.round(t/r)},getBasePixel:function(){return this.bottom}});t.scaleService.registerScaleType("category",i,n)}},{}],44:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"left",ticks:{callback:t.Ticks.formatters.linear}},i=t.LinearScaleBase.extend({determineDataLimits:function(){function t(t){return s?t.xAxisID===n.id:t.yAxisID===n.id}var n=this,i=n.options,a=n.chart,r=a.data,o=r.datasets,s=n.isHorizontal();n.min=null,n.max=null;var l=i.stacked;if(void 0===l&&e.each(o,function(e,n){if(!l){var i=a.getDatasetMeta(n);a.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(l=!0)}}),i.stacked||l){var u={};e.each(o,function(r,o){var s=a.getDatasetMeta(o),l=[s.type,void 0===i.stacked&&void 0===s.stack?o:"",s.stack].join(".");void 0===u[l]&&(u[l]={positiveValues:[],negativeValues:[]});var d=u[l].positiveValues,c=u[l].negativeValues;a.isDatasetVisible(o)&&t(s)&&e.each(r.data,function(t,e){var a=+n.getRightValue(t);isNaN(a)||s.data[e].hidden||(d[e]=d[e]||0,c[e]=c[e]||0,i.relativePoints?d[e]=100:a<0?c[e]+=a:d[e]+=a)})}),e.each(u,function(t){var i=t.positiveValues.concat(t.negativeValues),a=e.min(i),r=e.max(i);n.min=null===n.min?a:Math.min(n.min,a),n.max=null===n.max?r:Math.max(n.max,r)})}else e.each(o,function(i,r){var o=a.getDatasetMeta(r);a.isDatasetVisible(r)&&t(o)&&e.each(i.data,function(t,e){var i=+n.getRightValue(t);isNaN(i)||o.data[e].hidden||(null===n.min?n.min=i:i<n.min&&(n.min=i),null===n.max?n.max=i:i>n.max&&(n.max=i))})});this.handleTickRangeOptions()},getTickLimit:function(){var n,i=this,a=i.options.ticks;if(i.isHorizontal())n=Math.min(a.maxTicksLimit?a.maxTicksLimit:11,Math.ceil(i.width/50));else{var r=e.getValueOrDefault(a.fontSize,t.defaults.global.defaultFontSize);n=Math.min(a.maxTicksLimit?a.maxTicksLimit:11,Math.ceil(i.height/(2*r)))}return n},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e,n=this,i=n.start,a=+n.getRightValue(t),r=n.end-i;return n.isHorizontal()?(e=n.left+n.width/r*(a-i),Math.round(e)):(e=n.bottom-n.height/r*(a-i),Math.round(e))},getValueForPixel:function(t){var e=this,n=e.isHorizontal(),i=n?e.width:e.height,a=(n?t-e.left:e.bottom-t)/i;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",i,n)}},{}],45:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=e.noop;t.LinearScaleBase=t.Scale.extend({handleTickRangeOptions:function(){var t=this,n=t.options,i=n.ticks;if(i.beginAtZero){var a=e.sign(t.min),r=e.sign(t.max);a<0&&r<0?t.max=0:a>0&&r>0&&(t.min=0)}void 0!==i.min?t.min=i.min:void 0!==i.suggestedMin&&(t.min=Math.min(t.min,i.suggestedMin)),void 0!==i.max?t.max=i.max:void 0!==i.suggestedMax&&(t.max=Math.max(t.max,i.suggestedMax)),t.min===t.max&&(t.max++,i.beginAtZero||t.min--)},getTickLimit:n,handleDirectionalChanges:n,buildTicks:function(){var n=this,i=n.options,a=i.ticks,r=n.getTickLimit();r=Math.max(2,r);var o={maxTicks:r,min:a.min,max:a.max,stepSize:e.getValueOrDefault(a.fixedStepSize,a.stepSize)},s=n.ticks=t.Ticks.generators.linear(o,n);n.handleDirectionalChanges(),n.max=e.max(s),n.min=e.min(s),a.reverse?(s.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),t.Scale.prototype.convertTicksToLabels.call(e)}})}},{}],46:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"left",ticks:{callback:t.Ticks.formatters.logarithmic}},i=t.Scale.extend({determineDataLimits:function(){function t(t){return u?t.xAxisID===n.id:t.yAxisID===n.id}var n=this,i=n.options,a=i.ticks,r=n.chart,o=r.data,s=o.datasets,l=e.getValueOrDefault,u=n.isHorizontal();n.min=null,n.max=null,n.minNotZero=null;var d=i.stacked;if(void 0===d&&e.each(s,function(e,n){if(!d){var i=r.getDatasetMeta(n);r.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(d=!0)}}),i.stacked||d){var c={};e.each(s,function(a,o){var s=r.getDatasetMeta(o),l=[s.type,void 0===i.stacked&&void 0===s.stack?o:"",s.stack].join(".");r.isDatasetVisible(o)&&t(s)&&(void 0===c[l]&&(c[l]=[]),e.each(a.data,function(t,e){var a=c[l],r=+n.getRightValue(t);isNaN(r)||s.data[e].hidden||(a[e]=a[e]||0,i.relativePoints?a[e]=100:a[e]+=r)}))}),e.each(c,function(t){var i=e.min(t),a=e.max(t);n.min=null===n.min?i:Math.min(n.min,i),n.max=null===n.max?a:Math.max(n.max,a)})}else e.each(s,function(i,a){var o=r.getDatasetMeta(a);r.isDatasetVisible(a)&&t(o)&&e.each(i.data,function(t,e){var i=+n.getRightValue(t);isNaN(i)||o.data[e].hidden||(null===n.min?n.min=i:i<n.min&&(n.min=i),null===n.max?n.max=i:i>n.max&&(n.max=i),0!==i&&(null===n.minNotZero||i<n.minNotZero)&&(n.minNotZero=i))})});n.min=l(a.min,n.min),n.max=l(a.max,n.max),n.min===n.max&&(0!==n.min&&null!==n.min?(n.min=Math.pow(10,Math.floor(e.log10(n.min))-1),n.max=Math.pow(10,Math.floor(e.log10(n.max))+1)):(n.min=1,n.max=10))},buildTicks:function(){var n=this,i=n.options,a=i.ticks,r={min:a.min,max:a.max},o=n.ticks=t.Ticks.generators.logarithmic(r,n);n.isHorizontal()||o.reverse(),n.max=e.max(o),n.min=e.min(o),a.reverse?(o.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),t.Scale.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},getPixelForValue:function(t){var n,i,a,r=this,o=r.start,s=+r.getRightValue(t),l=r.options,u=l.ticks;return r.isHorizontal()?(a=e.log10(r.end)-e.log10(o),0===s?i=r.left:(n=r.width,i=r.left+n/a*(e.log10(s)-e.log10(o)))):(n=r.height,0!==o||u.reverse?0===r.end&&u.reverse?(a=e.log10(r.start)-e.log10(r.minNotZero),i=s===r.end?r.top:s===r.minNotZero?r.top+.02*n:r.top+.02*n+.98*n/a*(e.log10(s)-e.log10(r.minNotZero))):(a=e.log10(r.end)-e.log10(o),n=r.height,i=r.bottom-n/a*(e.log10(s)-e.log10(o))):(a=e.log10(r.end)-e.log10(r.minNotZero),i=s===o?r.bottom:s===r.minNotZero?r.bottom-.02*n:r.bottom-.02*n-.98*n/a*(e.log10(s)-e.log10(r.minNotZero)))),i},getValueForPixel:function(t){var n,i,a=this,r=e.log10(a.end)-e.log10(a.start);return a.isHorizontal()?(i=a.width,n=a.start*Math.pow(10,(t-a.left)*r/i)):(i=a.height,n=Math.pow(10,(a.bottom-t)*r/i)/a.start),n}});t.scaleService.registerScaleType("logarithmic",i,n)}},{}],47:[function(t,e,n){"use strict";e.exports=function(t){function e(t){return t.options.lineArc?0:t.chart.data.labels.length}function n(t){var e=t.options.pointLabels,n=f.getValueOrDefault(e.fontSize,g.defaultFontSize),i=f.getValueOrDefault(e.fontStyle,g.defaultFontStyle),a=f.getValueOrDefault(e.fontFamily,g.defaultFontFamily),r=f.fontString(n,i,a);return{size:n,style:i,family:a,font:r}}function i(t,e,n){return f.isArray(n)?{w:f.longestText(t,t.font,n),h:n.length*e+1.5*(n.length-1)*e}:{w:t.measureText(n).width,h:e}}function a(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n-5,end:e}:{start:e,end:e+n+5}}function r(t){var r,o,s,l=n(t),u=Math.min(t.height/2,t.width/2),d={l:t.width,r:0,t:t.height,b:0},c={};t.ctx.font=l.font,t._pointLabelSizes=[];var h=e(t);for(r=0;r<h;r++){s=t.getPointPosition(r,u),o=i(t.ctx,l.size,t.pointLabels[r]||""),t._pointLabelSizes[r]=o;var g=t.getIndexAngle(r),m=f.toDegrees(g)%360,p=a(m,s.x,o.w,0,180),v=a(m,s.y,o.h,90,270);p.start<d.l&&(d.l=p.start,c.l=g),p.end>d.r&&(d.r=p.end,c.r=g),v.start<d.t&&(d.t=v.start,c.t=g),v.end>d.b&&(d.b=v.end,c.b=g)}t.setReductions(u,d,c)}function o(t){var e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0)}function s(t){return 0===t||180===t?"center":t<180?"left":"right"}function l(t,e,n,i){if(f.isArray(e))for(var a=n.y,r=1.5*i,o=0;o<e.length;++o)t.fillText(e[o],n.x,a),a+=r;else t.fillText(e,n.x,n.y)}function u(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function d(t){var i=t.ctx,a=f.getValueOrDefault,r=t.options,o=r.angleLines,d=r.pointLabels;i.lineWidth=o.lineWidth,i.strokeStyle=o.color;var c=t.getDistanceFromCenterForValue(r.reverse?t.min:t.max),h=n(t);i.textBaseline="top";for(var m=e(t)-1;m>=0;m--){if(o.display){var p=t.getPointPosition(m,c);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(p.x,p.y),i.stroke(),i.closePath()}var v=t.getPointPosition(m,c+5),b=a(d.fontColor,g.defaultFontColor);i.font=h.font,i.fillStyle=b;var y=t.getIndexAngle(m),x=f.toDegrees(y);i.textAlign=s(x),u(x,t._pointLabelSizes[m],v),l(i,t.pointLabels[m]||"",v,h.size)}}function c(t,n,i,a){var r=t.ctx;if(r.strokeStyle=f.getValueAtIndexOrDefault(n.color,a-1),r.lineWidth=f.getValueAtIndexOrDefault(n.lineWidth,a-1),t.options.lineArc)r.beginPath(),r.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),r.closePath(),r.stroke();else{var o=e(t);if(0===o)return;r.beginPath();var s=t.getPointPosition(0,i);r.moveTo(s.x,s.y);for(var l=1;l<o;l++)s=t.getPointPosition(l,i),r.lineTo(s.x,s.y);r.closePath(),r.stroke()}}function h(t){return f.isNumber(t)?t:0}var f=t.helpers,g=t.defaults.global,m={display:!0,animate:!0,lineArc:!1,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:t.Ticks.formatters.linear},pointLabels:{fontSize:10,callback:function(t){return t}}},p=t.LinearScaleBase.extend({setDimensions:function(){var t=this,e=t.options,n=e.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var i=f.min([t.height,t.width]),a=f.getValueOrDefault(n.fontSize,g.defaultFontSize);t.drawingArea=e.display?i/2-(a/2+n.backdropPaddingY):i/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;f.each(e.data.datasets,function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);f.each(a.data,function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))})}}),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},getTickLimit:function(){var t=this.options.ticks,e=f.getValueOrDefault(t.fontSize,g.defaultFontSize);return Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*e)))},convertTicksToLabels:function(){var e=this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(e.options.pointLabels.callback,e)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){this.options.lineArc?o(this):r(this)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-i.height,0)/Math.cos(n.b);a=h(a),r=h(r),o=h(o),s=h(s),i.drawingArea=Math.min(Math.round(t-(a+r)/2),Math.round(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-i-a.drawingArea;a.xCenter=Math.round((o+r)/2+a.left),a.yCenter=Math.round((s+l)/2+a.top)},getIndexAngle:function(t){var n=2*Math.PI/e(this),i=this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0,a=i*Math.PI*2/360;return t*n+a},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this,i=n.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+n.xCenter,y:Math.round(Math.sin(i)*e)+n.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this,e=t.min,n=t.max;return t.getPointPositionForValue(0,t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,i=e.ticks,a=f.getValueOrDefault;
16
+ if(e.display){var r=t.ctx,o=a(i.fontSize,g.defaultFontSize),s=a(i.fontStyle,g.defaultFontStyle),l=a(i.fontFamily,g.defaultFontFamily),u=f.fontString(o,s,l);f.each(t.ticks,function(s,l){if(l>0||e.reverse){var d=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),h=t.yCenter-d;if(n.display&&0!==l&&c(t,n,d,l),i.display){var f=a(i.fontColor,g.defaultFontColor);if(r.font=u,i.showLabelBackdrop){var m=r.measureText(s).width;r.fillStyle=i.backdropColor,r.fillRect(t.xCenter-m/2-i.backdropPaddingX,h-o/2-i.backdropPaddingY,m+2*i.backdropPaddingX,o+2*i.backdropPaddingY)}r.textAlign="center",r.textBaseline="middle",r.fillStyle=f,r.fillText(s,t.xCenter,h)}}}),e.lineArc||d(t)}}});t.scaleService.registerScaleType("radialLinear",p,m)}},{}],48:[function(t,e,n){"use strict";var i=t(6);i="function"==typeof i?i:window.moment,e.exports=function(t){var e=t.helpers,n={units:[{name:"millisecond",steps:[1,2,5,10,20,50,100,250,500]},{name:"second",steps:[1,2,5,10,30]},{name:"minute",steps:[1,2,5,10,30]},{name:"hour",steps:[1,2,3,6,12]},{name:"day",steps:[1,2,5]},{name:"week",maxStep:4},{name:"month",maxStep:3},{name:"quarter",maxStep:4},{name:"year",maxStep:!1}]},a={position:"bottom",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm:ss a",hour:"MMM D, hA",day:"ll",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}},ticks:{autoSkip:!1}},r=t.Scale.extend({initialize:function(){if(!i)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");t.Scale.prototype.initialize.call(this)},getLabelMoment:function(t,e){return null===t||null===e?null:"undefined"!=typeof this.labelMoments[t]?this.labelMoments[t][e]:null},getLabelDiff:function(t,e){var n=this;return null===t||null===e?null:(void 0===n.labelDiffs&&n.buildLabelDiffs(),"undefined"!=typeof n.labelDiffs[t]?n.labelDiffs[t][e]:null)},getMomentStartOf:function(t){var e=this;return"week"===e.options.time.unit&&e.options.time.isoWeekday!==!1?t.clone().startOf("isoWeek").isoWeekday(e.options.time.isoWeekday):t.clone().startOf(e.tickUnit)},determineDataLimits:function(){var t=this;t.labelMoments=[];var n=[];t.chart.data.labels&&t.chart.data.labels.length>0?(e.each(t.chart.data.labels,function(e){var i=t.parseTime(e);i.isValid()&&(t.options.time.round&&i.startOf(t.options.time.round),n.push(i))},t),t.firstTick=i.min.call(t,n),t.lastTick=i.max.call(t,n)):(t.firstTick=null,t.lastTick=null),e.each(t.chart.data.datasets,function(a,r){var o=[],s=t.chart.isDatasetVisible(r);"object"==typeof a.data[0]&&null!==a.data[0]?e.each(a.data,function(e){var n=t.parseTime(t.getRightValue(e));n.isValid()&&(t.options.time.round&&n.startOf(t.options.time.round),o.push(n),s&&(t.firstTick=null!==t.firstTick?i.min(t.firstTick,n):n,t.lastTick=null!==t.lastTick?i.max(t.lastTick,n):n))},t):o=n,t.labelMoments.push(o)},t),t.options.time.min&&(t.firstTick=t.parseTime(t.options.time.min)),t.options.time.max&&(t.lastTick=t.parseTime(t.options.time.max)),t.firstTick=(t.firstTick||i()).clone(),t.lastTick=(t.lastTick||i()).clone()},buildLabelDiffs:function(){var t=this;t.labelDiffs=[];var n=[];t.chart.data.labels&&t.chart.data.labels.length>0&&e.each(t.chart.data.labels,function(e){var i=t.parseTime(e);i.isValid()&&(t.options.time.round&&i.startOf(t.options.time.round),n.push(i.diff(t.firstTick,t.tickUnit,!0)))},t),e.each(t.chart.data.datasets,function(i){var a=[];"object"==typeof i.data[0]&&null!==i.data[0]?e.each(i.data,function(e){var n=t.parseTime(t.getRightValue(e));n.isValid()&&(t.options.time.round&&n.startOf(t.options.time.round),a.push(n.diff(t.firstTick,t.tickUnit,!0)))},t):a=n,t.labelDiffs.push(a)},t)},buildTicks:function(){var i=this;i.ctx.save();var a=e.getValueOrDefault(i.options.ticks.fontSize,t.defaults.global.defaultFontSize),r=e.getValueOrDefault(i.options.ticks.fontStyle,t.defaults.global.defaultFontStyle),o=e.getValueOrDefault(i.options.ticks.fontFamily,t.defaults.global.defaultFontFamily),s=e.fontString(a,r,o);if(i.ctx.font=s,i.ticks=[],i.unitScale=1,i.scaleSizeInUnits=0,i.options.time.unit)i.tickUnit=i.options.time.unit||"day",i.displayFormat=i.options.time.displayFormats[i.tickUnit],i.scaleSizeInUnits=i.lastTick.diff(i.firstTick,i.tickUnit,!0),i.unitScale=e.getValueOrDefault(i.options.time.unitStepSize,1);else{var l=i.isHorizontal()?i.width:i.height,u=i.tickFormatFunction(i.firstTick,0,[]),d=i.ctx.measureText(u).width,c=Math.cos(e.toRadians(i.options.ticks.maxRotation)),h=Math.sin(e.toRadians(i.options.ticks.maxRotation));d=d*c+a*h;var f=l/d;i.tickUnit=i.options.time.minUnit,i.scaleSizeInUnits=i.lastTick.diff(i.firstTick,i.tickUnit,!0),i.displayFormat=i.options.time.displayFormats[i.tickUnit];for(var g=0,m=n.units[g];g<n.units.length;){if(i.unitScale=1,e.isArray(m.steps)&&Math.ceil(i.scaleSizeInUnits/f)<e.max(m.steps)){for(var p=0;p<m.steps.length;++p)if(m.steps[p]>=Math.ceil(i.scaleSizeInUnits/f)){i.unitScale=e.getValueOrDefault(i.options.time.unitStepSize,m.steps[p]);break}break}if(m.maxStep===!1||Math.ceil(i.scaleSizeInUnits/f)<m.maxStep){i.unitScale=e.getValueOrDefault(i.options.time.unitStepSize,Math.ceil(i.scaleSizeInUnits/f));break}++g,m=n.units[g],i.tickUnit=m.name;var v=i.firstTick.diff(i.getMomentStartOf(i.firstTick),i.tickUnit,!0),b=i.getMomentStartOf(i.lastTick.clone().add(1,i.tickUnit)).diff(i.lastTick,i.tickUnit,!0);i.scaleSizeInUnits=i.lastTick.diff(i.firstTick,i.tickUnit,!0)+v+b,i.displayFormat=i.options.time.displayFormats[m.name]}}var y;if(i.options.time.min?y=i.getMomentStartOf(i.firstTick):(i.firstTick=i.getMomentStartOf(i.firstTick),y=i.firstTick),!i.options.time.max){var x=i.getMomentStartOf(i.lastTick),k=x.diff(i.lastTick,i.tickUnit,!0);k<0?i.lastTick=i.getMomentStartOf(i.lastTick.add(1,i.tickUnit)):k>=0&&(i.lastTick=x),i.scaleSizeInUnits=i.lastTick.diff(i.firstTick,i.tickUnit,!0)}i.options.time.displayFormat&&(i.displayFormat=i.options.time.displayFormat),i.ticks.push(i.firstTick.clone());for(var _=i.unitScale;_<=i.scaleSizeInUnits;_+=i.unitScale){var w=y.clone().add(_,i.tickUnit);if(i.options.time.max&&w.diff(i.lastTick,i.tickUnit,!0)>=0)break;i.ticks.push(w)}var S=i.ticks[i.ticks.length-1].diff(i.lastTick,i.tickUnit);0===S&&0!==i.scaleSizeInUnits||(i.options.time.max?(i.ticks.push(i.lastTick.clone()),i.scaleSizeInUnits=i.lastTick.diff(i.ticks[0],i.tickUnit,!0)):(i.ticks.push(i.lastTick.clone()),i.scaleSizeInUnits=i.lastTick.diff(i.firstTick,i.tickUnit,!0))),i.ctx.restore(),i.labelDiffs=void 0},getLabelForIndex:function(t,e){var n=this,i=n.chart.data.labels&&t<n.chart.data.labels.length?n.chart.data.labels[t]:"",a=n.chart.data.datasets[e].data[t];return null!==a&&"object"==typeof a&&(i=n.getRightValue(a)),n.options.time.tooltipFormat&&(i=n.parseTime(i).format(n.options.time.tooltipFormat)),i},tickFormatFunction:function(t,n,i){var a=t.format(this.displayFormat),r=this.options.ticks,o=e.getValueOrDefault(r.callback,r.userCallback);return o?o(a,n,i):a},convertTicksToLabels:function(){var t=this;t.tickMoments=t.ticks,t.ticks=t.ticks.map(t.tickFormatFunction,t)},getPixelForValue:function(t,e,n){var i=this,a=null;if(void 0!==e&&void 0!==n&&(a=i.getLabelDiff(n,e)),null===a&&(t&&t.isValid||(t=i.parseTime(i.getRightValue(t))),t&&t.isValid&&t.isValid()&&(a=t.diff(i.firstTick,i.tickUnit,!0))),null!==a){var r=0!==a?a/i.scaleSizeInUnits:a;if(i.isHorizontal()){var o=i.width*r;return i.left+Math.round(o)}var s=i.height*r;return i.top+Math.round(s)}},getPixelForTick:function(t){return this.getPixelForValue(this.tickMoments[t],null,null)},getValueForPixel:function(t){var e=this,n=e.isHorizontal()?e.width:e.height,a=(t-(e.isHorizontal()?e.left:e.top))/n;return a*=e.scaleSizeInUnits,e.firstTick.clone().add(i.duration(a,e.tickUnit).asSeconds(),"seconds")},parseTime:function(t){var e=this;return"string"==typeof e.options.time.parser?i(t,e.options.time.parser):"function"==typeof e.options.time.parser?e.options.time.parser(t):"function"==typeof t.getMonth||"number"==typeof t?i(t):t.isValid&&t.isValid()?t:"string"!=typeof e.options.time.format&&e.options.time.format.call?(console.warn("options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale"),e.options.time.format(t)):i(t,e.options.time.format)}});t.scaleService.registerScaleType("time",r,a)}},{6:6}]},{},[7])(7)});
assets/js/admin/admin.js CHANGED
@@ -655,7 +655,7 @@ lprHook.addAction('lpr_admin_quiz_question_html', _lprAdminQuestionHTML);
655
  parse_json : function (response) {
656
  if (typeof reposnse == 'object') return response;
657
  try {
658
- var m = response.match(/<!-- LP_AJAX_START -->(.*)<!-- LP_AJAX_END -->/)
659
 
660
  if (m && m[1]) {
661
  response = JSON.parse(m[1])
@@ -1123,8 +1123,8 @@ jQuery(document).ready(function ($) {
1123
  id = url.getQueryVar('tab');
1124
  $li.addClass('active').siblings().removeClass('active');
1125
  $el.find('#meta-box-tab-' + id).addClass('active').siblings().removeClass('active');
 
1126
  LP.setUrl(url);
1127
- console.log(id)
1128
  //$(window).scrollTop($box.offset().top - 120);
1129
  });
1130
  $el.data('metaBoxTabs', tabs);
655
  parse_json : function (response) {
656
  if (typeof reposnse == 'object') return response;
657
  try {
658
+ var m = response.match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/)
659
 
660
  if (m && m[1]) {
661
  response = JSON.parse(m[1])
1123
  id = url.getQueryVar('tab');
1124
  $li.addClass('active').siblings().removeClass('active');
1125
  $el.find('#meta-box-tab-' + id).addClass('active').siblings().removeClass('active');
1126
+ $el.find('input[name="learn-press-meta-box-tab"]').val(id);
1127
  LP.setUrl(url);
 
1128
  //$(window).scrollTop($box.offset().top - 120);
1129
  });
1130
  $el.data('metaBoxTabs', tabs);
assets/js/admin/attributes.js CHANGED
@@ -81,7 +81,12 @@
81
  })
82
  .on('click', '#save-attributes', saveAttributesEvent)
83
  .on('keyup.addNewAttributeValueEvent', '.select2-input', addNewAttributeValueEvent);
84
- $('.course-attribute-values').select2(select2Options);
 
 
 
 
 
85
 
86
  });
87
  })(jQuery);
81
  })
82
  .on('click', '#save-attributes', saveAttributesEvent)
83
  .on('keyup.addNewAttributeValueEvent', '.select2-input', addNewAttributeValueEvent);
84
+
85
+ var $courseAttributes = $('.course-attribute-values') ;
86
+
87
+ if ($courseAttributes.length) {
88
+ $courseAttributes.select2(select2Options);
89
+ }
90
 
91
  });
92
  })(jQuery);
assets/js/admin/course-editor.js CHANGED
@@ -34,7 +34,7 @@
34
  },
35
  render : function () {
36
  this.$editor = this.template('course-editor');
37
- var $curriculum = this.$editor.find('#course-curriculum');
38
  this.model.sections.forEach(function (section) {
39
  var $section = this._createSection(section);
40
  $curriculum.append($section);
@@ -69,8 +69,8 @@
69
  axis : 'y',
70
  handle : '.section-item-move',
71
  connectWith: '.section-items',
72
- stop: function(e, ui){
73
- if(!ui.item.hasClass('ui-draggable')){
74
  return;
75
  }
76
  var temp_id = parseInt($(this).closest('.course-section').data('temp_id')),
@@ -88,7 +88,7 @@
88
  $section.find('.section-content-types li').draggable({
89
  revert : 'invalid',
90
  connectToSortable: '.section-items',
91
- helper : function(){
92
 
93
  var $helper = $(this).clone();
94
  $helper.get(0).className = 'ui-draggable ui-draggable-handle course-section-item';
@@ -99,7 +99,7 @@
99
  accept: '.dashicons',
100
  drop : function (e, ui) {
101
 
102
- if(!xxx.check(10)){
103
  //return;
104
  }
105
 
@@ -149,7 +149,7 @@
149
  this.model.sections.add(section);
150
 
151
  var $section = this._createSection(section);
152
- this.$editor.find('#course-curriculum').append($section);
153
  $section.find('.section-name').focus();
154
  },
155
  _showContentTypes: function (e) {
34
  },
35
  render : function () {
36
  this.$editor = this.template('course-editor');
37
+ var $curriculum = this.$editor.find('#lp-course-curriculum');
38
  this.model.sections.forEach(function (section) {
39
  var $section = this._createSection(section);
40
  $curriculum.append($section);
69
  axis : 'y',
70
  handle : '.section-item-move',
71
  connectWith: '.section-items',
72
+ stop : function (e, ui) {
73
+ if (!ui.item.hasClass('ui-draggable')) {
74
  return;
75
  }
76
  var temp_id = parseInt($(this).closest('.course-section').data('temp_id')),
88
  $section.find('.section-content-types li').draggable({
89
  revert : 'invalid',
90
  connectToSortable: '.section-items',
91
+ helper : function () {
92
 
93
  var $helper = $(this).clone();
94
  $helper.get(0).className = 'ui-draggable ui-draggable-handle course-section-item';
99
  accept: '.dashicons',
100
  drop : function (e, ui) {
101
 
102
+ if (!xxx.check(10)) {
103
  //return;
104
  }
105
 
149
  this.model.sections.add(section);
150
 
151
  var $section = this._createSection(section);
152
+ this.$editor.find('#lp-course-curriculum').append($section);
153
  $section.find('.section-name').focus();
154
  },
155
  _showContentTypes: function (e) {
assets/js/admin/meta-box-course.js CHANGED
@@ -30,7 +30,7 @@
30
  'keyup' : 'processKeyEvents',
31
  'click .lp-section-item .lp-remove' : '_removeItem',
32
  'click .lp-toggle' : 'toggleSection',
33
- 'click .lp-course-curriculum-toggle a' : 'toggleSections',
34
  'keyup input.no-submit' : 'onEnterInput',
35
  'update input.no-submit' : 'onEnterInput',
36
  'keydown' : 'preventSubmit',
@@ -45,7 +45,8 @@
45
  'click .learn-press-dropdown-item-types > li a' : '_changeItemType',
46
  'change .lp-item-name ' : '_updateItem',
47
  'focus .lp-item-name' : '_focusItem',
48
- 'blur .lp-item-name' : '_blurItem'
 
49
  },
50
  removeSectionIds : [],
51
  removeItemIds : [],
@@ -66,6 +67,13 @@
66
  $('#course_curriculum.postbox').removeClass('closed');
67
 
68
  },
 
 
 
 
 
 
 
69
  _focusItem : function (e) {
70
  $(e.target).closest('tr').removeClass('focus');
71
  },
@@ -145,7 +153,7 @@
145
  ///////////
146
  var $chkPayment = $('input[name="_lp_payment"]').on('click', function () {
147
  var toggle = !($(this).is(':checked'));
148
- $('.lp-course-price-field').toggleClass('hide-if-js', toggle).attr('xxx', Math.random());
149
  $('.lp-course-required-enroll').toggleClass('hide-if-js', !toggle);
150
  if (toggle) {
151
  $('.lp-course-sale_start-field').addClass('hide');
@@ -242,7 +250,6 @@
242
  }
243
 
244
 
245
-
246
  $(document)
247
  .on('keyup', '.lp-modal-search input[name="lp-item-name"]', this.searchItem)
248
  .on('click change', '.lp-modal-search input[type="checkbox"]', this.toggleAddItemButtonState)
@@ -252,17 +259,7 @@
252
  .on('change', 'input[name="learn-press-submit-for-review"]', this.toggleMessage);
253
 
254
  $('input[name="learn_press_submit_course_notice_reviewer"]').trigger('change');
255
- $(window).scroll(function () {
256
- return;
257
- var $holder = $('#course_tabs_placeholder'),
258
- $tabs = $('#course_tabs'),
259
- top = $holder.offset().top;
260
- if ($(window).scrollTop() > top) {
261
- $tabs.css('width', $tabs.width()).addClass('fixed');
262
- } else {
263
- $tabs.css('width', '').removeClass('fixed');
264
- }
265
- });
266
  },
267
  toggleMessage : function (e) {
268
  if (e.target.checked) {
@@ -293,22 +290,22 @@
293
  return this.checked
294
  }).length )
295
  ? (
296
- $checkbox.closest('.curriculum-section-content')
297
- .find('.item-bulk-actions button')
298
- .removeAttr('disabled')
299
- .removeClass('hide-if-js')
300
- .map(function () {
301
- var $b = $(this);
302
- $b.attr('data-action') == 'cancel' ? $b.removeClass('hide-if-js') : $b.html($b.attr('data-title') + ' (+' + len + ')').show()
303
- })
304
- )
305
- : $checkbox.closest('.curriculum-section-content')
306
  .find('.item-bulk-actions button')
307
- .hide()
 
308
  .map(function () {
309
  var $b = $(this);
310
- $b.attr('data-action') == 'cancel' ? $b.hide() : $b.html($b.attr('data-title')).hide()
311
- });
 
 
 
 
 
 
 
 
312
  $checkbox.closest('.lp-section-item').toggleClass('remove', e.target.checked);
313
  if (len == $all.length) {
314
  $checkAll.attr('checked', 'checked')
@@ -575,10 +572,11 @@
575
  e.preventDefault();
576
  var $target = $(e.target);
577
  if ($target.attr('data-action') == 'expand') {
578
- this.$('.curriculum-section:not(.lp-empty-section) .lp-curriculum-section-content').slideDown();
579
  } else {
580
- this.$('.curriculum-section:not(.lp-empty-section) .lp-curriculum-section-content').slideUp();
581
  }
 
582
  },
583
  getSelectedItems : function () {
584
  return this.$('.lp-section-item[data-item_id]').map(function () {
@@ -1425,7 +1423,7 @@
1425
  return false;
1426
  } else {
1427
  }*/
1428
- });
1429
  $('#learn-press-notice-check').change(function () {
1430
  var that = this,
1431
  $review = $('textarea[name="review_message"]').prop('disabled', !this.checked),
@@ -1444,6 +1442,22 @@
1444
  });
1445
  });
1446
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1447
 
1448
  function canSubmit() {
1449
  if ((opts.current_user_type == 'admin') || !opts.required_review || (opts.course_status == 'publish' && opts.enable_edit_published)) {
@@ -1461,80 +1475,10 @@
1461
  }
1462
  $('#course_curriculum-sortables').sortable('disable');
1463
 
1464
- if (LP_Settings.enable_course_tabs == 'yes') {
1465
- meta_boxes_to_tabs();
1466
- }
1467
- }
1468
 
1469
- function meta_boxes_to_tabs() {
1470
- var $tabWrapper = $('#course-tabs'),
1471
- requestedTab = window.location.href.getQueryVar('tab');
1472
- $('#normal-sortables .postbox:visible').each(function () {
1473
- var $tabContent = $(this).removeClass('closed');
1474
- $tabWrapper.append('<li><a data-tab="' + $tabContent.attr('id') + '" href="">' + $tabContent.find('.ui-sortable-handle').text() + '</a></li>');
1475
- if (!requestedTab) {
1476
- requestedTab = $tabContent.attr('id');
1477
- }
1478
- });
1479
- $(document).on('click', '#course-tabs :not(#switch-course-metaboxes) a', function () {
1480
- var $tab = $(this),
1481
- id = $tab.data('tab'),
1482
- url = window.location.href;
1483
-
1484
- $('#' + id + '.postbox').addClass('active').siblings('.active').removeClass('active');
1485
- $tab.parent().addClass('active').siblings().removeClass('active');
1486
- url = url.removeQueryVar('tab').addQueryVar('tab', id);
1487
- LP.setUrl(url);
1488
- $('#course-tab').val(id);
1489
- $(window).trigger('scroll');
1490
- return false;
1491
- })
1492
- /*.on('click', '#switch-course-metaboxes', function () {
1493
- var url = window.location.href;
1494
- url = url.removeQueryVar('tab').addQueryVar('switch-course-tab', 'off');
1495
- LP.reload(url);
1496
- });*/
1497
- $('#course-tabs [data-tab="' + requestedTab + '"]').trigger('click');
1498
  }
1499
 
1500
  $(document)
1501
- .ready(_ready)
1502
- .on('click', '.items-toggle a', _toggleSectionsHandler)
1503
- .on('click', '#toggle-meta-boxes', function (e) {
1504
- e.preventDefault();
1505
- var $boxes = $('#normal-sortables .postbox:visible'),
1506
- show = $boxes.first().hasClass('closed');
1507
- // We do not want wp run ajax for each meta box
1508
- $boxes.filter(':lt(' + ($boxes.length - 1) + ')').toggleClass('closed', !show);
1509
-
1510
- // Tell wp api update meta box states by trigger click event in the last item
1511
- $boxes.last().toggleClass('closed', show).find('.handlediv').trigger('click');
1512
- }).on('click', '#reorder-course-tabs', function (e) {
1513
- e.preventDefault();
1514
- $(this).hide();
1515
- $('#complete-reorder-course-tabs').show();
1516
- $('#course-tabs').sortable({
1517
- axis : 'x',
1518
- items : 'li:not(#switch-course-metaboxes)',
1519
- update: function (e, ui) {
1520
- var tab = ui.item.find('a').data('tab'),
1521
- $prev = ui.item.prev(),
1522
- $next = ui.item.next();
1523
- if ($prev.length) {
1524
- $('#' + tab + '.postbox').insertAfter($('#' + $prev.find('a').data('tab') + '.postbox'));
1525
- } else {
1526
- $('#' + tab + '.postbox').insertBefore($('#' + $next.find('a').data('tab') + '.postbox'));
1527
-
1528
- }
1529
- }
1530
- }).sortable('enable');
1531
- }).on('click', '#complete-reorder-course-tabs', function (e) {
1532
- e.preventDefault();
1533
- $(this).hide();
1534
- $('#reorder-course-tabs').show();
1535
- $('#course-tabs').sortable('disable');
1536
- })
1537
-
1538
-
1539
  })
1540
  (jQuery);
30
  'keyup' : 'processKeyEvents',
31
  'click .lp-section-item .lp-remove' : '_removeItem',
32
  'click .lp-toggle' : 'toggleSection',
33
+ 'click .curriculum-heading .items-toggle a' : 'toggleSections',
34
  'keyup input.no-submit' : 'onEnterInput',
35
  'update input.no-submit' : 'onEnterInput',
36
  'keydown' : 'preventSubmit',
45
  'click .learn-press-dropdown-item-types > li a' : '_changeItemType',
46
  'change .lp-item-name ' : '_updateItem',
47
  'focus .lp-item-name' : '_focusItem',
48
+ 'blur .lp-item-name' : '_blurItem',
49
+ 'click #learn-press-toggle-course-results' : '_toggleCourseResults'
50
  },
51
  removeSectionIds : [],
52
  removeItemIds : [],
67
  $('#course_curriculum.postbox').removeClass('closed');
68
 
69
  },
70
+ _toggleCourseResults : function (e) {
71
+ e.preventDefault();
72
+ var $a = $(e.target),
73
+ click = $a.data('click');
74
+ $a.html($a.data(click));
75
+ $a.attr('data-click', click == 'advanced' ? 'basic' : 'advanced');
76
+ },
77
  _focusItem : function (e) {
78
  $(e.target).closest('tr').removeClass('focus');
79
  },
153
  ///////////
154
  var $chkPayment = $('input[name="_lp_payment"]').on('click', function () {
155
  var toggle = !($(this).is(':checked'));
156
+ $('.lp-course-price-field').toggleClass('hide-if-js', toggle);
157
  $('.lp-course-required-enroll').toggleClass('hide-if-js', !toggle);
158
  if (toggle) {
159
  $('.lp-course-sale_start-field').addClass('hide');
250
  }
251
 
252
 
 
253
  $(document)
254
  .on('keyup', '.lp-modal-search input[name="lp-item-name"]', this.searchItem)
255
  .on('click change', '.lp-modal-search input[type="checkbox"]', this.toggleAddItemButtonState)
259
  .on('change', 'input[name="learn-press-submit-for-review"]', this.toggleMessage);
260
 
261
  $('input[name="learn_press_submit_course_notice_reviewer"]').trigger('change');
262
+
 
 
 
 
 
 
 
 
 
 
263
  },
264
  toggleMessage : function (e) {
265
  if (e.target.checked) {
290
  return this.checked
291
  }).length )
292
  ? (
293
+ $checkbox.closest('.curriculum-section-content')
 
 
 
 
 
 
 
 
 
294
  .find('.item-bulk-actions button')
295
+ .removeAttr('disabled')
296
+ .removeClass('hide-if-js')
297
  .map(function () {
298
  var $b = $(this);
299
+ $b.attr('data-action') == 'cancel' ? $b.removeClass('hide-if-js') : $b.html($b.attr('data-title') + ' (+' + len + ')').show()
300
+ })
301
+ )
302
+ : $checkbox.closest('.curriculum-section-content')
303
+ .find('.item-bulk-actions button')
304
+ .hide()
305
+ .map(function () {
306
+ var $b = $(this);
307
+ $b.attr('data-action') == 'cancel' ? $b.hide() : $b.html($b.attr('data-title')).hide()
308
+ });
309
  $checkbox.closest('.lp-section-item').toggleClass('remove', e.target.checked);
310
  if (len == $all.length) {
311
  $checkAll.attr('checked', 'checked')
572
  e.preventDefault();
573
  var $target = $(e.target);
574
  if ($target.attr('data-action') == 'expand') {
575
+ this.$('.curriculum-section:not(.lp-empty-section) .curriculum-section-content').slideDown();
576
  } else {
577
+ this.$('.curriculum-section:not(.lp-empty-section) .curriculum-section-content').slideUp();
578
  }
579
+ $target.addClass('hide-if-js').siblings('a').removeClass('hide-if-js');
580
  },
581
  getSelectedItems : function () {
582
  return this.$('.lp-section-item[data-item_id]').map(function () {
1423
  return false;
1424
  } else {
1425
  }*/
1426
+ }).attr('novalidate', 'true');
1427
  $('#learn-press-notice-check').change(function () {
1428
  var that = this,
1429
  $review = $('textarea[name="review_message"]').prop('disabled', !this.checked),
1442
  });
1443
  });
1444
 
1445
+ function _toggleCourseResults(click) {
1446
+
1447
+ }
1448
+
1449
+ $(document).on('click.learn-press-toggle-course-results', '#learn-press-toggle-course-results a', function (e) {
1450
+ e.preventDefault();
1451
+ var $a = $(this),
1452
+ click = $a.data('click');
1453
+ $a.html($a.data(click));
1454
+ $a.data('click', click == 'advanced' ? 'basic' : 'advanced');
1455
+ $a.closest('.rwmb-input').find('li:gt(1)').toggle(click != 'advanced');
1456
+ $a.parent().remove();
1457
+ });
1458
+ if ($.inArray($('input[name="_lp_course_result"]:checked').val(), ['', 'evaluate_lesson', 'evaluate_final_quiz']) != -1) {
1459
+ $('#learn-press-toggle-course-results').closest('.rwmb-input').find('li:gt(1)').hide();
1460
+ }
1461
 
1462
  function canSubmit() {
1463
  if ((opts.current_user_type == 'admin') || !opts.required_review || (opts.course_status == 'publish' && opts.enable_edit_published)) {
1475
  }
1476
  $('#course_curriculum-sortables').sortable('disable');
1477
 
 
 
 
 
1478
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1479
  }
1480
 
1481
  $(document)
1482
+ .ready(_ready);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1483
  })
1484
  (jQuery);
assets/js/admin/meta-box-order.js CHANGED
@@ -14,19 +14,69 @@
14
  _.bindAll(this, 'resetModal', 'updateModal', '_updateDescription');
15
  LP.Hook.addAction('learn_press_message_box_before_resize', this.resetModal);
16
  LP.Hook.addAction('learn_press_message_box_resize', this.updateModal);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  $(document).on('learn_press_modal_search_items_response', this.addItem2);
18
  this.userSuggest();
19
  },
20
  _updateDescription: function (e) {
21
  var $sel = $(e.target),
22
  $option = $sel.find('option:selected');
23
- $sel.siblings('.description').fadeOut('fast', function () {
24
- $(this).html($option.attr('data-desc'))
25
- .removeClass(function (c, d) {
26
- var m = d.match(/(lp-.*)\s?/);
27
- return m ? m[0] : '';
28
- }).addClass($option.val()).fadeIn('fast');
29
- });
30
  },
31
  userSuggest : function () {
32
  var id = ( typeof current_site_id !== 'undefined' ) ? '&site_id=' + current_site_id : '';
@@ -63,7 +113,7 @@
63
  updateModal : function ($app) {
64
  this.$('#learn-press-courses-result').css('height', '').css('overflow', '');
65
  },
66
- showFormItems : function ( type ) {
67
  var $form = LP.ModalSearchItems({
68
  template : 'tmpl-learn-press-search-items',
69
  type : 'lp_course',
@@ -78,22 +128,22 @@
78
 
79
  },
80
  _addItem : function (e) {
81
- this.showFormItems('lp_course','add-lp_course')
82
  // var $form = $('#learn-press-modal-add-order-courses');
83
  // if ($form.length == 0) {
84
  // $form = $(wp.template('learn-press-modal-add-order-courses')());
85
  // }
86
  // LP.MessageBox.show($form);
87
  },
88
- addItem2 : function (e, $view, $items) {
89
- var that = this;
90
- var selected = $items; //$form.find('li:visible input:checked'),
91
  if (e.ctrlKey) {
92
  //return true;
93
  }
94
  var ids = [];
95
  selected.each(function () {
96
- ids.push( $(this).data('id') );
97
  });
98
 
99
  $.ajax({
@@ -116,17 +166,17 @@
116
  $order_table.find('.order-subtotal').html(response.order_data.subtotal_html);
117
  $order_table.find('.order-total').html(response.order_data.total_html);
118
 
119
- selected.each(function () {
120
- console.log($(this));
121
- $(this).remove();
122
- });
123
  $no_item.addClass('hide-if-js');
124
  }
125
  }
126
  });
127
 
128
  return false;
129
- // restart sortable
130
  // _makeListSortable();
131
  },
132
  addItem : function (e, ids) {
14
  _.bindAll(this, 'resetModal', 'updateModal', '_updateDescription');
15
  LP.Hook.addAction('learn_press_message_box_before_resize', this.resetModal);
16
  LP.Hook.addAction('learn_press_message_box_resize', this.updateModal);
17
+
18
+ var $selectUsers = this.$('#order-customer');
19
+ if ($selectUsers.attr('multiple') == 'multiple') {
20
+ $selectUsers.select2({
21
+ width: $('#minor-publishing .misc-pub-section').innerWidth() - 20
22
+ });
23
+ }
24
+ var $add_new_h2 = $('body.post-type-lp_order').find('.page-title-action, .add-new-h2'),
25
+ $add_h2 = $('<a href="post-new.php?post_type=lp_order&multi-users=yes" class="page-title-action add-new-h2">Add order multiple users</a>');
26
+ $add_h2
27
+ .insertAfter($add_new_h2);
28
+
29
+ $('.wp-list-table #order_status').css('width', '135px');
30
+
31
+ $('select[name="order-status"]').on('change', function () {
32
+ var $sel = $(this),
33
+ $sec = $('.order-action-section'),
34
+ status = $sel.data('status'),
35
+ order_id = +$sel.closest('tr.type-lp_order').find('td.column-title strong a.row-title').text().replace('#', '');
36
+
37
+ // console.log(order_id);
38
+ // console.log($sel.val());
39
+
40
+ $.ajax({
41
+ url : LP_Settings.ajax,
42
+ data : {
43
+ action : 'learnpress_update_order_status',
44
+ order_id: order_id,
45
+ value: $sel.val(),
46
+ },
47
+ dataType: 'text',
48
+ type : 'post',
49
+ success : function (response) {
50
+ LP.log(response);
51
+ response = LP.parseJSON(response);
52
+ if (response.result === 'success') {
53
+ var $order_table = that.$('.order-items'),
54
+ $no_item = $order_table.find('.no-order-items');
55
+ $(response.item_html).insertBefore($no_item);
56
+ $order_table.find('.order-subtotal').html(response.order_data.subtotal_html);
57
+ $order_table.find('.order-total').html(response.order_data.total_html);
58
+
59
+ $item.remove();
60
+ $no_item.addClass('hide-if-js');
61
+ }
62
+ }
63
+ });
64
+
65
+ $sec.toggleClass('hide-if-js', status != $sel.val());
66
+ }).trigger('init');
67
+
68
+
69
  $(document).on('learn_press_modal_search_items_response', this.addItem2);
70
  this.userSuggest();
71
  },
72
  _updateDescription: function (e) {
73
  var $sel = $(e.target),
74
  $option = $sel.find('option:selected');
75
+ $sel.siblings('.description').hide().html($option.attr('data-desc'))
76
+ .removeClass(function (c, d) {
77
+ var m = d.match(/(lp-.*)\s?/);
78
+ return m ? m[0] : '';
79
+ }).addClass($option.val()).show();
 
 
80
  },
81
  userSuggest : function () {
82
  var id = ( typeof current_site_id !== 'undefined' ) ? '&site_id=' + current_site_id : '';
113
  updateModal : function ($app) {
114
  this.$('#learn-press-courses-result').css('height', '').css('overflow', '');
115
  },
116
+ showFormItems : function (type) {
117
  var $form = LP.ModalSearchItems({
118
  template : 'tmpl-learn-press-search-items',
119
  type : 'lp_course',
128
 
129
  },
130
  _addItem : function (e) {
131
+ this.showFormItems('lp_course', 'add-lp_course')
132
  // var $form = $('#learn-press-modal-add-order-courses');
133
  // if ($form.length == 0) {
134
  // $form = $(wp.template('learn-press-modal-add-order-courses')());
135
  // }
136
  // LP.MessageBox.show($form);
137
  },
138
+ addItem2 : function (e, $view, $items) {
139
+ var that = this;
140
+ var selected = $items; //$form.find('li:visible input:checked'),
141
  if (e.ctrlKey) {
142
  //return true;
143
  }
144
  var ids = [];
145
  selected.each(function () {
146
+ ids.push($(this).data('id'));
147
  });
148
 
149
  $.ajax({
166
  $order_table.find('.order-subtotal').html(response.order_data.subtotal_html);
167
  $order_table.find('.order-total').html(response.order_data.total_html);
168
 
169
+ selected.each(function () {
170
+ console.log($(this));
171
+ $(this).remove();
172
+ });
173
  $no_item.addClass('hide-if-js');
174
  }
175
  }
176
  });
177
 
178
  return false;
179
+ // restart sortable
180
  // _makeListSortable();
181
  },
182
  addItem : function (e, ids) {
assets/js/admin/meta-box-quiz.js CHANGED
@@ -283,6 +283,18 @@
283
  }
284
  $el.find('span').html(t);
285
  }).filter(':checked').trigger('change');
 
 
 
 
 
 
 
 
 
 
 
 
286
  });
287
 
288
  return;
@@ -315,4 +327,4 @@
315
 
316
  $doc.ready(_ready);
317
 
318
- })(jQuery)
283
  }
284
  $el.find('span').html(t);
285
  }).filter(':checked').trigger('change');
286
+
287
+ $('input[name="_lp_show_hide_question"]').change(function () {
288
+ var t = $('input[name="_lp_show_hide_question"]:checked').val(),
289
+ $el = $('label[for="_lp_show_result"]'),
290
+ passing_grade = $('input[name="_lp_show_result"]');
291
+ if( t === 'show' ){
292
+ $el.closest('.rwmb-field').show();
293
+ } else {
294
+ $el.closest('.rwmb-field').hide();
295
+ }
296
+ $el.find('span').html(t);
297
+ }).filter(':checked').trigger('change');
298
  });
299
 
300
  return;
327
 
328
  $doc.ready(_ready);
329
 
330
+ })(jQuery)
assets/js/admin/modal-search-items.js CHANGED
@@ -95,15 +95,26 @@
95
  term : '',
96
  exclude: ''
97
  }, args || {});
 
 
 
 
 
 
 
 
 
 
98
  $.ajax({
99
  url : LP_Settings.ajax,
100
  data : {
101
- action : 'learnpress_modal_search_items',
102
- type : this.options.type,
103
- term : args.term,
104
- exclude : args.exclude,
105
- context : this.options.context,
106
- context_id: this.options.context_id
 
107
  },
108
  type : 'get',
109
  dataType: 'text',
95
  term : '',
96
  exclude: ''
97
  }, args || {});
98
+
99
+ var current_items = [],
100
+ items = $('.order-items tr[data-item_id]');
101
+
102
+ items.each(function () {
103
+ current_items.push($(this).data('item_id'));
104
+ });
105
+
106
+ console.log(current_items);
107
+
108
  $.ajax({
109
  url : LP_Settings.ajax,
110
  data : {
111
+ action : 'learnpress_modal_search_items',
112
+ type : this.options.type,
113
+ term : args.term,
114
+ exclude : args.exclude,
115
+ context : this.options.context,
116
+ context_id : this.options.context_id,
117
+ current_items : current_items,
118
  },
119
  type : 'get',
120
  dataType: 'text',
assets/js/admin/settings.js CHANGED
@@ -168,12 +168,23 @@
168
  } else if (e.keyCode == 27 && e.type == 'keydown') {
169
  $(this).siblings('a').trigger('click')
170
  }
171
- }).on('change update', '#learn_press_required_review', function(e){
172
  var $depend = $('input[name="learn_press_enable_edit_published"]').closest('tr');
173
  $depend.toggleClass('hide-if-js', !e.target.checked).find('input[type="checkbox"]').prop('disabled', !e.target.checked)
 
 
 
 
 
 
 
 
 
 
 
174
  });
175
 
176
- $('#learn_press_required_review').trigger('update');
177
  $('#learn-press-admin-settings').on('click', '.nav-tab, .subsubsub > li > a', function (e) {
178
  e.preventDefault();
179
  var redirect = $(this).attr('href'),
@@ -195,13 +206,28 @@
195
  window.location.href = redirect;
196
  }
197
  });
198
-
199
  if ($('#learn-press-admin-settings .subsubsub').length) {
200
  $('#learn-press-admin-settings').removeClass('no-subtabs');
201
  }
202
  $('.learn-press-settings-wrap').addClass('ready')
 
 
 
 
 
 
203
  // hold current settings to know if user changed anything
204
  oldData = $('#mainform').serialize();
 
 
 
 
 
 
 
 
 
 
205
  }
206
 
207
  $doc.ready(_ready);
168
  } else if (e.keyCode == 27 && e.type == 'keydown') {
169
  $(this).siblings('a').trigger('click')
170
  }
171
+ }).on('change update', '#learn_press_required_review', function (e) {
172
  var $depend = $('input[name="learn_press_enable_edit_published"]').closest('tr');
173
  $depend.toggleClass('hide-if-js', !e.target.checked).find('input[type="checkbox"]').prop('disabled', !e.target.checked)
174
+ }).on('change update', '#learn_press_auto_redirect_next_lesson', function (e) {
175
+ var $depend = $('#learn_press_auto_redirect_message, #learn_press_auto_redirect_time').closest('tr');
176
+ $depend.toggleClass('hide-if-js', !e.target.checked);
177
+ }).on('change', '.learn-press-single-course-permalink input[type="radio"]', function () {
178
+ var $check = $(this),
179
+ $row = $check.closest('.learn-press-single-course-permalink');
180
+ if ($row.hasClass('custom-base')) {
181
+ $row.find('input[type="text"]').prop('readonly', false);
182
+ } else {
183
+ $row.siblings('.custom-base').find('input[type="text"]').prop('readonly', true);
184
+ }
185
  });
186
 
187
+ $('#learn_press_required_review, #learn_press_auto_redirect_next_lesson').trigger('update');
188
  $('#learn-press-admin-settings').on('click', '.nav-tab, .subsubsub > li > a', function (e) {
189
  e.preventDefault();
190
  var redirect = $(this).attr('href'),
206
  window.location.href = redirect;
207
  }
208
  });
 
209
  if ($('#learn-press-admin-settings .subsubsub').length) {
210
  $('#learn-press-admin-settings').removeClass('no-subtabs');
211
  }
212
  $('.learn-press-settings-wrap').addClass('ready')
213
+ .on('click', '#learn-press-reset-settings', function () {
214
+ if (!confirm($(this).data('text'))) {
215
+ return false;
216
+ }
217
+ });
218
+
219
  // hold current settings to know if user changed anything
220
  oldData = $('#mainform').serialize();
221
+
222
+ (function () {
223
+ $('.learn-press-dropdown-pages').each(function () {
224
+ var $sel = $(this);
225
+ $sel.css('width', $sel.width() + 50).find('option').each(function () {
226
+ $(this).html($(this).html().replace(/&nbsp;&nbsp;&nbsp;/g, ''));
227
+ });
228
+ $sel.select2();
229
+ });
230
+ })();
231
  }
232
 
233
  $doc.ready(_ready);
assets/js/frontend/add-to-cart.js CHANGED
@@ -1,29 +1,30 @@
1
  ;(function ($) {
2
- "use strict";
3
- function _ready() {
4
- $('form.purchase-course').submit(function () {
5
- var $button = $('button.purchase-button', this),
6
- $view_cart = $('.view-cart-button', this);
7
- $button.removeClass('added').addClass('loading');
8
- $.ajax({
9
- url : $('input[name="_wp_http_referer"]', this).val() + '?lp-ajax=add-to-cart',
10
- data : $(this).serialize(),
11
- error : function () {
12
- $button.removeClass('loading');
13
- },
14
- dataType: 'html',
15
- success : function (response) {
16
- response = LP.parseJSON(response);
17
- $button.addClass('added').removeClass('loading');
18
- $view_cart.removeClass('hide-if-js');
19
- if (typeof response.redirect === 'string') {
20
- window.location.href = response.redirect;
21
- }
22
- }
23
- });
24
- return false;
25
- });
26
- }
 
27
 
28
- $(document).ready(_ready);
29
  })(jQuery);
1
  ;(function ($) {
2
+ "use strict";
3
+ function _ready() {
4
+ $('form.purchase-course').submit(function () {
5
+ alert();
6
+ var $button = $('button.purchase-button', this),
7
+ $view_cart = $('.view-cart-button', this);
8
+ $button.removeClass('added').addClass('loading');
9
+ $.ajax({
10
+ url: $('input[name="_wp_http_referer"]', this).val() + '?lp-ajax=add-to-cart',
11
+ data: $(this).serialize(),
12
+ error: function () {
13
+ $button.removeClass('loading');
14
+ },
15
+ dataType: 'html',
16
+ success: function (response) {
17
+ response = LP.parseJSON(response);
18
+ $button.addClass('added').removeClass('loading');
19
+ $view_cart.removeClass('hide-if-js');
20
+ if (typeof response.redirect === 'string') {
21
+ window.location.href = response.redirect;
22
+ }
23
+ }
24
+ });
25
+ return false;
26
+ });
27
+ }
28
 
29
+ $(document).ready(_ready);
30
  })(jQuery);
assets/js/frontend/bak.course-lesson.js DELETED
@@ -1,223 +0,0 @@
1
- ;(function ($) {
2
- "use strict";
3
- return;
4
- $.LP_Course_Item = function () {
5
-
6
- }
7
- $.LP_Course_Item.Model = Backbone.Model.extend({
8
- url : function () {
9
- return this.rootUrl
10
- },
11
- rootUrl : '',
12
- initialize: function (data) {
13
- this.rootUrl = data.rootUrl;
14
- },
15
- load : function (callback) {
16
- var that = this,
17
- _completed = function (response, success) {
18
- var $html = $(response || ''),
19
- $lesson = $html.find('#learn-press-course-lesson');
20
- if ($lesson.length == 0) {
21
- $lesson = $('<div id="learn-press-course-lesson" />');
22
- }
23
- if (LP.Hook.applyFilters('learn_press_update_item_content', $lesson, that) !== false) {
24
- that.set('content', $lesson);
25
- $(document).trigger('learn_press_course_item_content_replaced', $lesson, that);
26
- $('.course-item.item-current')
27
- .removeClass('item-current');
28
- $('.course-item.course-item-' + that.get('id'))
29
- .addClass('item-current');
30
- }
31
- $.isFunction(callback) && callback.call(that, response);
32
- };
33
- $.ajax({
34
- url : this.url(),
35
- dataType: 'html',
36
- success : function (response) {
37
- _completed(response, true);
38
- },
39
- error : function () {
40
- _completed('', false)
41
- }
42
- });
43
- },
44
- complete : function (args) {
45
- var that = this;
46
- args = $.extend({
47
- data : null,
48
- success: null
49
- }, args || {});
50
- LP.ajax({
51
- dataType: 'html',
52
- action : 'complete_lesson',
53
- data : $.extend({
54
- id: this.get('id')
55
- }, args.data || {}),
56
- success : function (response) {
57
- response = LP.parseJSON(response);
58
- $.isFunction(args.success) && args.success.call(that, $.extend(response, {id: that.get('id')}))
59
- }
60
- });
61
- return;
62
- $.ajax({
63
- url : '',
64
- dataType: 'html',
65
- data : $.extend({
66
- action: 'learnpress_complete_lesson',
67
- id : this.get('id')
68
- }, args.data || {}),
69
- success : function (response) {
70
- response = LP.parseJSON(response);
71
- $.isFunction(args.success) && args.success.call(that, $.extend(response, {id: that.get('id')}))
72
- }
73
- })
74
- }
75
- });
76
-
77
- $.LP_Course_Item.View = Backbone.View.extend({
78
- el : '#learn-press-course-lesson',
79
- events : {
80
- 'click .complete-lesson-button': '_completeLesson'
81
- },
82
- initialize : function () {
83
- _.bindAll(this, 'updateItem', '_completeLesson');
84
- this.model.on('change', this.updateItem, this);
85
-
86
- if (LP.Hook.applyFilters('learn_press_before_load_item', this) !== false) {
87
- if (this.model.get('id') /*&& this.$('input[name="learn-press-lesson-viewing"]').val() != this.model.get('id')*/) {
88
- if (this.model.get('content') == 'no-cache') {
89
- this.updateItem();
90
- } else {
91
- this.model.load();
92
- }
93
- } else if (this.model.get('content')) {
94
- LP.Hook.doAction('learn_press_item_content_loaded', this.model.get('content'), this);
95
- }
96
- }
97
- },
98
- updateItem : function () {
99
- var $content = this.model.get('content');
100
- this.$el.replaceWith($content);
101
- this.setElement($content.show());
102
- var url = LP.Hook.applyFilters('learn_press_set_item_url', this.model.get('rootUrl'), this);
103
- if (url) {
104
- LP.setUrl(url);
105
- }
106
- $content.closest('#learn-press-content-item').show();
107
- LP.Hook.doAction('learn_press_item_content_loaded', $content, this);
108
- },
109
- _autoNextItem : function (item, delay) {
110
- var $link = this.$('.course-item-next a[data-id="' + item + '"]');
111
- if (!$link.length) {
112
- return;
113
- }
114
- var duration = 3,
115
- $span = $('<span>Auto next in ' + duration + 's</span>').insertAfter(this.$('.complete-lesson-button'));
116
- setInterval(function () {
117
- duration--;
118
- $span.html('Auto next in ' + duration + 's');
119
- if (duration == 0) {
120
- $link.trigger('click')
121
- }
122
- }, 1000);
123
- },
124
- _completeLesson: function (e) {
125
- var that = this;
126
- this.model.complete({
127
- data : $(e.target).data(),
128
- success: function (response) {
129
- response = LP.Hook.applyFilters('learn_press_user_complete_lesson_response', response);
130
- if (response.next_item) {
131
- //that._autoNextItem(response.next_item, 3);
132
- }
133
- LP.Hook.doAction('learn_press_user_completed_lesson', response, that);
134
- }
135
- });
136
- }
137
- });
138
- $.LP_Course_Item.Collection = Backbone.Collection.extend({
139
- model : $.LP_Course_Item.Model,
140
- current : 0,
141
- lastLoaded: null,
142
-
143
- initialize: function () {
144
- var that = this;
145
- _.bindAll(this, 'initItems', 'loadItem');
146
- this.initItems();
147
- },
148
- initItems : function () {
149
- var that = this;
150
- $('.section-content .course-item').each(function () {
151
- var $li = $(this),
152
- $link = $li.find('a'),
153
- id = parseInt($link.attr('data-id')),
154
- args = {
155
- id : id,
156
- nonce : {
157
- complete: $link.attr('data-complete-nonce')
158
- },
159
- rootUrl: $link.attr('href'),
160
- type : $li.data('type')
161
- };
162
- if ($li.hasClass('item-current')) {
163
- that.current = id;
164
- //args.content = $('#learn-press-course-lesson')
165
- }
166
- var model = new $.LP_Course_Item.Model(args);
167
- that.add(model);
168
- });
169
-
170
- },
171
- loadItem : function (item, link) {
172
-
173
- if ($.isNumeric(item)) {
174
- item = this.findWhere({id: item});
175
- } else if ($.type(item) == 'string') {
176
- item = this.findWhere({rootUrl: item});
177
- } else {
178
-
179
- }
180
- if (LP.Hook.applyFilters('learn_press_load_item_content', true, item, link) !== false) {
181
- if (item) {
182
- if (this.view) {
183
- this.view.undelegateEvents();
184
- //this.view.model.set('content', this.view.$el);
185
- $('.course-item.item-current')
186
- .removeClass('item-current');
187
- $('.course-item.course-item-' + item.get('id'))
188
- .addClass('item-current');
189
- }
190
- if (link) {
191
- item.set('rootUrl', link);
192
- item.rootUrl = link;
193
- }
194
- this.view = new $.LP_Course_Item.View({model: item});
195
- }
196
- }
197
- }
198
- });
199
-
200
- $.LP_Course_Item_List_View = Backbone.View.extend({
201
- model : $.LP_Course_Item.Collection,
202
- el : 'body',
203
- events : {
204
- 'click .section-content .course-item a': '_loadItem',
205
- 'click .course-item-nav a' : '_loadItem'
206
- },
207
- initialize: function (args) {
208
- _.bindAll(this, '_loadItem');
209
- },
210
- _loadItem : function (e) {
211
- e.preventDefault();
212
- var $item = $(e.target).closest('a'),
213
- id = parseInt($item.attr('data-id')),
214
- link = $item.attr('href');
215
- var item = id ? id : link;
216
- if (this.lastLoaded == item) {
217
- return;
218
- }
219
- this.model.loadItem(item, link);
220
- }
221
- });
222
-
223
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/frontend/bak.course-quiz.js DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * Quiz functions
3
- *
4
- * @author ThimPress
5
- * @version 1.1
6
- */
7
- if (typeof LP == 'undefined') {
8
- window.LP = {};
9
- }
10
- ;(function ($, bb, _) {
11
- var Quiz = function (args) {
12
- this.model = new Quiz.Model(args);
13
- this.view = new Quiz.View({
14
- model: this.model
15
- });
16
- }, Questions = bb.Collection.extend({
17
- initialize: function () {
18
- console.log(this.length)
19
- }
20
- });
21
- Quiz.View = bb.View.extend({
22
- initialize: function () {
23
- LP.log('Quiz.View.initialize');
24
- }
25
- });
26
- Quiz.Model = bb.Model.extend({
27
- questions : null,
28
- initialize: function () {
29
- this.questions = new Questions();
30
- this.questions.add(_.values(this.get('questions')));
31
- }
32
- });
33
- $.extend(LP, {
34
- Quiz : Quiz,
35
- $quiz : null,
36
- _initQuiz: function (args) {
37
- if (!this.$quiz || this.$quiz.model.get('id') != args.id) {
38
- delete this.$quiz;
39
- this.$quiz = new Quiz(args);
40
- }
41
- return this.$quiz;
42
- }
43
- });
44
- })(jQuery, Backbone, _);
45
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/frontend/bak.single-course.v2.js DELETED
@@ -1,245 +0,0 @@
1
- /**
2
- * Single course JS
3
- *
4
- * @requires jQuery, Backbone
5
- */
6
- ;(function ($) {
7
-
8
- window.LP_V2 = true;
9
- if (typeof jQuery == 'undefined' || typeof Backbone == 'undefined') {
10
- console.log('Error');
11
- return;
12
- }
13
-
14
- if (typeof LP == 'undefined') {
15
- window.LP = {};
16
- }
17
-
18
- $.extend(LP, {
19
- Views: {},
20
- Model: {}
21
- });
22
-
23
- var CourseModel,
24
- CourseView,
25
- CourseItem,
26
- CourseItems;
27
-
28
- CourseItem = LP.CourseItem = Backbone.Model.extend({
29
- $doc : false,
30
- initialize : function () {
31
- this.$doc = $(document);
32
- this.on('change', this.onChange);
33
- _.bindAll(this, 'itemLoaded');
34
- },
35
- onChange : function (a, b) {
36
- var that = this,
37
- data = {
38
- item: this
39
- };
40
- if (a.changed['current'] !== undefined) {
41
- $.extend(data, {
42
- key : 'current',
43
- value: a.changed['current']
44
- });
45
- this.get('el').find('.lp-label-viewing').toggle(a.changed['current']);
46
- if (this.onChangeCurrent(data) !== false && a.changed['current']) {
47
- if (that.get('content')) {
48
- that.itemLoaded.apply(that, [that.get('content')])
49
- } else {
50
- if (that.get('type') == 'lp_lesson') {
51
- $.ajax({
52
- url : that.get('url'),
53
- dataType: 'html',
54
- success : that.itemLoaded
55
- });
56
- } else {
57
- that.itemLoaded()
58
- }
59
- }
60
- }
61
- }
62
- },
63
- onChangeCurrent: function (data) {
64
- return this.$doc.triggerHandler('learn_press_item_current_changed', data)
65
- },
66
- isCurrent : function () {
67
- return this.get('current') == true;
68
- },
69
- itemLoaded : function (response) {
70
- var $html = $(response);
71
- this.set('content', response);
72
- switch (this.get('type')) {
73
- case 'lp_lesson':
74
- var $content = $html.find('#learn-press-content-item').html();
75
- $('#learn-press-content-item').html($content).show();
76
- break;
77
- case 'lp_quiz':
78
- var data = this.$doc.triggerHandler('learn_press_item_redirect_url', {
79
- url : this.get('url'),
80
- item: this
81
- });
82
- if (data !== false) {
83
- if (data == undefined || data.redirect == undefined) {
84
- data.redirect = this.get('url');
85
- }
86
- LP.reload(data.redirect);
87
- }
88
- break;
89
- default:
90
- this._trigger('learn_press_item_' + this.get('type') + '_loaded', {html: $html, item: this});
91
- }
92
- try {
93
- window.wp.mediaelement.initialize();
94
- } catch (e) {
95
- }
96
- this.$doc.triggerHandler('learn_press_item_loaded', {html: $html, item: this});
97
- },
98
- _trigger : function () {
99
- var args = [];
100
- for (var i = 0, n = arguments.length; i < n; i++) {
101
- args.push(arguments[i]);
102
- }
103
- return this.$doc.triggerHandler.apply(this.$doc[0], args);
104
- }
105
- });
106
-
107
- CourseItems = LP.CourseItems = Backbone.Collection.extend({
108
- getCurrent: function () {
109
- var item = this.findWhere({current: true});
110
- return item;
111
- },
112
- setCurrent: function (item) {
113
- if (!item instanceof CourseItem) {
114
- item = this.findWhere({id: item});
115
- }
116
- this.map(function (item) {
117
- if (item.get('current')) {
118
- item.set('current', false);
119
- }
120
- });
121
- if (item) {
122
- item.set('current', true);
123
- var _r = $(document).triggerHandler('learn_press_set_course_url', {url: item.get('url')});
124
- if (_r !== false) {
125
- if (_r == undefined) {
126
- _r = item.get('url')
127
- }
128
- try {
129
- LP.setUrl(_r);
130
- } catch (e) {
131
- }
132
- }
133
- }
134
- }
135
- });
136
-
137
- CourseModel = LP.CourseModel = Backbone.Model.extend({
138
- items : new CourseItems(),
139
- initialize: function (args) {
140
- this.parseItems(args);
141
- },
142
- parseItems: function (args) {
143
- var $items = $('.course-curriculum .course-item');
144
- _.forEach(args.items, function (item, i) {
145
- item.el = $items.filter('.course-item-' + item.id);
146
- this.items.add(new CourseItem(item));
147
- }, this);
148
- }
149
- });
150
-
151
- CourseView = LP.CourseView = Backbone.View.extend({
152
- el : 'body',
153
- events : {
154
- 'click .button-load-item' : '_loadItem',
155
- 'click .course-item-nav a': '_loadItemNav',
156
- 'click .finish-course' : '_finishCourse'
157
- },
158
- initialize : function () {
159
- _.bindAll(this, '_itemChanged', '_itemLoaded');
160
- this.initEvents();
161
- this.initCurrent();
162
- },
163
- initEvents : function () {
164
- $(document)
165
- .on('learn_press_item_current_changed', this._itemChanged)
166
- .on('learn_press_item_loaded', this._itemLoaded)
167
-
168
- },
169
- initCurrent : function () {
170
- var current = this.model.items.getCurrent();
171
- if (!current) {
172
- return;
173
- }
174
- current.itemLoaded($("html").html());
175
- },
176
- _itemChanged : function (e, data) {
177
- var that = this;
178
- switch (data.key) {
179
- case 'current':
180
- if (data.value == true) {
181
- if (data.item.get('type') == 'lp_quiz') {
182
- data.callback && data.callback();
183
- return;
184
- }
185
- $('#learn-press-content-item').addClass('loading');
186
- LP.toElement('#learn-press-content-item', {
187
- delay : 0,
188
- duration: 0,
189
- callback: function () {
190
-
191
- }
192
- });
193
- }
194
- }
195
- },
196
- _itemLoaded : function (e, data) {
197
- $('.course-description-heading, .course-description').hide();
198
- $('#learn-press-content-item').removeClass('loading');
199
- return data;
200
- },
201
- _loadItem : function (e) {
202
- e.preventDefault();
203
- var $tag = $(e.target).closest('.button-load-item');
204
- if (!$tag.is('a')) {
205
- return false;
206
- }
207
- var id = parseInt($tag.data('id')),
208
- type = $tag.closest('.course-item').data('type'),
209
- $item = this.model.items.findWhere({id: id});
210
- if (!$item) {
211
- return false;
212
- }
213
- if ($item.isCurrent()) {
214
- return false;
215
- }
216
- this.model.items.setCurrent($item);
217
- },
218
- _loadItemNav : function (e) {
219
- e.preventDefault();
220
-
221
- var id = $(e.target).attr('data-id'),
222
- $item = this.$('.section-content a.button-load-item[data-id="' + id + '"]');
223
- $item.trigger('click');
224
- },
225
- _finishCourse: function (e) {
226
-
227
- },
228
- loadItem : function (item) {
229
- },
230
- extend : function (obj) {
231
- for (var i in obj) {
232
- this[i] = obj[i];
233
- }
234
- return this;
235
- }
236
- });
237
-
238
- $(document).ready(function () {
239
- if (typeof SingleCourse_Params != 'undefined') {
240
- LP.Views.Course = new CourseView({
241
- model: new CourseModel(SingleCourse_Params)
242
- });
243
- }
244
- })
245
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/frontend/bak.single-quiz.js DELETED
@@ -1,731 +0,0 @@
1
- if (typeof LP == 'undefined') var LP = {};
2
- (function ($) {
3
- "use strict";
4
- return;
5
- var LP_Model_Quiz = window.LP_Model_Quiz = Backbone.Model.extend({
6
- defaults : {
7
- //question_id: 0
8
- },
9
- data : null,
10
- view : false,
11
- url : function () {
12
- },
13
- urlRoot : '',
14
- questions : null,
15
- initialize : function () {
16
-
17
- this.createQuestionsList();
18
-
19
- },
20
- createQuestionsList: function () {
21
- this.questions = new LP_Collection_Questions();
22
- _.each(this.get('questions'), function (args, i) {
23
- var $model = new LP_Model_Question($.extend({
24
- quiz_id: this.get('id'),
25
- user_id: this.get('user_id'),
26
- }, args));
27
- $model.urlRoot = this.get('ajaxurl');
28
- $model.view = this.view;
29
- this.questions.add($model);
30
- }, this);
31
- },
32
- next : function (callback) {
33
- if (!this.isLast()) {
34
- var next_id = this.findNext(),
35
- question = this.questions.findWhere({id: next_id}),
36
- that = this;
37
- question.submit({
38
- data : {
39
- save_id : that.get('question_id'),
40
- question_answer: this.view.$('form').serializeJSON(),
41
- time_remaining : that.get('time_remaining')
42
- },
43
- complete: function () {
44
- that.set('question_id', next_id);
45
- $.isFunction(callback) && callback.apply(that);
46
- LP.Hook.doAction('learn_press_next_question', next_id, that);
47
- }
48
- });
49
- }
50
- },
51
- prev : function (callback) {
52
- if (!this.isFirst()) {
53
- var prev_id = this.findPrev(),
54
- question = this.questions.findWhere({id: prev_id}),
55
- that = this;
56
- //if (!question.get('content')) {
57
- question.submit({
58
- data : {
59
- save_id : that.get('question_id'),
60
- question_answer: this.view.$('form').serializeJSON(),
61
- time_remaining : that.get('time_remaining')
62
- },
63
- complete: function () {
64
- that.set('question_id', prev_id);
65
- $.isFunction(callback) && callback.apply(that);
66
- LP.Hook.doAction('learn_press_previous_question', prev_id, that);
67
- }
68
- });
69
-
70
- }
71
- },
72
- select : function (id, callback) {
73
- var question = this.questions.findWhere({id: id}),
74
- that = this;
75
- question && question.submit({
76
- data : {
77
- save_id : that.get('question_id'),
78
- question_answer: this.view.$('form').serializeJSON(), //$('input, select, textarea', this.view.$('form')).toJSON(),
79
- time_remaining : that.get('time_remaining')
80
- },
81
- complete: function (response) {
82
- that.set('question_id', id);
83
- $.isFunction(callback) && callback.apply(that, [response])
84
- }
85
- });
86
- },
87
- getQuestionPosition: function (question_id) {
88
- question_id = question_id || this.get('question_id');
89
- return _.indexOf(this.getIds(), question_id);
90
- },
91
- countQuestions : function () {
92
- return this.questions.length;
93
- },
94
- isLast : function (question_id) {
95
- question_id = question_id || this.get('question_id');
96
- return this.getQuestionPosition(question_id) == (this.countQuestions() - 1);
97
- },
98
- isFirst : function (question_id) {
99
- question_id = question_id || this.get('question_id');
100
- return this.getQuestionPosition(question_id) == 0;
101
- },
102
- findNext : function (question_id) {
103
- question_id = question_id || this.get('question_id');
104
- var ids = this.getIds(),
105
- pos = this.getQuestionPosition(question_id);
106
- pos++;
107
- if (typeof ids[pos] == 'undefined') return false;
108
- return ids[pos];
109
- },
110
- findPrev : function (question_id) {
111
- question_id = question_id || this.get('question_id');
112
- var ids = this.getIds(),
113
- pos = this.getQuestionPosition(question_id);
114
- pos--;
115
- if (typeof ids[pos] == 'undefined') return false;
116
- return ids[pos];
117
- },
118
- current : function () {
119
- return this.questions.findWhere({id: parseInt(this.get('question_id'))});
120
- },
121
- getIds : function () {
122
- return $.map(this.get('questions'), function (i, v) {
123
- return parseInt(i.id)
124
- });
125
- }
126
- });
127
-
128
- var LP_Model_Question = window.LP_Model_Question = Backbone.Model.extend({
129
- defaults : {
130
- //question_id: 0
131
- },
132
- data : null,
133
- view : false,
134
- url : function () {
135
- return this.urlRoot;
136
- },
137
- urlRoot : '',
138
- initialize: function () {
139
- },
140
- element : function () {
141
- return $(this.get('content'));
142
- },
143
- submit : function (args) {
144
- var that = this;
145
- args = $.extend({
146
- complete: null,
147
- data : {}
148
- }, args || {});
149
- this.fetch({
150
- data : $.extend({
151
- action : 'learnpress_load_quiz_question',
152
- user_id : this.get('user_id'),
153
- quiz_id : this.get('quiz_id'),
154
- question_id: this.get('id')
155
- }, args.data || {}),
156
- complete: (function (e) {
157
- var response = LP.parseJSON(e.responseText);
158
- if (response.result == 'success') {
159
- //if (!that.get('content')) {
160
- that.set(response.question);
161
- if (response.permalink) {
162
- LP.setUrl(response.permalink);
163
- }
164
- //}
165
- $.isFunction(args.complete) && args.complete.call(that, response);
166
- }
167
- })
168
- });
169
- },
170
- check : function (args) {
171
- var that = this;
172
- if ($.isFunction(args)) {
173
- args = {
174
- complete: args
175
- }
176
- } else {
177
- args = $.extend({
178
- complete: null,
179
- data : {}
180
- }, args || {});
181
- }
182
- LP.doAjax({
183
- data : $.extend({
184
- 'lp-ajax' : 'check-question',
185
- user_id : this.get('user_id'),
186
- quiz_id : this.get('quiz_id'),
187
- question_id : this.get('id'),
188
- save_id : this.get('id'),
189
- question_answer: $('form#learn-press-quiz-question').serializeJSON()
190
- }, args.data || {}),
191
- success: function (response, raw) {
192
- that.set('checked', response.checked);
193
- $.isFunction(args.complete) && args.complete.call(that, response)
194
- }
195
- })
196
- }
197
- });
198
-
199
- var LP_Collection_Questions = window.LP_Collection_Questions = Backbone.Collection.extend({
200
- url : 'admin-ajax.php',
201
- model: LP_Model_Question
202
- });
203
-
204
- var LP_View_Quiz = window.LP_View_Quiz = Backbone.View.extend({
205
- model : {},
206
- events : {
207
- 'click .button-start-quiz' : '_startQuiz',
208
- 'click .button-finish-quiz' : '_finishQuiz',
209
- 'click .button-retake-quiz' : '_retakeQuiz',
210
- 'click .next-question' : '_nextQuestion',
211
- 'click .prev-question' : '_prevQuestion',
212
- 'click .check-question' : '_checkQuestion',
213
- 'click .quiz-questions-list li a': '_selectQuestion',
214
- 'click .hint-question' : '_hintQuestion',
215
- 'click .explain-question' : '_explainQuestion'
216
- },
217
- el : '.single-quiz',
218
- isRendered : false,
219
- $buttons : {},
220
- initialize : function (model) {
221
- this.model = model;
222
- this.model.view = this;
223
- this.listenTo(this.model, 'change:question_id', this.changeQuestion);
224
- this.listenTo(this.model, 'change', this.render);
225
- this.listenTo(this.model, 'change', this.updateCountdown);
226
-
227
- LP.Hook
228
- .addAction('learn_press_check_question', function (response, that) {
229
- that.updateAnswer.apply(that, [response]);
230
- })
231
- .addAction('learn_press_update_question_content', function ($newQuestion, $oldQuestion, that) {
232
- var $current = that.model.current();
233
- setTimeout(function () {
234
- if ($current.get('checked')) {
235
- that.updateAnswer.apply(that, [{checked: $current.get('checked'), result: 'success'}]);
236
- }
237
- }, 100)
238
-
239
- });
240
- _.bindAll(this, 'render', '_timeOver', '_checkQuestion', '_hintQuestion', 'updateAnswer', 'updateCountdown');
241
-
242
- this._create();
243
- this.render();
244
- this.updateCountdown(true);
245
- },
246
- _create : function () {
247
- this.$buttons = {
248
- start : this.$('.button-start-quiz'),
249
- finish : this.$('.button-finish-quiz'),
250
- retake : this.$('.button-retake-quiz'),
251
- next : this.$('.next-question'),
252
- prev : this.$('.prev-question'),
253
- check : this.$('.check-question'),
254
- hint : this.$('.hint-question'),
255
- explain: this.$('.explain-question'),
256
- };
257
- if (this.model.get('status') == 'started') {
258
- this.initCountdown();
259
-
260
- var $current = this.model.current();
261
- if ($current) {
262
- $current.set({
263
- content: $('#learn-press-quiz-question .question-' + $current.get('id'))
264
- });
265
- this._updateQuestion($current.element());
266
- }
267
- }
268
- var that = this;
269
- this.setButtonsState();
270
- },
271
- changeQuestion : function () {
272
- var $current = this.model.current();
273
- if ($current) {
274
- this._updateQuestion($current.element());
275
- }
276
- },
277
- updateCountdown : function (force) {
278
- if (!this.model.hasChanged('status') && !force) {
279
- return;
280
- }
281
- if (this.model.get('status') == 'started') {
282
- if (!this.$countdown) {
283
- this.initCountdown();
284
- }
285
- this.$countdown.backward_timer('start');
286
- }
287
- },
288
- render : function () {
289
- if (!this.model.hasChanged('question_id') && !this.model.hasChanged('status')) {
290
- //return;
291
- }
292
- var $question = this.model.current();
293
-
294
- this.setButtonsState();
295
- switch (this.model.get('status')) {
296
- case 'started':
297
- this.$('.quiz-intro').remove();
298
- this.$('.quiz-countdown').removeClass('hide-if-js');
299
- }
300
- if ($question && this.model.get('status') == 'started') {
301
- this.$('form[name="learn-press-quiz-question"]').html($question.get('content'));
302
- this.$('#learn-press-quiz-questions li[data-id="' + $question.get('id') + '"]')
303
- .addClass('current')
304
- .siblings('.current').removeClass('current');
305
- }
306
-
307
- this.isRendered = true;
308
- this.$el.css('visibility', 'visible');
309
- },
310
- setButtonsState : function () {
311
- var hidden = 'hide-if-js',
312
- current = this.model.current();
313
- switch (this.model.get('status').toLowerCase()) {
314
- case 'completed':
315
- this.$buttons.start.addClass(hidden);
316
- this.$buttons.finish.addClass(hidden);
317
- this.$buttons.check.addClass(hidden);
318
- this.$buttons.retake.removeClass(hidden);
319
- break;
320
- case 'started':
321
- this.$buttons.start.addClass(hidden);
322
- this.$buttons.finish.removeClass(hidden);
323
- this.$buttons.retake.addClass(hidden);
324
-
325
- if (this.model.countQuestions() <= 1) {
326
- this.$buttons.next.addClass(hidden);
327
- this.$buttons.prev.addClass(hidden);
328
- } else {
329
- this.$buttons.next.removeClass(hidden);
330
- this.$buttons.prev.removeClass(hidden);
331
- if (this.model.isLast()) {
332
- this.$buttons.next.addClass(hidden);
333
- this.$buttons.finish.filter('[data-area="nav"]').removeClass(hidden);
334
- } else {
335
- this.$buttons.finish.filter('[data-area="nav"]').addClass(hidden);
336
- }
337
- if (this.model.isFirst()) {
338
- this.$buttons.prev.addClass(hidden);
339
- }
340
- }
341
- if (current && current.get('check_answer')) {
342
- this.$buttons.check.removeClass(hidden);
343
- } else {
344
- this.$buttons.check.addClass(hidden);
345
- }
346
- if (current && current.get('hint')) {
347
- this.$buttons.hint.removeClass(hidden);
348
- } else {
349
- this.$buttons.hint.addClass(hidden);
350
- }
351
- if (current && current.get('explanation')) {
352
- this.$buttons.explain.removeClass(hidden);
353
- } else {
354
- this.$buttons.explain.addClass(hidden);
355
- }
356
- break;
357
- default:
358
- this.$buttons.next.addClass(hidden);
359
- this.$buttons.prev.addClass(hidden);
360
- this.$buttons.start.removeClass(hidden);
361
- this.$buttons.finish.addClass(hidden);
362
- this.$buttons.retake.addClass(hidden);
363
- this.$('.quiz-questions .qq.current').removeClass('current');
364
- }
365
-
366
- },
367
- startQuiz : function (args) {
368
- this.block_page();
369
- args = $.extend({
370
- complete: false
371
- }, args || {});
372
-
373
- var that = this,
374
- data = $.extend({
375
- 'lp-ajax': 'start-quiz',
376
- quiz_id : this.model.get('id'),
377
- nonce : this.model.get('nonce')
378
- }, args.data || {});
379
- LP.doAjax({
380
- url : window.location.href,
381
- data : data,
382
- success: function (response, raw) {
383
- LP.MessageBox.hide();
384
- var response = LP.Hook.applyFilters('learn_press_start_quiz_results', response, that);
385
- if (response.result == 'success') {
386
- that.model.current().set(response.question);
387
- that.model.set({status: response.data.status, question_id: response.question.id});
388
- LP.setUrl(response.question.permalink);
389
- }
390
- $.isFunction(args.complete) && args.complete.call(that, response)
391
- }
392
- });
393
- },
394
- finishQuiz : function (args) {
395
- this.pause();
396
- this.block_page();
397
- args = $.extend({
398
- complete: false
399
- }, args || {});
400
-
401
- var that = this,
402
- data = $.extend({
403
- 'lp-ajax': 'finish-quiz',
404
- quiz_id : this.model.get('id'),
405
- nonce : this.model.get('nonce')
406
- }, args.data || {});
407
- LP.doAjax({
408
- data : data,
409
- success: function (response) {
410
- var callbackReturn = undefined;
411
- $.isFunction(args.complete) && ( callbackReturn = args.complete.call(LP.Quiz, response) );
412
- LP.Hook.doAction('learn_press_finish_quiz', that.model.get('id'), that);
413
- LP.MessageBox.show(single_quiz_localize.finished_quiz, {
414
- autohide: 2000,
415
- onHide : function () {
416
- if (callbackReturn && callbackReturn.redirect) {
417
- LP.reload(callbackReturn.redirect);
418
- } else if (callbackReturn == undefined && response.redirect) {
419
- LP.reload(response.redirect);
420
- }
421
- }
422
- });
423
- }
424
- });
425
- },
426
- retakeQuiz : function (args) {
427
- this.block_page();
428
- args = $.extend({
429
- complete: false
430
- }, args || {});
431
-
432
- var that = this,
433
- data = $.extend({
434
- 'lp-ajax': 'retake-quiz',
435
- quiz_id : this.model.get('id'),
436
- nonce : this.model.get('nonce')
437
- }, args.data || {});
438
- LP.doAjax({
439
- data : data,
440
- success: function (response, raw) {
441
- LP.MessageBox.hide();
442
- if (response.result == 'success') {
443
- $.isFunction(args.complete) && args.complete.call(LP.Quiz, response);
444
- LP.MessageBox.show(single_quiz_localize.retaken_quiz, {
445
- autohide: 2000,
446
- onHide : function () {
447
- LP.reload(response.redirect);
448
- }
449
- });
450
- } else {
451
- LP.alert(response.message);
452
- }
453
- }
454
- });
455
- },
456
- updateAnswer : function (response) {
457
- if (!response || response.result != 'success') {
458
- return;
459
- }
460
- var $current = this.model.current(),
461
- $content = $($current.get('content'));
462
- switch ($current.get('type')) {
463
- case 'true_or_false':
464
- case 'single_choice':
465
- case 'multi_choice':
466
- $.each(response.checked, function (k, v) {
467
- var $input = $content.find('input[value="' + v.value + '"]'),
468
- $li = $input.closest('li').removeClass('answer-true user-answer-false');
469
- if (v.is_true == 'yes') {
470
- $li.addClass('answer-true')
471
- }
472
- if (response.answered) {
473
- if (typeof response.answered == 'string') {
474
- if (response.answered == v.value) {
475
- $input.prop('checked', true);
476
- }
477
- } else if ($.inArray(v.value, response.answered) != -1) {
478
- $input.prop('checked', true);
479
- }
480
- }
481
- if ($input.is(':checked') && v.is_true == 'yes') {
482
- } else {
483
- $li.addClass('user-answer-false');
484
- }
485
-
486
- });
487
- $content.addClass('checked').find('input, select, textarea').prop('disabled', true);
488
- $current.set({
489
- content: $content
490
- });
491
- }
492
- //LP.Hook.doAction('learn_press_check_question', response, $current);
493
- this.render();
494
- },
495
- _checkQuestion : function () {
496
- if (LP.Hook.applyFilters('learn_press_before_check_question', true, this) !== false) {
497
- var that = this;
498
- this.$buttons.next.prop('disabled', true);
499
- this.$buttons.prev.prop('disabled', true);
500
- this.$buttons.finish.prop('disabled', true);
501
- this.$buttons.check.prop('disabled', true);
502
- this.pause();
503
- this.block_page();
504
- this.model.current().check({
505
- complete: function (response) {
506
- that.$buttons.next.prop('disabled', false);
507
- that.$buttons.prev.prop('disabled', false);
508
- that.$buttons.finish.prop('disabled', false);
509
- that.$buttons.check.prop('disabled', false);
510
- LP.Hook.doAction('learn_press_check_question', response, that);
511
- that.resume();
512
- },
513
- data : {nonce: this.model.get('nonce')}
514
- });
515
- }
516
- },
517
- _hintQuestion : function (e) {
518
- e.preventDefault();
519
- var current = this.model.current();
520
- if (current && current.get('hint')) {
521
- $('#learn-press-question-hint-' + current.get('id')).toggleClass('hide-if-js')
522
- }
523
-
524
- },
525
- _explainQuestion: function (e) {
526
- e.preventDefault();
527
- var current = this.model.current();
528
- if (current && current.get('explanation')) {
529
- $('#learn-press-question-explanation-' + current.get('id')).toggleClass('hide-if-js')
530
- }
531
-
532
- },
533
- _nextQuestion : function () {
534
- if (LP.Hook.applyFilters('learn_press_before_next_question', true, this) !== false) {
535
- var that = this;
536
- this.$buttons.next.prop('disabled', true);
537
- this.$buttons.prev.prop('disabled', true);
538
- this.$buttons.finish.prop('disabled', true);
539
- this.pause();
540
- this.block_page();
541
- this.model.next(function () {
542
- that.$buttons.next.prop('disabled', false);
543
- that.$buttons.prev.prop('disabled', false);
544
- that.$buttons.finish.prop('disabled', false);
545
- });
546
- }
547
- },
548
- _prevQuestion : function () {
549
- if (LP.Hook.applyFilters('learn_press_before_prev_question', true, this) !== false) {
550
- var that = this;
551
- this.$buttons.next.prop('disabled', true);
552
- this.$buttons.prev.prop('disabled', true);
553
- this.$buttons.finish.prop('disabled', true);
554
- this.pause();
555
- this.block_page();
556
- this.model.prev(function () {
557
- that.$buttons.next.prop('disabled', false);
558
- that.$buttons.prev.prop('disabled', false);
559
- that.$buttons.finish.prop('disabled', false);
560
- });
561
- }
562
- },
563
- _selectQuestion : function (e) {
564
- e.preventDefault();
565
- var that = this,
566
- id = $(e.target).closest('.learn-press-question-wrap').data('id');
567
- if (this.model.get('status') != 'started') {
568
- return false;
569
- }
570
- if (LP.Hook.applyFilters('learn_press_before_select_question', true, that) !== false) {
571
- this.pause();
572
- this.$buttons.next.prop('disabled', true);
573
- this.$buttons.prev.prop('disabled', true);
574
- this.$buttons.finish.prop('disabled', true);
575
- this.pause();
576
- this.model.select(id, function (response) {
577
- LP.Hook.doAction('learn_press_selected_question', id, that);
578
- that.$buttons.next.prop('disabled', false);
579
- that.$buttons.prev.prop('disabled', false);
580
- that.$buttons.finish.prop('disabled', false);
581
- });
582
- }
583
- },
584
- _getNonce : function (field) {
585
- return this.$('input#' + field + '-nonce').val();
586
- },
587
- _startQuiz : function () {
588
- var that = this;
589
- if (LP.Hook.applyFilters('learn_press_before_start_quiz', true, that) !== false) {
590
- that.$buttons.next.prop('disabled', true);
591
- that.$buttons.prev.prop('disabled', true);
592
- that.$buttons.finish.prop('disabled', true);
593
- LP.MessageBox.blockUI();
594
- that.startQuiz({
595
- complete: function (response) {
596
- LP.MessageBox.hide();
597
- if (response.message) {
598
- LP.alert(response.message, function () {
599
- if (response.redirect) {
600
- LP.reload(response.redirect)
601
- }
602
- });
603
- } else {
604
- if (response.redirect) {
605
- LP.reload(response.redirect)
606
- }
607
- }
608
- that.$buttons.next.prop('disabled', false);
609
- that.$buttons.prev.prop('disabled', false);
610
- that.$buttons.finish.prop('disabled', false);
611
- LP.Hook.doAction('learn_press_start_quiz', response, that);
612
- }
613
- });
614
- }
615
- },
616
- _retakeQuiz : function () {
617
- var that = this;
618
- if (LP.Hook.applyFilters('learn_press_before_retake_quiz', true, that) !== false) {
619
- LP.confirm(single_quiz_localize.confirm_retake_quiz, function (confirm) {
620
- if (!confirm) {
621
- return;
622
- }
623
- that.$buttons.retake.prop('disabled', true);
624
- LP.MessageBox.blockUI();
625
- that.retakeQuiz({
626
- complete: function (response) {
627
- LP.MessageBox.hide();
628
- LP.Hook.doAction('learn_press_user_retaken_quiz', response, that);
629
- }
630
- });
631
- })
632
- }
633
- },
634
- _finishQuiz : function () {
635
- var that = this;
636
- if (LP.Hook.applyFilters('learn_press_before_finish_quiz', true, that) !== false) {
637
- LP.confirm(single_quiz_localize.confirm_finish_quiz, function (confirm) {
638
- if (!confirm) {
639
- return;
640
- }
641
- that.$buttons.next.prop('disabled', true);
642
- that.$buttons.prev.prop('disabled', true);
643
- that.$buttons.finish.prop('disabled', true);
644
- LP.MessageBox.blockUI();
645
- that.finishQuiz({
646
- data : {
647
- save_id : that.model.get('question_id'),
648
- question_answer: that.$('form').serializeJSON(),
649
- time_remaining : that.model.get('time_remaining')
650
- },
651
- complete: function (response) {
652
- LP.MessageBox.hide();
653
- LP.Hook.doAction('learn_press_user_finished_quiz', response, that);
654
- }
655
- });
656
- });
657
- }
658
- },
659
- _updateQuestion : function ($newQuestion) {
660
- var $container = this.$('.quiz-question-content form'),
661
- $oldQuestion = $container.find('.learn-press-question-wrap');
662
- if ($oldQuestion.length) {
663
- $oldQuestion.replaceWith($newQuestion);
664
- } else {
665
- $container.append($newQuestion);
666
- }
667
- LP.Hook.doAction('learn_press_update_question_content', $newQuestion, $oldQuestion, this);
668
- LP.setUrl($newQuestion.find('input[name="learn-press-question-permalink"]').val());
669
-
670
- },
671
- initCountdown : function () {
672
- var that = this,
673
- $countdown = this.$countdown;
674
- if (!$countdown) {
675
- this.$countdown = $("#quiz-countdown-value");
676
- this.$countdown.backward_timer({
677
- seconds : parseInt(this.model.get('time_remaining')),
678
- format : that.model.get('time_format'),
679
- on_exhausted: function (timer) {
680
- that._timeOver(timer)
681
- },
682
- on_tick : function (timer) {
683
- var color = (timer.seconds_left <= 5) ? "#F00" : "";
684
- if (color) timer.target.css('color', color);
685
- //that.model.set('time_remaining', timer.seconds_left);
686
- }
687
- });
688
- }
689
- },
690
- pause : function () {
691
- this.$countdown.backward_timer('cancel');
692
- },
693
- resume : function () {
694
- this.$countdown.backward_timer('start');
695
- },
696
- loadPage : function (url) {
697
- url = url || window.location.href;
698
- window.location.href = url;
699
- },
700
- _timeOver : function (timer) {
701
- timer.target.css('color', '#F00');
702
- LP.MessageBox.blockUI(single_quiz_localize.quiz_time_is_over_message);
703
- this.finishQuiz({
704
- complete: function (response) {
705
- LP.MessageBox.hide();
706
- if (response.redirect) {
707
- LP.reload(response.redirect);
708
- }
709
- }
710
- });
711
- },
712
- block_page : function () {
713
- //this.$el.block_ui();
714
- },
715
- unblock_page : function () {
716
- //this.$el.unblock_ui();
717
- }
718
- });
719
- LP.Quiz = {
720
- init: function (data) {
721
- var model = new LP_Model_Quiz(data);
722
- new LP_View_Quiz(model);
723
- }
724
- }
725
-
726
-
727
- $(document).ready(function () {
728
- var json = JSON.stringify(single_quiz_params);
729
- LP.Quiz.init(single_quiz_params);
730
- })
731
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/frontend/checkout.js CHANGED
@@ -76,7 +76,7 @@ if (typeof window.LP === 'undefined') {
76
  },
77
  doCheckout : function () {
78
  var $form = $(this),
79
- $place_order = $form.find('#learn-press-checkout'),
80
  processing_text = $place_order.attr('data-processing-text'),
81
  text = $place_order.attr('value');
82
  if ($form.triggerHandler('learn_press_checkout_place_order') !== false && $form.triggerHandler('learn_press_checkout_place_order_' + $('#order_review').find('input[name=payment_method]:checked').val()) !== false) {
@@ -84,6 +84,7 @@ if (typeof window.LP === 'undefined') {
84
  $place_order.val(processing_text);
85
  }
86
  $place_order.prop('disabled', true);
 
87
  $.ajax({
88
  url : LP_Settings.siteurl + '/?lp-ajax=checkout',
89
  dataType: 'html',
@@ -112,12 +113,13 @@ if (typeof window.LP === 'undefined') {
112
  }
113
  $place_order.val(text);
114
  $place_order.prop('disabled', false);
 
115
  },
116
  error : function (jqXHR, textStatus, errorThrown) {
117
  LP.Checkout.showErrors('<div class="learn-press-error">' + errorThrown + '</div>');
118
  $place_order.val(text);
119
  $place_order.prop('disabled', false);
120
-
121
  }
122
  });
123
  }
76
  },
77
  doCheckout : function () {
78
  var $form = $(this),
79
+ $place_order = $form.find('#learn-press-checkout-place-order'),
80
  processing_text = $place_order.attr('data-processing-text'),
81
  text = $place_order.attr('value');
82
  if ($form.triggerHandler('learn_press_checkout_place_order') !== false && $form.triggerHandler('learn_press_checkout_place_order_' + $('#order_review').find('input[name=payment_method]:checked').val()) !== false) {
84
  $place_order.val(processing_text);
85
  }
86
  $place_order.prop('disabled', true);
87
+ LP.blockContent();
88
  $.ajax({
89
  url : LP_Settings.siteurl + '/?lp-ajax=checkout',
90
  dataType: 'html',
113
  }
114
  $place_order.val(text);
115
  $place_order.prop('disabled', false);
116
+ LP.unblockContent();
117
  },
118
  error : function (jqXHR, textStatus, errorThrown) {
119
  LP.Checkout.showErrors('<div class="learn-press-error">' + errorThrown + '</div>');
120
  $place_order.val(text);
121
  $place_order.prop('disabled', false);
122
+ LP.unblockContent();
123
  }
124
  });
125
  }
assets/js/frontend/course-filters.js ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;(function ($) {
2
+ "use strict";
3
+ $.fn.courseFilters = function (options) {
4
+ return $.each(this, function () {
5
+ var defaults = {
6
+ attribute_operator: 'and',
7
+ value_operator : 'and',
8
+ ajax_filter : 1,
9
+ button_filter : 1
10
+ },
11
+ $widget = $(this),
12
+ widgetID = $widget.attr('id'),
13
+ filterUrl = window.location.href.addQueryVar('course-filter', 'yes'),
14
+ oldFilterUrl = filterUrl,
15
+ $buttonFilter = $widget.find('.lp-button-filter'),
16
+ $buttonReset = $widget.find('.lp-button-reset-filter');
17
+ options = $.extend({}, defaults, options || {});
18
+
19
+ filterUrl = filterUrl
20
+ .addQueryVar('attribute_operator', options.attribute_operator)
21
+ .addQueryVar('value_operator', options.value_operator);
22
+ function addAttribute(attribute, value) {
23
+ var attributes = filterUrl.getQueryVar(attribute);
24
+ if (!attributes) {
25
+ attributes = value;
26
+ } else {
27
+ if (attributes.indexOf(value) == -1) {
28
+ attributes += ',' + value;
29
+ }
30
+ }
31
+ filterUrl = filterUrl.addQueryVar(attribute, attributes);
32
+ return filterUrl;
33
+ }
34
+
35
+ function removeAttribute(attribute, value) {
36
+ var attributes = filterUrl.getQueryVar(attribute);
37
+ if (attributes) {
38
+ attributes = attributes.replace(value, '').split(',').filter(function (a, b) {
39
+ return a + '' !== '';
40
+ }).join(',');
41
+ if (attributes) {
42
+ filterUrl = filterUrl.addQueryVar(attribute, attributes);
43
+ } else {
44
+ filterUrl = filterUrl.removeQueryVar(attribute);
45
+ }
46
+ }
47
+ return filterUrl;
48
+ }
49
+
50
+ function hasFiltered() {
51
+ return $('#' + widgetID + ' .lp-course-attribute-values li.active').length;
52
+ }
53
+
54
+ function validateUrl(url) {
55
+ // remove paged in query
56
+ url = url.replace(/\/page\/[0-9]+/, '').removeQueryVar('paged');
57
+ return url;
58
+ }
59
+
60
+ function doFilter() {
61
+ filterUrl = validateUrl(filterUrl);
62
+ if (oldFilterUrl == filterUrl) {
63
+ return;
64
+ }
65
+ var useAjax = $widget.find('.lp-course-attributes.course-filters').data('ajax') == 'yes';
66
+ if (useAjax) {
67
+ LP.setUrl(filterUrl);
68
+ LP.blockContent();
69
+ $.ajax({
70
+ url : filterUrl,
71
+ success: function (res) {
72
+ var $html = $(res).contents(),
73
+ $newContent = $html.find('.entry-content'),
74
+ $newWidget = $html.find('#' + widgetID);
75
+ $('.entry-content').replaceWith($newContent);
76
+ $('#' + widgetID).replaceWith($newWidget);
77
+ LP.unblockContent();
78
+ }
79
+ });
80
+ } else {
81
+ LP.reload(filterUrl);
82
+ }
83
+ oldFilterUrl = filterUrl;
84
+ $buttonFilter.prop('disabled', true);
85
+ }
86
+
87
+ function toggleControls() {
88
+ filterUrl = validateUrl(filterUrl);
89
+ var url = filterUrl;
90
+ if (!hasFiltered()) {
91
+ url = url
92
+ .removeQueryVar('attribute_operator')
93
+ .removeQueryVar('value_operator')
94
+ .removeQueryVar('course-filter');
95
+ }
96
+ if ($buttonFilter.length == 0) {
97
+ doFilter();
98
+ } else {
99
+ if (filterUrl == oldFilterUrl) {
100
+ $buttonFilter.prop('disabled', true);
101
+ } else {
102
+ $buttonFilter.prop('disabled', false);
103
+ }
104
+ $buttonReset.prop('disabled', !hasFiltered());
105
+ }
106
+ LP.setUrl(url);
107
+ }
108
+
109
+ if ($buttonFilter.length) {
110
+ $buttonFilter.off('click').on('click', function () {
111
+ doFilter()
112
+ })
113
+ }
114
+ $buttonReset.off('click').on('click', function () {
115
+ $('#' + widgetID + ' .lp-course-attribute-values li.active a').each(function () {
116
+ var $this = $(this),
117
+ $li = $this.parent(),
118
+ $attribute = $li.closest('.lp-course-attribute-values').parent(),
119
+ attribute = $attribute.data('attribute'),
120
+ value = $li.data('value');
121
+ $li.removeClass('active');
122
+ filterUrl = filterUrl.removeQueryVar(attribute);
123
+ });
124
+ $(this).prop('disabled', true);
125
+ toggleControls();
126
+ })
127
+ $(document)
128
+ .off('click', '#' + widgetID + ' .lp-course-attribute-values a')
129
+ .on('click', '#' + widgetID + ' .lp-course-attribute-values a', function (e) {
130
+ e.preventDefault();
131
+ var $this = $(this),
132
+ $li = $this.parent(),
133
+ $attribute = $li.closest('.lp-course-attribute-values').parent(),
134
+ attribute = $attribute.data('attribute'),
135
+ value = $li.data('value');
136
+ $li.toggleClass('active');
137
+ if ($li.hasClass('active')) {
138
+ filterUrl = addAttribute(attribute, value);
139
+ } else {
140
+ filterUrl = removeAttribute(attribute, value);
141
+ }
142
+ toggleControls();
143
+ });
144
+ });
145
+ }
146
+ })(jQuery);
assets/js/frontend/course_coming_soon.js DELETED
@@ -1,28 +0,0 @@
1
- ( function ( $ ) {
2
- $.fn.lp_course_countdown = function () {
3
- var countdowns = this;
4
-
5
- for ( var i = 0; i < countdowns.length; i++ ) {
6
- var _countdown = $( countdowns[i] ),
7
- speed = _countdown.attr( 'data-speed' ),
8
- // gmt = _countdown.attr( 'data-gmt' ),
9
- time = _countdown.attr( 'data-time' ),
10
- showtext = _countdown.attr( 'data-showtext' )
11
- expiryDate = new Date( time ),
12
- gmt = -expiryDate.getTimezoneOffset() / 60;
13
-
14
- var options = {
15
- expiryDate: expiryDate,
16
- speed: speed ? speed : 500,
17
- gmt: parseFloat( gmt ),
18
- showText: parseInt( showtext ),
19
- };
20
- _countdown.mbComingsoon( options );
21
- }
22
- }
23
-
24
- $( document ).ready( function () {
25
- $( '.learnpress-course-coming-soon' ).lp_course_countdown();
26
- } );
27
-
28
- } )( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/frontend/course_coming_soon.min.js DELETED
@@ -1,28 +0,0 @@
1
- ( function ( $ ) {
2
- $.fn.lp_course_countdown = function () {
3
- var countdowns = this;
4
-
5
- for ( var i = 0; i < countdowns.length; i++ ) {
6
- var _countdown = $( countdowns[i] ),
7
- speed = _countdown.attr( 'data-speed' ),
8
- // gmt = _countdown.attr( 'data-gmt' ),
9
- time = _countdown.attr( 'data-time' ),
10
- showtext = _countdown.attr( 'data-showtext' )
11
- expiryDate = new Date( time ),
12
- gmt = -expiryDate.getTimezoneOffset() / 60;
13
-
14
- var options = {
15
- expiryDate: expiryDate,
16
- speed: speed ? speed : 500,
17
- gmt: parseFloat( gmt ),
18
- showText: parseInt( showtext ),
19
- };
20
- _countdown.mbComingsoon( options );
21
- }
22
- }
23
-
24
- $( document ).ready( function () {
25
- $( '.learnpress-course-coming-soon' ).lp_course_countdown();
26
- } );
27
-
28
- } )( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/frontend/learnpress.js CHANGED
@@ -22,7 +22,7 @@
22
  window.location.href = url;
23
  },
24
  parseJSON : function (data) {
25
- var m = data.match(/<!-- LP_AJAX_START -->(.*)<!-- LP_AJAX_END -->/);
26
  try {
27
  if (m) {
28
  data = $.parseJSON(m[1]);
@@ -30,7 +30,6 @@
30
  data = $.parseJSON(data);
31
  }
32
  } catch (e) {
33
- LP.log(e);
34
  data = {};
35
  }
36
  return data;
22
  window.location.href = url;
23
  },
24
  parseJSON : function (data) {
25
+ var m = data.match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
26
  try {
27
  if (m) {
28
  data = $.parseJSON(m[1]);
30
  data = $.parseJSON(data);
31
  }
32
  } catch (e) {
 
33
  data = {};
34
  }
35
  return data;
assets/js/frontend/lesson.js CHANGED
@@ -42,7 +42,7 @@
42
  security = $button.data('security'),
43
  $item = $button.closest('.course-item');
44
  windowTarget.LP.blockContent();
45
- return;
46
  this.complete({
47
  security : security,
48
  course_id : this.model.get('courseId'),
@@ -55,10 +55,7 @@
55
  item.$el.removeClass('focus off');
56
  }, 3000, item);
57
 
58
- /*that.$('.learn-press-course-results-progress').replaceWith($(response.html.progress));
59
- $section.find('.section-header').replaceWith($(response.html.section_header));
60
- that.$('.learn-press-course-buttons').replaceWith($(response.html.buttons));
61
- that.currentItem.set('content', $(response.html.content))*/
62
  windowTarget.LP.setUrl(that.model.get('permalink'));
63
  var data = response.course_result;
64
  data.messageType = 'update-course';
@@ -66,7 +63,7 @@
66
  }
67
  windowTarget.LP.unblockContent();
68
  }
69
- });
70
  },
71
  complete : function (args) {
72
  var that = this;
42
  security = $button.data('security'),
43
  $item = $button.closest('.course-item');
44
  windowTarget.LP.blockContent();
45
+ /*return;
46
  this.complete({
47
  security : security,
48
  course_id : this.model.get('courseId'),
55
  item.$el.removeClass('focus off');
56
  }, 3000, item);
57
 
58
+
 
 
 
59
  windowTarget.LP.setUrl(that.model.get('permalink'));
60
  var data = response.course_result;
61
  data.messageType = 'update-course';
63
  }
64
  windowTarget.LP.unblockContent();
65
  }
66
+ });*/
67
  },
68
  complete : function (args) {
69
  var that = this;
assets/js/frontend/profile.js CHANGED
@@ -313,240 +313,4 @@
313
  });
314
  });
315
 
316
- return;
317
- $(document).on('click', '#lp-remove-upload-photo', function () {
318
-
319
-
320
- $('#learn-press-toggle-password').click(function (e) {
321
- e.preventDefault();
322
- var $el = $('#user_profile_password_form');
323
- if ($el.hasClass('hide-if-js')) {
324
- $el.removeClass('hide-if-js').hide();
325
- }
326
- $el.slideToggle(function () {
327
- $el.find('input').attr('disabled', !$el.is(':visible'));
328
- });
329
- });
330
-
331
- $('#learn-press-form-login input[type="text"]').focus();
332
- /**
333
- * Show hide dropdown menu
334
- */
335
- $('.user-profile-edit-form').on('change', 'select[name="profile_picture_type"]', function () {
336
- var avata_type = $(this).val();
337
- $('.profile-avatar-hidden, .profile-avatar-current').each(function () {
338
- $(this).toggleClass('hide-if-js', $(this).hasClass('avatar-' + avata_type));
339
- });
340
- $('.menu-item-use-gravatar, .menu-item-use-picture').each(function () {
341
- $(this).toggleClass('lp-menu-item-selected', $(this).hasClass('menu-item-use-' + avata_type));
342
- });
343
- });
344
-
345
- $('#lp-menu-change-picture .menu-item-use-gravatar').click(function (event) {
346
- $('#lp-profile_picture_type').val('gravatar').trigger('change');
347
- $('#lpbox-upload-crop-profile-picture').slideUp();
348
- });
349
-
350
- $('#lp-menu-change-picture .menu-item-use-picture').click(function (event) {
351
- var current_picture = $('#lp-user-profile-picture-data').attr('data-current');
352
- if (!current_picture) {
353
- // $('#lp-button-choose-file').trigger('click');
354
- $('#lpbox-upload-crop-profile-picture').slideDown();
355
- } else {
356
- $('#lp-profile_picture_type').val('picture').trigger('change');
357
- $('#lpbox-upload-crop-profile-picture').slideUp();
358
- }
359
- });
360
-
361
- $('#lp-menu-change-picture .menu-item-upload-picture').click(function (event) {
362
- // $('#lp-button-choose-file').trigger('click');
363
- $('#lpbox-upload-crop-profile-picture').slideDown();
364
- });
365
-
366
- $('#lp-ocupload-picture').upload(
367
- {
368
- 'name' : 'image',
369
- params : {from: 'profile', 'action': 'update', 'sub_action': 'upload_avatar'},
370
- 'onSubmit' : function () {
371
- LP.blockContent();
372
- },
373
- 'onComplete': function (response) {
374
- response = LP.parseJSON(response);
375
- console.log(response);
376
- if (response.return && response.avatar_tmp) {
377
- /* Load Image in to crop */
378
- $('.image-editor').cropit('imageSrc', response.avatar_tmp);
379
- $('.image-editor').attr('avatar-filename', response.avatar_tmp_filename);
380
- $('#lpbox-upload-crop-profile-picture').slideDown();
381
- LP.unblockContent();
382
- $('body, html').css('overflow', 'visible');
383
- $('.user-profile-picture.info-field .learn-press-message').remove();
384
- var message = '<div class="learn-press-message success"><p>' + response.message + '</p></div>';
385
- $('.user-profile-picture.info-field').prepend(message);
386
- } else if (!response.return) {
387
- $('.image-editor').cropit('imageSrc', '');
388
- $('.image-editor').attr('avatar-filename', '');
389
- LP.unblockContent();
390
- $('body, html').css('overflow', 'visible');
391
- $('.user-profile-picture.info-field .learn-press-message').remove();
392
- var message = '<div class="learn-press-message error"><p>' + response.message + '</p></div>';
393
- $('.user-profile-picture.info-field').prepend(message);
394
-
395
- }
396
- }
397
- }
398
- );
399
-
400
- $('#lp-button-choose-file').click(function (event) {
401
- event.preventDefault();
402
- $('#lp-ocupload-picture').parent().find('form input[name="image"]').trigger('click');
403
- });
404
-
405
- $('#lpbox-upload-crop-profile-picture .image-editor').cropit();
406
-
407
-
408
- $('#lp-button-apply-changes').click(function (event) {
409
- event.preventDefault();
410
- var zoom = $('.image-editor').cropit('zoom');
411
- var offset = $('.image-editor').cropit('offset');
412
- var avatar_filename = $('.image-editor').attr('avatar-filename');
413
- var datas = {
414
- from : 'profile',
415
- 'action' : 'update',
416
- 'sub_action' : 'crop_avatar',
417
- 'avatar_filename': avatar_filename,
418
- 'zoom' : zoom,
419
- 'offset' : offset
420
- };
421
- /** Create avatar, thumbnail and update picture option **/
422
- $.ajax({
423
- url : LP.getUrl(),
424
- dataType : 'html',
425
- data : datas,
426
- type : 'post',
427
- beforeSend: function () {
428
- LP.blockContent();
429
- },
430
- success : function (response) {
431
- response = LP.parseJSON(response);
432
- var avatar_url = response.avatar_url;
433
- $('.profile-picture.avatar-gravatar img').attr('src', avatar_url);
434
- $('#lp-profile_picture_type').val('picture').trigger('change');
435
- $('#lpbox-upload-crop-profile-picture').slideUp();
436
- LP.unblockContent();
437
- $('body, html').css('overflow', 'visible');
438
- $('.user-profile-picture.info-field .learn-press-message').remove();
439
- $('.user-profile-picture.info-field').prepend(response.message);
440
- }
441
- });
442
- return;
443
- });
444
-
445
- $('#lp-button-cancel-changes').click(function (event) {
446
- event.preventDefault();
447
- $('#lpbox-upload-crop-profile-picture').slideUp();
448
- });
449
-
450
- $('#learn-press-user-profile-edit-form form#your-profile input[name="submit"]').on('click', function (event) {
451
- event.preventDefault();
452
- var check_form = true;
453
- var check_focus = false;
454
- /**
455
- * VALIDATE FORM
456
- */
457
- // console.log( '' === $('#your-profile #nickname' ).val());
458
- if ('' === $('#your-profile #nickname').val()) {
459
- if (0 === $('#your-profile #nickname').next('span.error').length) {
460
- $('<span class="error">' + lp_profile_translation.msg_field_is_required + '</span>').insertAfter($('#your-profile #nickname'));
461
- }
462
- check_form = false;
463
- //document.getElementById('nickname').focus();
464
- $('#your-profile #nickname').focus();
465
- check_focus = true;
466
- } else {
467
- $('#your-profile #nickname').next('span.error').remove();
468
- }
469
-
470
- if ('' !== $('#your-profile #pass0').val()) {
471
- if ('' === $('#your-profile #pass1').val()) {
472
- if (0 === $('#your-profile #pass1').next('span.error').length) {
473
- $('<span class="error">' + lp_profile_translation.msg_field_is_required + '</span>').insertAfter($('#your-profile #pass1'));
474
- }
475
- check_form = false;
476
- if (!check_focus) {
477
- $('#your-profile #pass1').focus();
478
- check_focus = true;
479
- }
480
- } else {
481
- $('#your-profile #pass1').next('span.error').remove();
482
- }
483
-
484
- if ('' === $('#your-profile #pass2').val()) {
485
- if (0 === $('#your-profile #pass2').next('span.error').length) {
486
- $('<span class="error">' + lp_profile_translation.msg_field_is_required + '</span>').insertAfter($('#your-profile #pass2'));
487
- }
488
- check_form = false;
489
- if (!check_focus) {
490
- $('#your-profile #pass2').focus();
491
- check_focus = true;
492
- }
493
- } else {
494
- $(this.pass2).next('span.error').remove();
495
- }
496
- }
497
- if (check_form) {
498
- // $('#learn-press-user-profile-edit-form form#your-profile').submit();
499
- var datas = $('#learn-press-user-profile-edit-form form#your-profile').serializeArray();
500
- $.ajax({
501
- url : LP.getUrl(),
502
- dataType : 'html',
503
- data : datas,
504
- type : 'post',
505
- beforeSend: function () {
506
- LP.blockContent();
507
- },
508
- success : function (response) {
509
- response = LP.parseJSON(response);
510
- $('#your-profile #pass0, #your-profile #pass1, #your-profile #pass2').val('');
511
- $('#user_profile_password_form').slideUp();
512
- LP.unblockContent();
513
- $('body, html').css('overflow', 'visible');
514
- $('.user-profile-picture.info-field .learn-press-message').remove();
515
- $('.user-profile-picture.info-field').prepend(response.message);
516
- $('html, body').animate({
517
- scrollTop: $('.user-profile-picture.info-field .learn-press-message').offset().top - 100
518
- }, 500);
519
- }
520
- });
521
- }
522
- });
523
-
524
- $('#learn-press-user-profile-edit-form #your-profile input#nickname').on('change', function () {
525
- if ('' === $(this).val()) {
526
- if (0 === $(this).next('span.error').length) {
527
- ;
528
- $('<span class="error">' + lp_profile_translation.msg_field_is_required + '</span>').insertAfter($(this));
529
- }
530
- } else {
531
- $(this).next('span.error').remove();
532
- }
533
- });
534
-
535
- $('#learn-press-user-profile-edit-form #your-profile input#pass1').on('change', function () {
536
-
537
- });
538
-
539
- $('#learn-press-user-profile-edit-form #your-profile input#pass2').on('keyup', function () {
540
- var pass1 = $('#your-profile input#pass1').val();
541
- if (pass1 !== $(this).val()) {
542
- if (0 === $(this).next('span.error').length) {
543
- ;
544
- $('<span class="error">' + lp_profile_translation.confim_pass_not_match + '</span>').insertAfter($(this));
545
- }
546
- } else {
547
- $(this).next('span.error').remove();
548
- }
549
- });
550
-
551
- });
552
  })(jQuery);
313
  });
314
  });
315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  })(jQuery);
assets/js/frontend/quiz.js CHANGED
@@ -550,7 +550,7 @@
550
  this.timeout && clearTimeout(this.timeout);
551
  var timer = this.model.inc();
552
  this.updateCountdown();
553
-
554
  if (timer.remainingTime == 0) {
555
  LP.Hook.doAction('learn_press_quiz_timeout', this);
556
  this.$('.button-finish-quiz').trigger('click');
@@ -705,7 +705,7 @@
705
  _submit : function (args) {
706
  var data = {};
707
  data = this.model.getQuizData(data);
708
-
709
  args = $.extend({
710
  security: '',
711
  action : ''
@@ -713,12 +713,18 @@
713
  windowTarget.LP.blockContent();
714
  LP.Hook.doAction('learn_press_before_start_quiz', this.currentItem, this);
715
  var $form = this.$('form.quiz-buttons');
 
716
  this.model.questions.forEach(function (m) {
717
  var $content = m.get('response');
718
  if (!$content) {
719
  return;
720
  }
721
- var $question = $content.find('.quiz-question-content').clone().hide();
 
 
 
 
 
722
  $form.append($question);
723
  });
724
  $form.find('input[name="security"]').val(args.security);
550
  this.timeout && clearTimeout(this.timeout);
551
  var timer = this.model.inc();
552
  this.updateCountdown();
553
+ $(document).triggerHandler('learn-press/quiz-tick');
554
  if (timer.remainingTime == 0) {
555
  LP.Hook.doAction('learn_press_quiz_timeout', this);
556
  this.$('.button-finish-quiz').trigger('click');
705
  _submit : function (args) {
706
  var data = {};
707
  data = this.model.getQuizData(data);
708
+
709
  args = $.extend({
710
  security: '',
711
  action : ''
713
  windowTarget.LP.blockContent();
714
  LP.Hook.doAction('learn_press_before_start_quiz', this.currentItem, this);
715
  var $form = this.$('form.quiz-buttons');
716
+ var qlenght = this.model.questions.length;
717
  this.model.questions.forEach(function (m) {
718
  var $content = m.get('response');
719
  if (!$content) {
720
  return;
721
  }
722
+ var $question = '';
723
+ if( qlenght === 1 ) {
724
+ var $question = jQuery('#'+$content.attr('id')+' .quiz-question-content').clone().hide();
725
+ } else {
726
+ var $question = $content.find('.quiz-question-content').clone().hide();
727
+ }
728
  $form.append($question);
729
  });
730
  $form.find('input[name="security"]').val(args.security);
assets/js/frontend/single-course.js CHANGED
@@ -44,6 +44,13 @@ if (typeof LearnPress === 'undefined') {
44
  },
45
  _changeCurrent : function (m) {
46
 
 
 
 
 
 
 
 
47
  },
48
  request : function (args) {
49
  var that = this;
@@ -275,9 +282,7 @@ if (typeof LearnPress === 'undefined') {
275
  LP.Hook.addAction('learn_press_receive_message', this.receiveMessage);
276
  if (typeof localStorage != 'undefined') {
277
  var expanded = localStorage.getItem("lp-item-expanded");
278
- if (expanded=='yes') {
279
- console.log('xxx:', expanded);
280
-
281
  this.expand(true);
282
  }
283
  }
@@ -296,24 +301,43 @@ if (typeof LearnPress === 'undefined') {
296
  sections = {},
297
  $progress = this.$('.course-progress').find('.number, .percentage-sign'),
298
  $itemProgress = this.$('.items-progress').find('.number, .percentage-sign');
299
- $progress.eq(0).html(parseInt(data.results));
300
- this.$('.lp-progress-value').width(parseInt(data.results) + '%');
 
 
 
 
 
 
301
  data.items && data.items.forEach(function (item) {
302
- var $item = this.$('.course-item.course-item-' + item.id);
 
 
303
  if (!sections[item.section_id]) {
304
  sections[item.section_id] = [0, 0];
305
  }
 
 
 
306
  if (item.status === 'completed') {
307
- itemsCompleted++;
308
  $item.addClass('item-has-status item-completed');
309
- sections[item.section_id][1]++;
310
  } else if (item.status) {
311
  $item.addClass('item-has-status').removeClass('item-completed');
312
  } else {
313
  $item.removeClass('item-has-status').removeClass('item-completed');
314
  }
 
315
  if (item.type === 'lp_quiz') {
316
- $item.find('.item-result').html(LP.Hook.applyFilters('item_result_text', item.results + '%'));
 
 
 
 
 
 
 
 
 
317
  }
318
  sections[item.section_id][0]++;
319
  }, this);
@@ -324,11 +348,18 @@ if (typeof LearnPress === 'undefined') {
324
  if (!data) {
325
  return;
326
  }
 
327
  $section.find('.section-header span.step').html(LP.Hook.applyFilters('section_header_span_text', data[1] + '/' + data[0]));
328
  });
329
  $itemProgress.eq(0).html(data.completed_items_text.replace('%d', itemsCompleted).replace('%d', itemsCount));
330
  var passingCondition = parseInt(this.$('.course-progress .lp-course-progress').data('passing-condition'));
 
 
 
 
 
331
  this.$('.button-finish-course').toggleClass('hide-if-js', !(data.results >= passingCondition));
 
332
  if (data.setUrl) {
333
  LP.setUrl(data.setUrl);
334
  }
@@ -365,7 +396,6 @@ if (typeof LearnPress === 'undefined') {
365
  if (localStorage) {
366
  localStorage.setItem("lp-item-expanded", expand ? 'yes' : 'no');
367
  }
368
- console.log(localStorage.getItem("lp-item-expanded"));
369
  },
370
  _initHooks : function () {
371
  LP.Hook.addAction('learn_press_update_item_content', this.updateItemContent);
@@ -379,19 +409,26 @@ if (typeof LearnPress === 'undefined') {
379
  that.$('.course-item.item-current .button-load-item').trigger('click', {force: true});
380
  }, 500);
381
  },
 
 
 
 
 
 
 
382
  _loadItem : function (e, f) {
383
  e.preventDefault();
384
  var that = this,
385
  $target = $(e.target),
386
- id = $target.hasClass('button-load-item') ? $target.data('id') : $target.find('.button-load-item').data('id');
387
  f = f || {force: false};
388
  if (!id || this.itemLoading) {
389
- return;
390
  }
391
  if ($target.closest('.course-item').hasClass('item-current') && !f.force) {
392
  return;
393
  }
394
- this.blockContent();
395
  if (this.currentItem) {
396
  var $iframe = this.currentItem.get('content');
397
  $iframe && $iframe.detach();
@@ -399,7 +436,7 @@ if (typeof LearnPress === 'undefined') {
399
  this.itemLoading = id;
400
  this.currentItem = this.model.getItem(id);
401
  this.showPopup();
402
- var $content = this.currentItem.get('content'),
403
  isNew = !($content && $content.length);
404
  if (!$content) {
405
  $content = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen />');
@@ -669,9 +706,15 @@ if (typeof LearnPress === 'undefined') {
669
 
670
  this.curriculumPlaceholder.insertAfter($curriculum);
671
  $curriculum.appendTo(this.$('#popup-sidebar'));
672
-
673
- $('body').css({overflow: 'hidden'});
 
 
 
 
 
674
  $(".sidebar-show-btn").hide();
 
675
  },
676
  _closePopup : function (e) {
677
  e.preventDefault();
@@ -681,8 +724,18 @@ if (typeof LearnPress === 'undefined') {
681
  this.progressPlaceholder.replaceWith(this.$('.learn-press-course-results-progress'));
682
  this.undelegateEvents();
683
  this.remove();
684
- $(document).off('focusin');
685
- $('body').css('overflow', '').trigger('learn_press_popup_course_remove');
 
 
 
 
 
 
 
 
 
 
686
  },
687
  _closeSidebar : function (e) {
688
  e.preventDefault();
@@ -699,12 +752,12 @@ if (typeof LearnPress === 'undefined') {
699
  _loadItem : function (e) {
700
  var $iframe = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen />').src($(e.target).attr('href') + '?content-item-only=yes');
701
  this.$('#popup-content-inner').html($iframe);
702
- return '';
703
- e.preventDefault();
704
- $.ajax({
705
- url : $(e.target).attr('href'),
706
- success: this._ajaxLoadItemSuccess
707
- });
708
  },
709
  _ajaxLoadItemSuccess: function (response) {
710
  this.$('#popup-content-inner').html($(response).contents().find('.lp_course'));
44
  },
45
  _changeCurrent : function (m) {
46
 
47
+ },
48
+ get : function () {
49
+ var val = Course_Item.__super__.get.apply(this, arguments);
50
+ if (arguments[0] == 'url') {
51
+ val = LP_Course_Params.root_url + val;
52
+ }
53
+ return val;
54
  },
55
  request : function (args) {
56
  var that = this;
282
  LP.Hook.addAction('learn_press_receive_message', this.receiveMessage);
283
  if (typeof localStorage != 'undefined') {
284
  var expanded = localStorage.getItem("lp-item-expanded");
285
+ if (expanded == 'yes') {
 
 
286
  this.expand(true);
287
  }
288
  }
301
  sections = {},
302
  $progress = this.$('.course-progress').find('.number, .percentage-sign'),
303
  $itemProgress = this.$('.items-progress').find('.number, .percentage-sign');
304
+
305
+ if ($progress.length == 0) {
306
+ return;
307
+ }
308
+
309
+ $progress[0].childNodes[0].nodeValue = parseInt(data.results);
310
+
311
+ this.$('.course-progress .lp-progress-value').width(parseInt(data.results) + '%');
312
  data.items && data.items.forEach(function (item) {
313
+ var $item = this.$('.course-item.course-item-' + item.id),
314
+ $status = $item.find('.item-status'),
315
+ statusClass = $status.length ? ($status[0].className + '').replace(/(item-status-[^\s]*)/g, '').trim() : '';
316
  if (!sections[item.section_id]) {
317
  sections[item.section_id] = [0, 0];
318
  }
319
+ if (item.status) {
320
+ statusClass += ' item-status-' + item.status;
321
+ }
322
  if (item.status === 'completed') {
 
323
  $item.addClass('item-has-status item-completed');
 
324
  } else if (item.status) {
325
  $item.addClass('item-has-status').removeClass('item-completed');
326
  } else {
327
  $item.removeClass('item-has-status').removeClass('item-completed');
328
  }
329
+
330
  if (item.type === 'lp_quiz') {
331
+ $item.find('.item-result').html(LP.Hook.applyFilters('item_result_text', item.results));
332
+ }
333
+ $status[0].className = statusClass;
334
+ if ($.inArray(item.status, ['completed', 'failed', 'passed']) != -1) {
335
+ sections[item.section_id][1]++;
336
+ }
337
+ if (item.status && item.status != 'viewed') {
338
+ $item.addClass('item-has-result');
339
+ } else {
340
+ $item.removeClass('item-has-result');
341
  }
342
  sections[item.section_id][0]++;
343
  }, this);
348
  if (!data) {
349
  return;
350
  }
351
+ itemsCompleted += data[1];
352
  $section.find('.section-header span.step').html(LP.Hook.applyFilters('section_header_span_text', data[1] + '/' + data[0]));
353
  });
354
  $itemProgress.eq(0).html(data.completed_items_text.replace('%d', itemsCompleted).replace('%d', itemsCount));
355
  var passingCondition = parseInt(this.$('.course-progress .lp-course-progress').data('passing-condition'));
356
+ if (data.grade) {
357
+ var $grade = this.$('.grade').html(data.grade_html),
358
+ gradeClass = $grade[0].className.replace(/passed|failed|in-progress/, '') + ' ' + data.grade;
359
+ $grade[0].className = gradeClass;
360
+ }
361
  this.$('.button-finish-course').toggleClass('hide-if-js', !(data.results >= passingCondition));
362
+
363
  if (data.setUrl) {
364
  LP.setUrl(data.setUrl);
365
  }
396
  if (localStorage) {
397
  localStorage.setItem("lp-item-expanded", expand ? 'yes' : 'no');
398
  }
 
399
  },
400
  _initHooks : function () {
401
  LP.Hook.addAction('learn_press_update_item_content', this.updateItemContent);
409
  that.$('.course-item.item-current .button-load-item').trigger('click', {force: true});
410
  }, 500);
411
  },
412
+ _getItemId : function (el) {
413
+ var id = el.hasClass('button-load-item') ? el.data('id') : el.find('.button-load-item').data('id');
414
+ if (!id) {
415
+ id = el.hasClass('lp-label-preview') ? el.closest('.course-item').find('.button-load-item').data('id') : 0;
416
+ }
417
+ return id;
418
+ },
419
  _loadItem : function (e, f) {
420
  e.preventDefault();
421
  var that = this,
422
  $target = $(e.target),
423
+ id = this._getItemId($target);
424
  f = f || {force: false};
425
  if (!id || this.itemLoading) {
426
+ return;
427
  }
428
  if ($target.closest('.course-item').hasClass('item-current') && !f.force) {
429
  return;
430
  }
431
+ this.blockContent();
432
  if (this.currentItem) {
433
  var $iframe = this.currentItem.get('content');
434
  $iframe && $iframe.detach();
436
  this.itemLoading = id;
437
  this.currentItem = this.model.getItem(id);
438
  this.showPopup();
439
+ var $content = this.currentItem.get('content'),
440
  isNew = !($content && $content.length);
441
  if (!$content) {
442
  $content = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen />');
706
 
707
  this.curriculumPlaceholder.insertAfter($curriculum);
708
  $curriculum.appendTo(this.$('#popup-sidebar'));
709
+ //$('html, body').each(function () {
710
+ // var $root = $(this).addClass('block-content'),
711
+ // dataOverflow = $root.attr('overflow'),
712
+ // overflow = dataOverflow != undefined ? dataOverflow : $root.css('overflow');
713
+ // $root.css('overflow', 'hidden').attr('overflow', overflow);
714
+ //})
715
+ LP.blockContent();
716
  $(".sidebar-show-btn").hide();
717
+ $(document).on('learn_press_unblock_content', this.hideScrollBar);
718
  },
719
  _closePopup : function (e) {
720
  e.preventDefault();
724
  this.progressPlaceholder.replaceWith(this.$('.learn-press-course-results-progress'));
725
  this.undelegateEvents();
726
  this.remove();
727
+
728
+ /*var $root = $(this).removeClass('block-content'),
729
+ overflow = $root.attr('overflow');
730
+ $root.css('overflow', overflow).removeAttr('overflow');*/
731
+ LP.unblockContent();
732
+ $('html, body').css('overflow', '');
733
+ $(document).off('focusin').trigger('learn_press_popup_course_remove').unbind('learn_press_unblock_content', this.hideScrollBar);
734
+ },
735
+ hideScrollBar : function () {
736
+ $('html, body').each(function () {
737
+ var $root = $(this).css('overflow', 'hidden');
738
+ })
739
  },
740
  _closeSidebar : function (e) {
741
  e.preventDefault();
752
  _loadItem : function (e) {
753
  var $iframe = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen />').src($(e.target).attr('href') + '?content-item-only=yes');
754
  this.$('#popup-content-inner').html($iframe);
755
+ /*return '';
756
+ e.preventDefault();
757
+ $.ajax({
758
+ url : $(e.target).attr('href'),
759
+ success: this._ajaxLoadItemSuccess
760
+ });*/
761
  },
762
  _ajaxLoadItemSuccess: function (response) {
763
  this.$('#popup-content-inner').html($(response).contents().find('.lp_course'));
assets/js/global.js CHANGED
@@ -4,7 +4,79 @@
4
  if (typeof window.LP == 'undefined') {
5
  window.LP = window.LearnPress = {};
6
  }
7
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  (function ($) {
9
  $.fn.serializeJSON = function () {
10
  var unIndexed = $(this).serializeArray(),
@@ -142,7 +214,9 @@ if (typeof window.LP == 'undefined') {
142
  return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
143
  };
144
  String.prototype.addQueryVar = function (name, value) {
145
- var url = this;
 
 
146
  if (name.match(/\[/)) {
147
  url += url.match(/\?/) ? '&' : '?';
148
  url += name + '=' + value;
@@ -154,14 +228,16 @@ if (typeof window.LP == 'undefined') {
154
  url += name + '=' + value;
155
  }
156
  }
157
- return url;
158
  };
159
  String.prototype.removeQueryVar = function (name) {
160
  var url = this;
 
 
161
  name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
162
  var regex = new RegExp("[\\?&]" + name + "([\[][^=]*)?=([^&#]*)", 'g');
163
  url = url.replace(regex, '');
164
- return url;
165
  };
166
 
167
  if ($.isEmptyObject("") == false) {
@@ -553,14 +629,14 @@ if (typeof window.LP == 'undefined') {
553
  },
554
 
555
  parseResponse: function (response, type) {
556
- var m = response.match(/<!-- LP_AJAX_START -->(.*)<!-- LP_AJAX_END -->/);
557
  if (m) {
558
  response = m[1];
559
  }
560
  return (type || "json") == "json" ? this.parseJSON(response) : response;
561
  },
562
  parseJSON : function (data) {
563
- var m = data.match(/<!-- LP_AJAX_START -->(.*)<!-- LP_AJAX_END -->/);
564
  try {
565
  if (m) {
566
  data = $.parseJSON(m[1]);
@@ -568,7 +644,6 @@ if (typeof window.LP == 'undefined') {
568
  data = $.parseJSON(data);
569
  }
570
  } catch (e) {
571
- LP.log(e);
572
  data = {};
573
  }
574
  return data;
@@ -617,21 +692,21 @@ if (typeof window.LP == 'undefined') {
617
  });
618
  },
619
 
620
- funcArgs2Array: function (args) {
621
  var arr = [];
622
  for (var i = 0; i < args.length; i++) {
623
  arr.push(args[i]);
624
  }
625
  return arr;
626
  },
627
- addFilter : function (action, callback) {
628
  var $doc = $(document),
629
  event = 'LP.' + action;
630
  $doc.on(event, callback);
631
  LP.log($doc.data('events'));
632
  return this;
633
  },
634
- applyFilters : function () {
635
  var $doc = $(document),
636
  action = arguments[0],
637
  args = this.funcArgs2Array(arguments);
@@ -641,10 +716,10 @@ if (typeof window.LP == 'undefined') {
641
  }
642
  return args[1];
643
  },
644
- addAction : function (action, callback) {
645
  return this.addFilter(action, callback);
646
  },
647
- doAction : function () {
648
  var $doc = $(document),
649
  action = arguments[0],
650
  args = this.funcArgs2Array(arguments);
@@ -653,7 +728,7 @@ if (typeof window.LP == 'undefined') {
653
  $doc.trigger.apply($doc, args);
654
  }
655
  },
656
- toElement : function (element, args) {
657
  if ($(element).length == 0) {
658
  return;
659
  }
@@ -670,7 +745,7 @@ if (typeof window.LP == 'undefined') {
670
  scrollTop: $(element).offset().top - args.offset
671
  }, args.duration, args.callback);
672
  },
673
- uniqueId : function (prefix, more_entropy) {
674
  if (typeof prefix === 'undefined') {
675
  prefix = '';
676
  }
@@ -712,29 +787,51 @@ if (typeof window.LP == 'undefined') {
712
 
713
  return retId;
714
  },
715
- log : function () {
716
  //if (typeof LEARN_PRESS_DEBUG != 'undefined' && LEARN_PRESS_DEBUG && console) {
717
  for (var i = 0, n = arguments.length; i < n; i++) {
718
  console.log(arguments[i]);
719
  }
720
  //}
721
  },
722
- blockContent : function () {
723
  if ($('#learn-press-block-content').length == 0) {
724
  $(LP.template('learn-press-template-block-content', {})).appendTo($('body'));
725
  }
726
- var $root = $('body').addClass('block-content'),
727
- overflow = $root.css('overflow');
728
- $root.css('overflow', 'hidden').attr('overflow', overflow);
729
  },
730
- unblockContent: function () {
731
  setTimeout(function () {
732
- var $root = $('body, html').removeClass('block-content'),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
733
  overflow = $root.attr('overflow');
734
  $root.css('overflow', overflow).removeAttr('overflow');
735
- }, 350);
 
736
  },
737
- template : _.memoize(function (id, data) {
738
  var compiled,
739
  options = {
740
  evaluate : /<#([\s\S]+?)#>/g,
@@ -751,7 +848,7 @@ if (typeof window.LP == 'undefined') {
751
  }, function (a, b) {
752
  return a + '-' + JSON.stringify(b);
753
  }),
754
- alert : function (localize, callback) {
755
  var title = '',
756
  message = '';
757
  if (typeof localize == 'string') {
@@ -770,7 +867,7 @@ if (typeof window.LP == 'undefined') {
770
  });
771
  this._on_alert_show();
772
  },
773
- confirm : function (localize, callback) {
774
  var title = '',
775
  message = '';
776
 
@@ -791,7 +888,7 @@ if (typeof window.LP == 'undefined') {
791
  this._on_alert_show();
792
 
793
  },
794
- _on_alert_show: function () {
795
  var $container = $('#popup_container'),
796
  $placeholder = $('<span id="popup_container_placeholder" />').insertAfter($container).data('xxx', $container);
797
  $container.stop().css('top', '-=50').css('opacity', '0').animate({
@@ -799,7 +896,7 @@ if (typeof window.LP == 'undefined') {
799
  opacity: 1
800
  }, 250);
801
  },
802
- _on_alert_hide: function () {
803
  var $holder = $("#popup_container_placeholder"),
804
  $container = $holder.data('xxx');
805
  if ($container) {
@@ -813,7 +910,7 @@ if (typeof window.LP == 'undefined') {
813
  $(this).remove();
814
  });
815
  },
816
- sendMessage : function (data, object, targetOrigin, transfer) {
817
  if ($.isPlainObject(data)) {
818
  data = JSON.stringify(data);
819
  }
@@ -821,7 +918,7 @@ if (typeof window.LP == 'undefined') {
821
  targetOrigin = targetOrigin || '*';
822
  object.postMessage(data, targetOrigin, transfer);
823
  },
824
- receiveMessage: function (event, b) {
825
  var target = event.origin || event.originalEvent.origin,
826
  data = event.data || event.originalEvent.data || '';
827
  if (typeof data === 'string' || data instanceof String) {
4
  if (typeof window.LP == 'undefined') {
5
  window.LP = window.LearnPress = {};
6
  }
7
+ // jQuery cookie plugin
8
+ (function (factory) {
9
+ if (typeof define === 'function' && define.amd) {
10
+ define(['jquery'], factory);
11
+ } else if (typeof exports === 'object') {
12
+ module.exports = factory(require('jquery'));
13
+ } else {
14
+ factory(jQuery);
15
+ }
16
+ }(function ($) {
17
+ var pluses = /\+/g;
18
+ function encode(s) {
19
+ return config.raw ? s : encodeURIComponent(s);
20
+ }
21
+ function decode(s) {
22
+ return config.raw ? s : decodeURIComponent(s);
23
+ }
24
+ function stringifyCookieValue(value) {
25
+ return encode(config.json ? JSON.stringify(value) : String(value));
26
+ }
27
+ function parseCookieValue(s) {
28
+ if (s.indexOf('"') === 0) {
29
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
30
+ }
31
+ try {
32
+ s = decodeURIComponent(s.replace(pluses, ' '));
33
+ return config.json ? JSON.parse(s) : s;
34
+ } catch (e) {
35
+ }
36
+ }
37
+ function read(s, converter) {
38
+ var value = config.raw ? s : parseCookieValue(s);
39
+ return $.isFunction(converter) ? converter(value) : value;
40
+ }
41
+ var config = $.cookie = function (key, value, options) {
42
+ if (arguments.length > 1 && !$.isFunction(value)) {
43
+ options = $.extend({}, config.defaults, options);
44
+ if (typeof options.expires === 'number') {
45
+ var days = options.expires, t = options.expires = new Date();
46
+ t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
47
+ }
48
+ return (document.cookie = [
49
+ encode(key), '=', stringifyCookieValue(value),
50
+ options.expires ? '; expires=' + options.expires.toUTCString() : '',
51
+ options.path ? '; path=' + options.path : '',
52
+ options.domain ? '; domain=' + options.domain : '',
53
+ options.secure ? '; secure' : ''
54
+ ].join(''));
55
+ }
56
+ var result = key ? undefined : {},
57
+ cookies = document.cookie ? document.cookie.split('; ') : [],
58
+ i = 0,
59
+ l = cookies.length;
60
+ for (; i < l; i++) {
61
+ var parts = cookies[i].split('='),
62
+ name = decode(parts.shift()),
63
+ cookie = parts.join('=');
64
+ if (key === name) {
65
+ result = read(cookie, value);
66
+ break;
67
+ }
68
+ if (!key && (cookie = read(cookie)) !== undefined) {
69
+ result[name] = cookie;
70
+ }
71
+ }
72
+ return result;
73
+ };
74
+ config.defaults = {};
75
+ $.removeCookie = function (key, options) {
76
+ $.cookie(key, '', $.extend({}, options, {expires: -1}));
77
+ return !$.cookie(key);
78
+ };
79
+ }));
80
  (function ($) {
81
  $.fn.serializeJSON = function () {
82
  var unIndexed = $(this).serializeArray(),
214
  return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
215
  };
216
  String.prototype.addQueryVar = function (name, value) {
217
+ var url = this,
218
+ m = url.split('#');
219
+ url = m[0];
220
  if (name.match(/\[/)) {
221
  url += url.match(/\?/) ? '&' : '?';
222
  url += name + '=' + value;
228
  url += name + '=' + value;
229
  }
230
  }
231
+ return url + (m[1] ? '#' + m[1] : '');
232
  };
233
  String.prototype.removeQueryVar = function (name) {
234
  var url = this;
235
+ var m = url.split('#');
236
+ url = m[0];
237
  name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
238
  var regex = new RegExp("[\\?&]" + name + "([\[][^=]*)?=([^&#]*)", 'g');
239
  url = url.replace(regex, '');
240
+ return url + (m[1] ? '#' + m[1] : '');
241
  };
242
 
243
  if ($.isEmptyObject("") == false) {
629
  },
630
 
631
  parseResponse: function (response, type) {
632
+ var m = response.match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
633
  if (m) {
634
  response = m[1];
635
  }
636
  return (type || "json") == "json" ? this.parseJSON(response) : response;
637
  },
638
  parseJSON : function (data) {
639
+ var m = data.match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
640
  try {
641
  if (m) {
642
  data = $.parseJSON(m[1]);
644
  data = $.parseJSON(data);
645
  }
646
  } catch (e) {
 
647
  data = {};
648
  }
649
  return data;
692
  });
693
  },
694
 
695
+ funcArgs2Array : function (args) {
696
  var arr = [];
697
  for (var i = 0; i < args.length; i++) {
698
  arr.push(args[i]);
699
  }
700
  return arr;
701
  },
702
+ addFilter : function (action, callback) {
703
  var $doc = $(document),
704
  event = 'LP.' + action;
705
  $doc.on(event, callback);
706
  LP.log($doc.data('events'));
707
  return this;
708
  },
709
+ applyFilters : function () {
710
  var $doc = $(document),
711
  action = arguments[0],
712
  args = this.funcArgs2Array(arguments);
716
  }
717
  return args[1];
718
  },
719
+ addAction : function (action, callback) {
720
  return this.addFilter(action, callback);
721
  },
722
+ doAction : function () {
723
  var $doc = $(document),
724
  action = arguments[0],
725
  args = this.funcArgs2Array(arguments);
728
  $doc.trigger.apply($doc, args);
729
  }
730
  },
731
+ toElement : function (element, args) {
732
  if ($(element).length == 0) {
733
  return;
734
  }
745
  scrollTop: $(element).offset().top - args.offset
746
  }, args.duration, args.callback);
747
  },
748
+ uniqueId : function (prefix, more_entropy) {
749
  if (typeof prefix === 'undefined') {
750
  prefix = '';
751
  }
787
 
788
  return retId;
789
  },
790
+ log : function () {
791
  //if (typeof LEARN_PRESS_DEBUG != 'undefined' && LEARN_PRESS_DEBUG && console) {
792
  for (var i = 0, n = arguments.length; i < n; i++) {
793
  console.log(arguments[i]);
794
  }
795
  //}
796
  },
797
+ blockContent : function () {
798
  if ($('#learn-press-block-content').length == 0) {
799
  $(LP.template('learn-press-template-block-content', {})).appendTo($('body'));
800
  }
801
+ LP.hideMainScrollbar().addClass('block-content');
802
+ $(document).trigger('learn_press_block_content');
 
803
  },
804
+ unblockContent : function () {
805
  setTimeout(function () {
806
+ LP.showMainScrollbar().removeClass('block-content');
807
+ $(document).trigger('learn_press_unblock_content');
808
+ }, 350);
809
+ },
810
+ hideMainScrollbar: function (el) {
811
+ if (!el) {
812
+ el = 'html, body';
813
+ }
814
+ var $el = $(el);
815
+ $el.each(function () {
816
+ var $root = $(this),
817
+ overflow = $root.css('overflow');
818
+ $root.css('overflow', 'hidden').attr('overflow', overflow);
819
+ });
820
+ return $el;
821
+ },
822
+ showMainScrollbar: function (el) {
823
+ if (!el) {
824
+ el = 'html, body';
825
+ }
826
+ var $el = $(el);
827
+ $el.each(function () {
828
+ var $root = $(this),
829
  overflow = $root.attr('overflow');
830
  $root.css('overflow', overflow).removeAttr('overflow');
831
+ });
832
+ return $el;
833
  },
834
+ template : _.memoize(function (id, data) {
835
  var compiled,
836
  options = {
837
  evaluate : /<#([\s\S]+?)#>/g,
848
  }, function (a, b) {
849
  return a + '-' + JSON.stringify(b);
850
  }),
851
+ alert : function (localize, callback) {
852
  var title = '',
853
  message = '';
854
  if (typeof localize == 'string') {
867
  });
868
  this._on_alert_show();
869
  },
870
+ confirm : function (localize, callback) {
871
  var title = '',
872
  message = '';
873
 
888
  this._on_alert_show();
889
 
890
  },
891
+ _on_alert_show : function () {
892
  var $container = $('#popup_container'),
893
  $placeholder = $('<span id="popup_container_placeholder" />').insertAfter($container).data('xxx', $container);
894
  $container.stop().css('top', '-=50').css('opacity', '0').animate({
896
  opacity: 1
897
  }, 250);
898
  },
899
+ _on_alert_hide : function () {
900
  var $holder = $("#popup_container_placeholder"),
901
  $container = $holder.data('xxx');
902
  if ($container) {
910
  $(this).remove();
911
  });
912
  },
913
+ sendMessage : function (data, object, targetOrigin, transfer) {
914
  if ($.isPlainObject(data)) {
915
  data = JSON.stringify(data);
916
  }
918
  targetOrigin = targetOrigin || '*';
919
  object.postMessage(data, targetOrigin, transfer);
920
  },
921
+ receiveMessage : function (event, b) {
922
  var target = event.origin || event.originalEvent.origin,
923
  data = event.data || event.originalEvent.data || '';
924
  if (typeof data === 'string' || data instanceof String) {
assets/js/global.min.js CHANGED
@@ -395,7 +395,7 @@ if (typeof window.LP == "undefined") {
395
  }
396
  window.location.href = url
397
  }, parseJSON : function (data) {
398
- var m = data.match(/<!-- LP_AJAX_START -->(.*)<!-- LP_AJAX_END -->/);
399
  try {
400
  if (m) {
401
  data = $.parseJSON(m[1])
@@ -408,7 +408,7 @@ if (typeof window.LP == "undefined") {
408
  }
409
  return data
410
  }, parseResponse : function (response, type) {
411
- var m = response.match(/<!-- LP_AJAX_START -->(.*)<!-- LP_AJAX_END -->/);
412
  if (m) {
413
  response = m[1]
414
  }
395
  }
396
  window.location.href = url
397
  }, parseJSON : function (data) {
398
+ var m = data.match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
399
  try {
400
  if (m) {
401
  data = $.parseJSON(m[1])
408
  }
409
  return data
410
  }, parseResponse : function (response, type) {
411
+ var m = response.match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
412
  if (m) {
413
  response = m[1]
414
  }
assets/js/jquery.cropit.js DELETED
@@ -1,1207 +0,0 @@
1
- /*! cropit - v0.5.1 <https://github.com/scottcheng/cropit> */
2
- (function webpackUniversalModuleDefinition(root, factory) {
3
- if(typeof exports === 'object' && typeof module === 'object')
4
- module.exports = factory(require("jquery"));
5
- else if(typeof define === 'function' && define.amd)
6
- define(["jquery"], factory);
7
- else if(typeof exports === 'object')
8
- exports["cropit"] = factory(require("jquery"));
9
- else
10
- root["cropit"] = factory(root["jQuery"]);
11
- })(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {
12
- return /******/ (function(modules) { // webpackBootstrap
13
- /******/ // The module cache
14
- /******/ var installedModules = {};
15
-
16
- /******/ // The require function
17
- /******/ function __webpack_require__(moduleId) {
18
-
19
- /******/ // Check if module is in cache
20
- /******/ if(installedModules[moduleId])
21
- /******/ return installedModules[moduleId].exports;
22
-
23
- /******/ // Create a new module (and put it into the cache)
24
- /******/ var module = installedModules[moduleId] = {
25
- /******/ exports: {},
26
- /******/ id: moduleId,
27
- /******/ loaded: false
28
- /******/ };
29
-
30
- /******/ // Execute the module function
31
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
32
-
33
- /******/ // Flag the module as loaded
34
- /******/ module.loaded = true;
35
-
36
- /******/ // Return the exports of the module
37
- /******/ return module.exports;
38
- /******/ }
39
-
40
-
41
- /******/ // expose the modules object (__webpack_modules__)
42
- /******/ __webpack_require__.m = modules;
43
-
44
- /******/ // expose the module cache
45
- /******/ __webpack_require__.c = installedModules;
46
-
47
- /******/ // __webpack_public_path__
48
- /******/ __webpack_require__.p = "";
49
-
50
- /******/ // Load entry module and return exports
51
- /******/ return __webpack_require__(0);
52
- /******/ })
53
- /************************************************************************/
54
- /******/ ([
55
- /* 0 */
56
- /***/ function(module, exports, __webpack_require__) {
57
-
58
- var _slice = Array.prototype.slice;
59
-
60
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
61
-
62
- var _jquery = __webpack_require__(1);
63
-
64
- var _jquery2 = _interopRequireDefault(_jquery);
65
-
66
- var _cropit = __webpack_require__(2);
67
-
68
- var _cropit2 = _interopRequireDefault(_cropit);
69
-
70
- var _constants = __webpack_require__(4);
71
-
72
- var _utils = __webpack_require__(6);
73
-
74
- var applyOnEach = function applyOnEach($el, callback) {
75
- return $el.each(function () {
76
- var cropit = _jquery2['default'].data(this, _constants.PLUGIN_KEY);
77
-
78
- if (!cropit) {
79
- return;
80
- }
81
- callback(cropit);
82
- });
83
- };
84
-
85
- var callOnFirst = function callOnFirst($el, method, options) {
86
- var cropit = $el.first().data(_constants.PLUGIN_KEY);
87
-
88
- if (!cropit || !_jquery2['default'].isFunction(cropit[method])) {
89
- return null;
90
- }
91
- return cropit[method](options);
92
- };
93
-
94
- var methods = {
95
- init: function init(options) {
96
- return this.each(function () {
97
- // Only instantiate once per element
98
- if (_jquery2['default'].data(this, _constants.PLUGIN_KEY)) {
99
- return;
100
- }
101
-
102
- var cropit = new _cropit2['default'](_jquery2['default'], this, options);
103
- _jquery2['default'].data(this, _constants.PLUGIN_KEY, cropit);
104
- });
105
- },
106
-
107
- destroy: function destroy() {
108
- return this.each(function () {
109
- _jquery2['default'].removeData(this, _constants.PLUGIN_KEY);
110
- });
111
- },
112
-
113
- isZoomable: function isZoomable() {
114
- return callOnFirst(this, 'isZoomable');
115
- },
116
-
117
- 'export': function _export(options) {
118
- return callOnFirst(this, 'getCroppedImageData', options);
119
- }
120
- };
121
-
122
- var delegate = function delegate($el, fnName) {
123
- return applyOnEach($el, function (cropit) {
124
- cropit[fnName]();
125
- });
126
- };
127
-
128
- var prop = function prop($el, name, value) {
129
- if ((0, _utils.exists)(value)) {
130
- return applyOnEach($el, function (cropit) {
131
- cropit[name] = value;
132
- });
133
- } else {
134
- var cropit = $el.first().data(_constants.PLUGIN_KEY);
135
- return cropit[name];
136
- }
137
- };
138
-
139
- _jquery2['default'].fn.cropit = function (method) {
140
- if (methods[method]) {
141
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
142
- } else if (['imageState', 'imageSrc', 'offset', 'previewSize', 'imageSize', 'zoom', 'initialZoom', 'exportZoom', 'minZoom', 'maxZoom'].indexOf(method) >= 0) {
143
- return prop.apply(undefined, [this].concat(_slice.call(arguments)));
144
- } else if (['rotateCW', 'rotateCCW', 'disable', 'reenable'].indexOf(method) >= 0) {
145
- return delegate.apply(undefined, [this].concat(_slice.call(arguments)));
146
- } else {
147
- return methods.init.apply(this, arguments);
148
- }
149
- };
150
-
151
- /***/ },
152
- /* 1 */
153
- /***/ function(module, exports) {
154
-
155
- module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
156
-
157
- /***/ },
158
- /* 2 */
159
- /***/ function(module, exports, __webpack_require__) {
160
-
161
- Object.defineProperty(exports, '__esModule', {
162
- value: true
163
- });
164
-
165
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
166
-
167
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
168
-
169
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
170
-
171
- var _jquery = __webpack_require__(1);
172
-
173
- var _jquery2 = _interopRequireDefault(_jquery);
174
-
175
- var _Zoomer = __webpack_require__(3);
176
-
177
- var _Zoomer2 = _interopRequireDefault(_Zoomer);
178
-
179
- var _constants = __webpack_require__(4);
180
-
181
- var _options = __webpack_require__(5);
182
-
183
- var _utils = __webpack_require__(6);
184
-
185
- var Cropit = (function () {
186
- function Cropit(jQuery, element, options) {
187
- _classCallCheck(this, Cropit);
188
-
189
- this.$el = (0, _jquery2['default'])(element);
190
-
191
- var defaults = (0, _options.loadDefaults)(this.$el);
192
- this.options = _jquery2['default'].extend({}, defaults, options);
193
-
194
- this.init();
195
- }
196
-
197
- _createClass(Cropit, [{
198
- key: 'init',
199
- value: function init() {
200
- var _this = this;
201
-
202
- this.image = new Image();
203
- this.preImage = new Image();
204
- this.image.onload = this.onImageLoaded.bind(this);
205
- this.preImage.onload = this.onPreImageLoaded.bind(this);
206
- this.image.onerror = this.preImage.onerror = function () {
207
- _this.onImageError.call(_this, _constants.ERRORS.IMAGE_FAILED_TO_LOAD);
208
- };
209
-
210
- this.$preview = this.options.$preview.css('position', 'relative');
211
- this.$fileInput = this.options.$fileInput.attr({ accept: 'image/*' });
212
- this.$zoomSlider = this.options.$zoomSlider.attr({ min: 0, max: 1, step: 0.01 });
213
-
214
- this.previewSize = {
215
- width: this.options.width || this.$preview.innerWidth(),
216
- height: this.options.height || this.$preview.innerHeight()
217
- };
218
-
219
- this.$image = (0, _jquery2['default'])('<img />').addClass(_constants.CLASS_NAMES.PREVIEW_IMAGE).attr('alt', '').css({
220
- transformOrigin: 'top left',
221
- webkitTransformOrigin: 'top left',
222
- willChange: 'transform'
223
- });
224
- this.$imageContainer = (0, _jquery2['default'])('<div />').addClass(_constants.CLASS_NAMES.PREVIEW_IMAGE_CONTAINER).css({
225
- position: 'absolute',
226
- overflow: 'hidden',
227
- left: 0,
228
- top: 0,
229
- width: '100%',
230
- height: '100%'
231
- }).append(this.$image);
232
- this.$preview.append(this.$imageContainer);
233
-
234
- if (this.options.imageBackground) {
235
- if (_jquery2['default'].isArray(this.options.imageBackgroundBorderWidth)) {
236
- this.bgBorderWidthArray = this.options.imageBackgroundBorderWidth;
237
- } else {
238
- this.bgBorderWidthArray = [0, 1, 2, 3].map(function () {
239
- return _this.options.imageBackgroundBorderWidth;
240
- });
241
- }
242
-
243
- this.$bg = (0, _jquery2['default'])('<img />').addClass(_constants.CLASS_NAMES.PREVIEW_BACKGROUND).attr('alt', '').css({
244
- position: 'relative',
245
- left: this.bgBorderWidthArray[3],
246
- top: this.bgBorderWidthArray[0],
247
- transformOrigin: 'top left',
248
- webkitTransformOrigin: 'top left',
249
- willChange: 'transform'
250
- });
251
- this.$bgContainer = (0, _jquery2['default'])('<div />').addClass(_constants.CLASS_NAMES.PREVIEW_BACKGROUND_CONTAINER).css({
252
- position: 'absolute',
253
- zIndex: 0,
254
- top: -this.bgBorderWidthArray[0],
255
- right: -this.bgBorderWidthArray[1],
256
- bottom: -this.bgBorderWidthArray[2],
257
- left: -this.bgBorderWidthArray[3]
258
- }).append(this.$bg);
259
- if (this.bgBorderWidthArray[0] > 0) {
260
- this.$bgContainer.css('overflow', 'hidden');
261
- }
262
- this.$preview.prepend(this.$bgContainer);
263
- }
264
-
265
- this.initialZoom = this.options.initialZoom;
266
-
267
- this.imageLoaded = false;
268
-
269
- this.moveContinue = false;
270
-
271
- this.zoomer = new _Zoomer2['default']();
272
-
273
- if (this.options.allowDragNDrop) {
274
- _jquery2['default'].event.props.push('dataTransfer');
275
- }
276
-
277
- this.bindListeners();
278
-
279
- if (this.options.imageState && this.options.imageState.src) {
280
- this.loadImage(this.options.imageState.src);
281
- }
282
- }
283
- }, {
284
- key: 'bindListeners',
285
- value: function bindListeners() {
286
- this.$fileInput.on('change.cropit', this.onFileChange.bind(this));
287
- this.$imageContainer.on(_constants.EVENTS.PREVIEW, this.onPreviewEvent.bind(this));
288
- this.$zoomSlider.on(_constants.EVENTS.ZOOM_INPUT, this.onZoomSliderChange.bind(this));
289
-
290
- if (this.options.allowDragNDrop) {
291
- this.$imageContainer.on('dragover.cropit dragleave.cropit', this.onDragOver.bind(this));
292
- this.$imageContainer.on('drop.cropit', this.onDrop.bind(this));
293
- }
294
- }
295
- }, {
296
- key: 'unbindListeners',
297
- value: function unbindListeners() {
298
- this.$fileInput.off('change.cropit');
299
- this.$imageContainer.off(_constants.EVENTS.PREVIEW);
300
- this.$imageContainer.off('dragover.cropit dragleave.cropit drop.cropit');
301
- this.$zoomSlider.off(_constants.EVENTS.ZOOM_INPUT);
302
- }
303
- }, {
304
- key: 'onFileChange',
305
- value: function onFileChange(e) {
306
- this.options.onFileChange(e);
307
-
308
- if (this.$fileInput.get(0).files) {
309
- this.loadFile(this.$fileInput.get(0).files[0]);
310
- }
311
- }
312
- }, {
313
- key: 'loadFile',
314
- value: function loadFile(file) {
315
- var fileReader = new FileReader();
316
- if (file && file.type.match('image')) {
317
- fileReader.readAsDataURL(file);
318
- fileReader.onload = this.onFileReaderLoaded.bind(this);
319
- fileReader.onerror = this.onFileReaderError.bind(this);
320
- } else if (file) {
321
- this.onFileReaderError();
322
- }
323
- }
324
- }, {
325
- key: 'onFileReaderLoaded',
326
- value: function onFileReaderLoaded(e) {
327
- this.loadImage(e.target.result);
328
- }
329
- }, {
330
- key: 'onFileReaderError',
331
- value: function onFileReaderError() {
332
- this.options.onFileReaderError();
333
- }
334
- }, {
335
- key: 'onDragOver',
336
- value: function onDragOver(e) {
337
- e.preventDefault();
338
- e.dataTransfer.dropEffect = 'copy';
339
- this.$preview.toggleClass(_constants.CLASS_NAMES.DRAG_HOVERED, e.type === 'dragover');
340
- }
341
- }, {
342
- key: 'onDrop',
343
- value: function onDrop(e) {
344
- var _this2 = this;
345
-
346
- e.preventDefault();
347
- e.stopPropagation();
348
-
349
- var files = Array.prototype.slice.call(e.dataTransfer.files, 0);
350
- files.some(function (file) {
351
- if (!file.type.match('image')) {
352
- return false;
353
- }
354
-
355
- _this2.loadFile(file);
356
- return true;
357
- });
358
-
359
- this.$preview.removeClass(_constants.CLASS_NAMES.DRAG_HOVERED);
360
- }
361
- }, {
362
- key: 'loadImage',
363
- value: function loadImage(imageSrc) {
364
- var _this3 = this;
365
-
366
- if (!imageSrc) {
367
- return;
368
- }
369
-
370
- this.options.onImageLoading();
371
- this.setImageLoadingClass();
372
-
373
- if (imageSrc.indexOf('data') === 0) {
374
- this.preImage.src = imageSrc;
375
- } else {
376
- var xhr = new XMLHttpRequest();
377
- xhr.onload = function (e) {
378
- if (e.target.status >= 300) {
379
- _this3.onImageError.call(_this3, _constants.ERRORS.IMAGE_FAILED_TO_LOAD);
380
- return;
381
- }
382
-
383
- _this3.loadFile(e.target.response);
384
- };
385
- xhr.open('GET', imageSrc);
386
- xhr.responseType = 'blob';
387
- xhr.send();
388
- }
389
- }
390
- }, {
391
- key: 'onPreImageLoaded',
392
- value: function onPreImageLoaded() {
393
- if (this.shouldRejectImage({
394
- imageWidth: this.preImage.width,
395
- imageHeight: this.preImage.height,
396
- previewSize: this.previewSize,
397
- maxZoom: this.options.maxZoom,
398
- exportZoom: this.options.exportZoom,
399
- smallImage: this.options.smallImage
400
- })) {
401
- this.onImageError(_constants.ERRORS.SMALL_IMAGE);
402
- if (this.image.src) {
403
- this.setImageLoadedClass();
404
- }
405
- return;
406
- }
407
-
408
- this.image.src = this.preImage.src;
409
- }
410
- }, {
411
- key: 'onImageLoaded',
412
- value: function onImageLoaded() {
413
- this.rotation = 0;
414
- this.setupZoomer(this.options.imageState && this.options.imageState.zoom || this._initialZoom);
415
- if (this.options.imageState && this.options.imageState.offset) {
416
- this.offset = this.options.imageState.offset;
417
- } else {
418
- this.centerImage();
419
- }
420
-
421
- this.options.imageState = {};
422
-
423
- this.$image.attr('src', this.image.src);
424
- if (this.options.imageBackground) {
425
- this.$bg.attr('src', this.image.src);
426
- }
427
-
428
- this.setImageLoadedClass();
429
-
430
- this.imageLoaded = true;
431
-
432
- this.options.onImageLoaded();
433
- }
434
- }, {
435
- key: 'onImageError',
436
- value: function onImageError() {
437
- this.options.onImageError.apply(this, arguments);
438
- this.removeImageLoadingClass();
439
- }
440
- }, {
441
- key: 'setImageLoadingClass',
442
- value: function setImageLoadingClass() {
443
- this.$preview.removeClass(_constants.CLASS_NAMES.IMAGE_LOADED).addClass(_constants.CLASS_NAMES.IMAGE_LOADING);
444
- }
445
- }, {
446
- key: 'setImageLoadedClass',
447
- value: function setImageLoadedClass() {
448
- this.$preview.removeClass(_constants.CLASS_NAMES.IMAGE_LOADING).addClass(_constants.CLASS_NAMES.IMAGE_LOADED);
449
- }
450
- }, {
451
- key: 'removeImageLoadingClass',
452
- value: function removeImageLoadingClass() {
453
- this.$preview.removeClass(_constants.CLASS_NAMES.IMAGE_LOADING);
454
- }
455
- }, {
456
- key: 'getEventPosition',
457
- value: function getEventPosition(e) {
458
- if (e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0]) {
459
- e = e.originalEvent.touches[0];
460
- }
461
- if (e.clientX && e.clientY) {
462
- return { x: e.clientX, y: e.clientY };
463
- }
464
- }
465
- }, {
466
- key: 'onPreviewEvent',
467
- value: function onPreviewEvent(e) {
468
- if (!this.imageLoaded) {
469
- return;
470
- }
471
-
472
- this.moveContinue = false;
473
- this.$imageContainer.off(_constants.EVENTS.PREVIEW_MOVE);
474
-
475
- if (e.type === 'mousedown' || e.type === 'touchstart') {
476
- this.origin = this.getEventPosition(e);
477
- this.moveContinue = true;
478
- this.$imageContainer.on(_constants.EVENTS.PREVIEW_MOVE, this.onMove.bind(this));
479
- } else {
480
- (0, _jquery2['default'])(document.body).focus();
481
- }
482
-
483
- e.stopPropagation();
484
- return false;
485
- }
486
- }, {
487
- key: 'onMove',
488
- value: function onMove(e) {
489
- var eventPosition = this.getEventPosition(e);
490
-
491
- if (this.moveContinue && eventPosition) {
492
- this.offset = {
493
- x: this.offset.x + eventPosition.x - this.origin.x,
494
- y: this.offset.y + eventPosition.y - this.origin.y
495
- };
496
- }
497
-
498
- this.origin = eventPosition;
499
-
500
- e.stopPropagation();
501
- return false;
502
- }
503
- }, {
504
- key: 'fixOffset',
505
- value: function fixOffset(offset) {
506
- if (!this.imageLoaded) {
507
- return offset;
508
- }
509
-
510
- var ret = { x: offset.x, y: offset.y };
511
-
512
- if (!this.options.freeMove) {
513
- if (this.imageWidth * this.zoom >= this.previewSize.width) {
514
- ret.x = Math.min(0, Math.max(ret.x, this.previewSize.width - this.imageWidth * this.zoom));
515
- } else {
516
- ret.x = Math.max(0, Math.min(ret.x, this.previewSize.width - this.imageWidth * this.zoom));
517
- }
518
-
519
- if (this.imageHeight * this.zoom >= this.previewSize.height) {
520
- ret.y = Math.min(0, Math.max(ret.y, this.previewSize.height - this.imageHeight * this.zoom));
521
- } else {
522
- ret.y = Math.max(0, Math.min(ret.y, this.previewSize.height - this.imageHeight * this.zoom));
523
- }
524
- }
525
-
526
- ret.x = (0, _utils.round)(ret.x);
527
- ret.y = (0, _utils.round)(ret.y);
528
-
529
- return ret;
530
- }
531
- }, {
532
- key: 'centerImage',
533
- value: function centerImage() {
534
- if (!this.image.width || !this.image.height || !this.zoom) {
535
- return;
536
- }
537
-
538
- this.offset = {
539
- x: (this.previewSize.width - this.imageWidth * this.zoom) / 2,
540
- y: (this.previewSize.height - this.imageHeight * this.zoom) / 2
541
- };
542
- }
543
- }, {
544
- key: 'onZoomSliderChange',
545
- value: function onZoomSliderChange() {
546
- if (!this.imageLoaded) {
547
- return;
548
- }
549
-
550
- this.zoomSliderPos = Number(this.$zoomSlider.val());
551
- var newZoom = this.zoomer.getZoom(this.zoomSliderPos);
552
- if (newZoom === this.zoom) {
553
- return;
554
- }
555
- this.zoom = newZoom;
556
- }
557
- }, {
558
- key: 'enableZoomSlider',
559
- value: function enableZoomSlider() {
560
- this.$zoomSlider.removeAttr('disabled');
561
- this.options.onZoomEnabled();
562
- }
563
- }, {
564
- key: 'disableZoomSlider',
565
- value: function disableZoomSlider() {
566
- this.$zoomSlider.attr('disabled', true);
567
- this.options.onZoomDisabled();
568
- }
569
- }, {
570
- key: 'setupZoomer',
571
- value: function setupZoomer(zoom) {
572
- this.zoomer.setup({
573
- imageSize: this.imageSize,
574
- previewSize: this.previewSize,
575
- exportZoom: this.options.exportZoom,
576
- maxZoom: this.options.maxZoom,
577
- minZoom: this.options.minZoom,
578
- smallImage: this.options.smallImage
579
- });
580
- this.zoom = (0, _utils.exists)(zoom) ? zoom : this._zoom;
581
-
582
- if (this.isZoomable()) {
583
- this.enableZoomSlider();
584
- } else {
585
- this.disableZoomSlider();
586
- }
587
- }
588
- }, {
589
- key: 'fixZoom',
590
- value: function fixZoom(zoom) {
591
- return this.zoomer.fixZoom(zoom);
592
- }
593
- }, {
594
- key: 'isZoomable',
595
- value: function isZoomable() {
596
- return this.zoomer.isZoomable();
597
- }
598
- }, {
599
- key: 'renderImage',
600
- value: function renderImage() {
601
- var transformation = '\n translate(' + this.rotatedOffset.x + 'px, ' + this.rotatedOffset.y + 'px)\n scale(' + this.zoom + ')\n rotate(' + this.rotation + 'deg)';
602
-
603
- this.$image.css({
604
- transform: transformation,
605
- webkitTransform: transformation
606
- });
607
- if (this.options.imageBackground) {
608
- this.$bg.css({
609
- transform: transformation,
610
- webkitTransform: transformation
611
- });
612
- }
613
- }
614
- }, {
615
- key: 'rotateCW',
616
- value: function rotateCW() {
617
- if (this.shouldRejectImage({
618
- imageWidth: this.image.height,
619
- imageHeight: this.image.width,
620
- previewSize: this.previewSize,
621
- maxZoom: this.options.maxZoom,
622
- exportZoom: this.options.exportZoom,
623
- smallImage: this.options.smallImage
624
- })) {
625
- this.rotation = (this.rotation + 180) % 360;
626
- } else {
627
- this.rotation = (this.rotation + 90) % 360;
628
- }
629
- }
630
- }, {
631
- key: 'rotateCCW',
632
- value: function rotateCCW() {
633
- if (this.shouldRejectImage({
634
- imageWidth: this.image.height,
635
- imageHeight: this.image.width,
636
- previewSize: this.previewSize,
637
- maxZoom: this.options.maxZoom,
638
- exportZoom: this.options.exportZoom,
639
- smallImage: this.options.smallImage
640
- })) {
641
- this.rotation = (this.rotation + 180) % 360;
642
- } else {
643
- this.rotation = (this.rotation + 270) % 360;
644
- }
645
- }
646
- }, {
647
- key: 'shouldRejectImage',
648
- value: function shouldRejectImage(_ref) {
649
- var imageWidth = _ref.imageWidth;
650
- var imageHeight = _ref.imageHeight;
651
- var previewSize = _ref.previewSize;
652
- var maxZoom = _ref.maxZoom;
653
- var exportZoom = _ref.exportZoom;
654
- var smallImage = _ref.smallImage;
655
-
656
- if (smallImage !== 'reject') {
657
- return false;
658
- }
659
-
660
- return imageWidth * maxZoom < previewSize.width * exportZoom || imageHeight * maxZoom < previewSize.height * exportZoom;
661
- }
662
- }, {
663
- key: 'getCroppedImageData',
664
- value: function getCroppedImageData(exportOptions) {
665
- if (!this.image.src) {
666
- return;
667
- }
668
-
669
- var exportDefaults = {
670
- type: 'image/png',
671
- quality: 0.75,
672
- originalSize: false,
673
- fillBg: '#fff'
674
- };
675
- exportOptions = _jquery2['default'].extend({}, exportDefaults, exportOptions);
676
-
677
- var exportZoom = exportOptions.originalSize ? 1 / this.zoom : this.options.exportZoom;
678
-
679
- var zoomedSize = {
680
- width: this.zoom * exportZoom * this.image.width,
681
- height: this.zoom * exportZoom * this.image.height
682
- };
683
-
684
- var canvas = (0, _jquery2['default'])('<canvas />').attr({
685
- width: this.previewSize.width * exportZoom,
686
- height: this.previewSize.height * exportZoom
687
- }).get(0);
688
- var canvasContext = canvas.getContext('2d');
689
-
690
- if (exportOptions.type === 'image/jpeg') {
691
- canvasContext.fillStyle = exportOptions.fillBg;
692
- canvasContext.fillRect(0, 0, canvas.width, canvas.height);
693
- }
694
-
695
- canvasContext.translate(this.rotatedOffset.x * exportZoom, this.rotatedOffset.y * exportZoom);
696
- canvasContext.rotate(this.rotation * Math.PI / 180);
697
- canvasContext.drawImage(this.image, 0, 0, zoomedSize.width, zoomedSize.height);
698
-
699
- return canvas.toDataURL(exportOptions.type, exportOptions.quality);
700
- }
701
- }, {
702
- key: 'disable',
703
- value: function disable() {
704
- this.unbindListeners();
705
- this.disableZoomSlider();
706
- this.$el.addClass(_constants.CLASS_NAMES.DISABLED);
707
- }
708
- }, {
709
- key: 'reenable',
710
- value: function reenable() {
711
- this.bindListeners();
712
- this.enableZoomSlider();
713
- this.$el.removeClass(_constants.CLASS_NAMES.DISABLED);
714
- }
715
- }, {
716
- key: '$',
717
- value: function $(selector) {
718
- if (!this.$el) {
719
- return null;
720
- }
721
- return this.$el.find(selector);
722
- }
723
- }, {
724
- key: 'offset',
725
- set: function (position) {
726
- if (!position || !(0, _utils.exists)(position.x) || !(0, _utils.exists)(position.y)) {
727
- return;
728
- }
729
-
730
- this._offset = this.fixOffset(position);
731
- this.renderImage();
732
-
733
- this.options.onOffsetChange(position);
734
- },
735
- get: function () {
736
- return this._offset;
737
- }
738
- }, {
739
- key: 'zoom',
740
- set: function (newZoom) {
741
- newZoom = this.fixZoom(newZoom);
742
-
743
- if (this.imageLoaded) {
744
- var oldZoom = this.zoom;
745
-
746
- var newX = this.previewSize.width / 2 - (this.previewSize.width / 2 - this.offset.x) * newZoom / oldZoom;
747
- var newY = this.previewSize.height / 2 - (this.previewSize.height / 2 - this.offset.y) * newZoom / oldZoom;
748
-
749
- this._zoom = newZoom;
750
- this.offset = { x: newX, y: newY }; // Triggers renderImage()
751
- } else {
752
- this._zoom = newZoom;
753
- }
754
-
755
- this.zoomSliderPos = this.zoomer.getSliderPos(this.zoom);
756
- this.$zoomSlider.val(this.zoomSliderPos);
757
-
758
- this.options.onZoomChange(newZoom);
759
- },
760
- get: function () {
761
- return this._zoom;
762
- }
763
- }, {
764
- key: 'rotatedOffset',
765
- get: function () {
766
- return {
767
- x: this.offset.x + (this.rotation === 90 ? this.image.height * this.zoom : 0) + (this.rotation === 180 ? this.image.width * this.zoom : 0),
768
- y: this.offset.y + (this.rotation === 180 ? this.image.height * this.zoom : 0) + (this.rotation === 270 ? this.image.width * this.zoom : 0)
769
- };
770
- }
771
- }, {
772
- key: 'rotation',
773
- set: function (newRotation) {
774
- this._rotation = newRotation;
775
-
776
- if (this.imageLoaded) {
777
- // Change in image size may lead to change in zoom range
778
- this.setupZoomer();
779
- }
780
- },
781
- get: function () {
782
- return this._rotation;
783
- }
784
- }, {
785
- key: 'imageState',
786
- get: function () {
787
- return {
788
- src: this.image.src,
789
- offset: this.offset,
790
- zoom: this.zoom
791
- };
792
- }
793
- }, {
794
- key: 'imageSrc',
795
- get: function () {
796
- return this.image.src;
797
- },
798
- set: function (imageSrc) {
799
- this.loadImage(imageSrc);
800
- }
801
- }, {
802
- key: 'imageWidth',
803
- get: function () {
804
- return this.rotation % 180 === 0 ? this.image.width : this.image.height;
805
- }
806
- }, {
807
- key: 'imageHeight',
808
- get: function () {
809
- return this.rotation % 180 === 0 ? this.image.height : this.image.width;
810
- }
811
- }, {
812
- key: 'imageSize',
813
- get: function () {
814
- return {
815
- width: this.imageWidth,
816
- height: this.imageHeight
817
- };
818
- }
819
- }, {
820
- key: 'initialZoom',
821
- get: function () {
822
- return this.options.initialZoom;
823
- },
824
- set: function (initialZoomOption) {
825
- this.options.initialZoom = initialZoomOption;
826
- if (initialZoomOption === 'min') {
827
- this._initialZoom = 0; // Will be fixed when image loads
828
- } else if (initialZoomOption === 'image') {
829
- this._initialZoom = 1;
830
- } else {
831
- this._initialZoom = 0;
832
- }
833
- }
834
- }, {
835
- key: 'exportZoom',
836
- get: function () {
837
- return this.options.exportZoom;
838
- },
839
- set: function (exportZoom) {
840
- this.options.exportZoom = exportZoom;
841
- this.setupZoomer();
842
- }
843
- }, {
844
- key: 'minZoom',
845
- get: function () {
846
- return this.options.minZoom;
847
- },
848
- set: function (minZoom) {
849
- this.options.minZoom = minZoom;
850
- this.setupZoomer();
851
- }
852
- }, {
853
- key: 'maxZoom',
854
- get: function () {
855
- return this.options.maxZoom;
856
- },
857
- set: function (maxZoom) {
858
- this.options.maxZoom = maxZoom;
859
- this.setupZoomer();
860
- }
861
- }, {
862
- key: 'previewSize',
863
- get: function () {
864
- return this._previewSize;
865
- },
866
- set: function (size) {
867
- if (!size || size.width <= 0 || size.height <= 0) {
868
- return;
869
- }
870
-
871
- this._previewSize = {
872
- width: size.width,
873
- height: size.height
874
- };
875
- this.$preview.innerWidth(this.previewSize.width).innerHeight(this.previewSize.height);
876
-
877
- if (this.imageLoaded) {
878
- this.setupZoomer();
879
- }
880
- }
881
- }]);
882
-
883
- return Cropit;
884
- })();
885
-
886
- exports['default'] = Cropit;
887
- module.exports = exports['default'];
888
-
889
- /***/ },
890
- /* 3 */
891
- /***/ function(module, exports) {
892
-
893
- Object.defineProperty(exports, '__esModule', {
894
- value: true
895
- });
896
-
897
- var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
898
-
899
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
900
-
901
- var Zoomer = (function () {
902
- function Zoomer() {
903
- _classCallCheck(this, Zoomer);
904
-
905
- this.minZoom = this.maxZoom = 1;
906
- }
907
-
908
- _createClass(Zoomer, [{
909
- key: 'setup',
910
- value: function setup(_ref) {
911
- var imageSize = _ref.imageSize;
912
- var previewSize = _ref.previewSize;
913
- var exportZoom = _ref.exportZoom;
914
- var maxZoom = _ref.maxZoom;
915
- var minZoom = _ref.minZoom;
916
- var smallImage = _ref.smallImage;
917
-
918
- var widthRatio = previewSize.width / imageSize.width;
919
- var heightRatio = previewSize.height / imageSize.height;
920
-
921
- if (minZoom === 'fit') {
922
- this.minZoom = Math.min(widthRatio, heightRatio);
923
- } else {
924
- this.minZoom = Math.max(widthRatio, heightRatio);
925
- }
926
-
927
- if (smallImage === 'allow') {
928
- this.minZoom = Math.min(this.minZoom, 1);
929
- }
930
-
931
- this.maxZoom = Math.max(this.minZoom, maxZoom / exportZoom);
932
- }
933
- }, {
934
- key: 'getZoom',
935
- value: function getZoom(sliderPos) {
936
- if (!this.minZoom || !this.maxZoom) {
937
- return null;
938
- }
939
-
940
- return sliderPos * (this.maxZoom - this.minZoom) + this.minZoom;
941
- }
942
- }, {
943
- key: 'getSliderPos',
944
- value: function getSliderPos(zoom) {
945
- if (!this.minZoom || !this.maxZoom) {
946
- return null;
947
- }
948
-
949
- if (this.minZoom === this.maxZoom) {
950
- return 0;
951
- } else {
952
- return (zoom - this.minZoom) / (this.maxZoom - this.minZoom);
953
- }
954
- }
955
- }, {
956
- key: 'isZoomable',
957
- value: function isZoomable() {
958
- if (!this.minZoom || !this.maxZoom) {
959
- return null;
960
- }
961
-
962
- return this.minZoom !== this.maxZoom;
963
- }
964
- }, {
965
- key: 'fixZoom',
966
- value: function fixZoom(zoom) {
967
- return Math.max(this.minZoom, Math.min(this.maxZoom, zoom));
968
- }
969
- }]);
970
-
971
- return Zoomer;
972
- })();
973
-
974
- exports['default'] = Zoomer;
975
- module.exports = exports['default'];
976
-
977
- /***/ },
978
- /* 4 */
979
- /***/ function(module, exports) {
980
-
981
- Object.defineProperty(exports, '__esModule', {
982
- value: true
983
- });
984
- var PLUGIN_KEY = 'cropit';
985
-
986
- exports.PLUGIN_KEY = PLUGIN_KEY;
987
- var CLASS_NAMES = {
988
- PREVIEW: 'cropit-preview',
989
- PREVIEW_IMAGE_CONTAINER: 'cropit-preview-image-container',
990
- PREVIEW_IMAGE: 'cropit-preview-image',
991
- PREVIEW_BACKGROUND_CONTAINER: 'cropit-preview-background-container',
992
- PREVIEW_BACKGROUND: 'cropit-preview-background',
993
- FILE_INPUT: 'cropit-image-input',
994
- ZOOM_SLIDER: 'cropit-image-zoom-input',
995
-
996
- DRAG_HOVERED: 'cropit-drag-hovered',
997
- IMAGE_LOADING: 'cropit-image-loading',
998
- IMAGE_LOADED: 'cropit-image-loaded',
999
- DISABLED: 'cropit-disabled'
1000
- };
1001
-
1002
- exports.CLASS_NAMES = CLASS_NAMES;
1003
- var ERRORS = {
1004
- IMAGE_FAILED_TO_LOAD: { code: 0, message: 'Image failed to load.' },
1005
- SMALL_IMAGE: { code: 1, message: 'Image is too small.' }
1006
- };
1007
-
1008
- exports.ERRORS = ERRORS;
1009
- var eventName = function eventName(events) {
1010
- return events.map(function (e) {
1011
- return '' + e + '.cropit';
1012
- }).join(' ');
1013
- };
1014
- var EVENTS = {
1015
- PREVIEW: eventName(['mousedown', 'mouseup', 'mouseleave', 'touchstart', 'touchend', 'touchcancel', 'touchleave']),
1016
- PREVIEW_MOVE: eventName(['mousemove', 'touchmove']),
1017
- ZOOM_INPUT: eventName(['mousemove', 'touchmove', 'change'])
1018
- };
1019
- exports.EVENTS = EVENTS;
1020
-
1021
- /***/ },
1022
- /* 5 */
1023
- /***/ function(module, exports, __webpack_require__) {
1024
-
1025
- Object.defineProperty(exports, '__esModule', {
1026
- value: true
1027
- });
1028
-
1029
- var _constants = __webpack_require__(4);
1030
-
1031
- var options = {
1032
- elements: [{
1033
- name: '$preview',
1034
- description: 'The HTML element that displays image preview.',
1035
- defaultSelector: '.' + _constants.CLASS_NAMES.PREVIEW
1036
- }, {
1037
- name: '$fileInput',
1038
- description: 'File input element.',
1039
- defaultSelector: 'input.' + _constants.CLASS_NAMES.FILE_INPUT
1040
- }, {
1041
- name: '$zoomSlider',
1042
- description: 'Range input element that controls image zoom.',
1043
- defaultSelector: 'input.' + _constants.CLASS_NAMES.ZOOM_SLIDER
1044
- }].map(function (o) {
1045
- o.type = 'jQuery element';
1046
- o['default'] = '$imageCropper.find(\'' + o.defaultSelector + '\')';
1047
- return o;
1048
- }),
1049
-
1050
- values: [{
1051
- name: 'width',
1052
- type: 'number',
1053
- description: 'Width of image preview in pixels. If set, it will override the CSS property.',
1054
- 'default': null
1055
- }, {
1056
- name: 'height',
1057
- type: 'number',
1058
- description: 'Height of image preview in pixels. If set, it will override the CSS property.',
1059
- 'default': null
1060
- }, {
1061
- name: 'imageBackground',
1062
- type: 'boolean',
1063
- description: 'Whether or not to display the background image beyond the preview area.',
1064
- 'default': false
1065
- }, {
1066
- name: 'imageBackgroundBorderWidth',
1067
- type: 'array or number',
1068
- description: 'Width of background image border in pixels.\n The four array elements specify the width of background image width on the top, right, bottom, left side respectively.\n The background image beyond the width will be hidden.\n If specified as a number, border with uniform width on all sides will be applied.',
1069
- 'default': [0, 0, 0, 0]
1070
- }, {
1071
- name: 'exportZoom',
1072
- type: 'number',
1073
- description: 'The ratio between the desired image size to export and the preview size.\n For example, if the preview size is `300px * 200px`, and `exportZoom = 2`, then\n the exported image size will be `600px * 400px`.\n This also affects the maximum zoom level, since the exported image cannot be zoomed to larger than its original size.',
1074
- 'default': 1
1075
- }, {
1076
- name: 'allowDragNDrop',
1077
- type: 'boolean',
1078
- description: 'When set to true, you can load an image by dragging it from local file browser onto the preview area.',
1079
- 'default': true
1080
- }, {
1081
- name: 'minZoom',
1082
- type: 'string',
1083
- description: 'This options decides the minimal zoom level of the image.\n If set to `\'fill\'`, the image has to fill the preview area, i.e. both width and height must not go smaller than the preview area.\n If set to `\'fit\'`, the image can shrink further to fit the preview area, i.e. at least one of its edges must not go smaller than the preview area.',
1084
- 'default': 'fill'
1085
- }, {
1086
- name: 'maxZoom',
1087
- type: 'number',
1088
- description: 'Determines how big the image can be zoomed. E.g. if set to 1.5, the image can be zoomed to 150% of its original size.',
1089
- 'default': 1
1090
- }, {
1091
- name: 'initialZoom',
1092
- type: 'string',
1093
- description: 'Determines the zoom when an image is loaded.\n When set to `\'min\'`, image is zoomed to the smallest when loaded.\n When set to `\'image\'`, image is zoomed to 100% when loaded.',
1094
- 'default': 'min'
1095
- }, {
1096
- name: 'freeMove',
1097
- type: 'boolean',
1098
- description: 'When set to true, you can freely move the image instead of being bound to the container borders',
1099
- 'default': false
1100
- }, {
1101
- name: 'smallImage',
1102
- type: 'string',
1103
- description: 'When set to `\'reject\'`, `onImageError` would be called when cropit loads an image that is smaller than the container.\n When set to `\'allow\'`, images smaller than the container can be zoomed down to its original size, overiding `minZoom` option.\n When set to `\'stretch\'`, the minimum zoom of small images would follow `minZoom` option.',
1104
- 'default': 'reject'
1105
- }],
1106
-
1107
- callbacks: [{
1108
- name: 'onFileChange',
1109
- description: 'Called when user selects a file in the select file input.',
1110
- params: [{
1111
- name: 'event',
1112
- type: 'object',
1113
- description: 'File change event object'
1114
- }]
1115
- }, {
1116
- name: 'onFileReaderError',
1117
- description: 'Called when `FileReader` encounters an error while loading the image file.'
1118
- }, {
1119
- name: 'onImageLoading',
1120
- description: 'Called when image starts to be loaded.'
1121
- }, {
1122
- name: 'onImageLoaded',
1123
- description: 'Called when image is loaded.'
1124
- }, {
1125
- name: 'onImageError',
1126
- description: 'Called when image cannot be loaded.',
1127
- params: [{
1128
- name: 'error',
1129
- type: 'object',
1130
- description: 'Error object.'
1131
- }, {
1132
- name: 'error.code',
1133
- type: 'number',
1134
- description: 'Error code. `0` means generic image loading failure. `1` means image is too small.'
1135
- }, {
1136
- name: 'error.message',
1137
- type: 'string',
1138
- description: 'A message explaining the error.'
1139
- }]
1140
- }, {
1141
- name: 'onZoomEnabled',
1142
- description: 'Called when image the zoom slider is enabled.'
1143
- }, {
1144
- name: 'onZoomDisabled',
1145
- description: 'Called when image the zoom slider is disabled.'
1146
- }, {
1147
- name: 'onZoomChange',
1148
- description: 'Called when zoom changes.',
1149
- params: [{
1150
- name: 'zoom',
1151
- type: 'number',
1152
- description: 'New zoom.'
1153
- }]
1154
- }, {
1155
- name: 'onOffsetChange',
1156
- description: 'Called when image offset changes.',
1157
- params: [{
1158
- name: 'offset',
1159
- type: 'object',
1160
- description: 'New offset, with `x` and `y` values.'
1161
- }]
1162
- }].map(function (o) {
1163
- o.type = 'function';return o;
1164
- })
1165
- };
1166
-
1167
- var loadDefaults = function loadDefaults($el) {
1168
- var defaults = {};
1169
- if ($el) {
1170
- options.elements.forEach(function (o) {
1171
- defaults[o.name] = $el.find(o.defaultSelector);
1172
- });
1173
- }
1174
- options.values.forEach(function (o) {
1175
- defaults[o.name] = o['default'];
1176
- });
1177
- options.callbacks.forEach(function (o) {
1178
- defaults[o.name] = function () {};
1179
- });
1180
-
1181
- return defaults;
1182
- };
1183
-
1184
- exports.loadDefaults = loadDefaults;
1185
- exports['default'] = options;
1186
-
1187
- /***/ },
1188
- /* 6 */
1189
- /***/ function(module, exports) {
1190
-
1191
- Object.defineProperty(exports, '__esModule', {
1192
- value: true
1193
- });
1194
- var exists = function exists(v) {
1195
- return typeof v !== 'undefined';
1196
- };
1197
-
1198
- exports.exists = exists;
1199
- var round = function round(x) {
1200
- return +(Math.round(x * 100) + 'e-2');
1201
- };
1202
- exports.round = round;
1203
-
1204
- /***/ }
1205
- /******/ ])
1206
- });
1207
- ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/jquery.mb-comingsoon.js DELETED
@@ -1,346 +0,0 @@
1
- /**************************************************************************
2
- *------------------------ COMINGSOON COUNTER 1.1 ------------------------
3
- * ========================================================================
4
- * Copyright 2014 Bruno Milgiaretti http://www.sisteminterattivi.org
5
- * Licensed under MIT http://opensource.org/licenses/MIT
6
- * ========================================================================
7
- Usage:
8
- Constructor:
9
- $(selector).mbComingsoon(expiryDate Date or String) Expiry date of counter
10
- $(selector).mbComingsoon(options plain Object) options: {
11
- expiryDate: Date, //Expiry Date required
12
- interval: Number, //Update interval in milliseconds (default = 1000))
13
- localization: {
14
- days: "days", //Localize labels of counter
15
- hours: "hours",
16
- minutes: "minutes",
17
- seconds: "seconds"
18
- }
19
- callBack: Function //Function executed on expiry or if espired
20
- }
21
- Methds:
22
- .mbComingSoon('start') // start counter
23
- .mbComingSoon('stop') // stop counter
24
- .mbComingSoon(options) // change options
25
-
26
- Note: Max time that the counter can display is 999 days 23h 59' 59". If time is greater hours, minutes and seconds will be displayed
27
- correctly, but days will be 999 until decrease under this quota.
28
- */
29
-
30
- (function ($) {
31
- // Class Definition
32
- var MbComingsoon;
33
- MbComingsoon = function (date, element, localization, speed, callBack, gmt, showText) {
34
- this.$el = $(element);
35
- this.gmt = gmt;
36
- this.showText = showText;
37
- this.end = date;
38
- this.active = false;
39
- this.interval = 1000;
40
- this.speed = speed;
41
- if (jQuery.isFunction(callBack))
42
- this.callBack = callBack;
43
- else
44
- this.callBack = null;
45
- this.localization = {days: "days", hours: "hours", minutes: "minutes", seconds: "seconds"};
46
- $.extend(this.localization, this.localization, localization);
47
-
48
- }
49
-
50
- MbComingsoon.prototype = {
51
- // Returns an object containing counter data
52
- getCounterNumbers: function () {
53
- var result = {
54
- days : {
55
- tens : 0,
56
- units : 0,
57
- hundreds: 0
58
- },
59
- hours : {
60
- tens : 0,
61
- units: 0
62
- },
63
- minutes: {
64
- tens : 0,
65
- units: 0
66
- },
67
- seconds: {
68
- tens : 0,
69
- units: 0
70
- }
71
- }, millday = 1000 * 60 * 60 * 24,
72
- millhour = 1000 * 60 * 60,
73
- millminutes = 1000 * 60,
74
- millseconds = 1000,
75
- rest = 0
76
- ;
77
-
78
- var now = new Date();
79
- var time_gmt = now.getTimezoneOffset() / 60 + this.gmt;
80
- var diff = this.end.getTime() - now.getTime() - (time_gmt * 60 * 60000);
81
- // CountDown expired !!
82
- if (diff <= 0)
83
- return result;
84
-
85
- // Max number of days is 99 (i will expand in future versions)
86
- var days = Math.min(Math.floor(diff / millday), 999);
87
- rest = diff % millday;
88
-
89
- result.days.hundreds = Math.floor(days / 100);
90
- var dayrest = days % 100;
91
- result.days.tens = Math.floor(dayrest / 10);
92
- result.days.units = dayrest % 10;
93
-
94
- var hours = Math.floor(rest / millhour);
95
- rest = rest % millhour;
96
- result.hours.tens = Math.floor(hours / 10);
97
- result.hours.units = hours % 10;
98
-
99
- var minutes = Math.floor(rest / millminutes);
100
- rest = rest % millminutes;
101
- result.minutes.tens = Math.floor(minutes / 10);
102
- result.minutes.units = minutes % 10;
103
-
104
- var seconds = Math.floor(rest / 1000);
105
- result.seconds.tens = Math.floor(seconds / 10);
106
- result.seconds.units = seconds % 10;
107
- return result;
108
- },
109
- // If changed update a part (day, hours, minutes, seconds) of counter
110
- updatePart : function (part) {
111
- var cn = this.getCounterNumbers();
112
- var $part = $('.' + part, this.$el);
113
- if (part == 'days') {
114
- this.setDayHundreds(cn.days.hundreds > 0);
115
- if ($part.find('.number.hundreds.show').html() != cn[part].hundreds) {
116
- var $n1 = $('.n1.hundreds', $part);
117
- var $n2 = $('.n2.hundreds', $part);
118
- this.scrollNumber($n1, $n2, cn[part].hundreds);
119
- }
120
- }
121
- if ($part.find('.number.tens.show').html() != cn[part].tens) {
122
- var $n1 = $('.n1.tens', $part);
123
- var $n2 = $('.n2.tens', $part);
124
- this.scrollNumber($n1, $n2, cn[part].tens);
125
-
126
- }
127
- if ($part.find('.number.units.show').html() != cn[part].units) {
128
- var $n1 = $('.n1.units', $part);
129
- var $n2 = $('.n2.units', $part);
130
- this.scrollNumber($n1, $n2, cn[part].units);
131
- }
132
- // Only forn day part update hundreds
133
- },
134
- // True if countdown is expired
135
- timeOut : function () {
136
- var now = new Date()
137
- var time_gmt = now.getTimezoneOffset() / 60 + this.gmt;
138
- var diff = this.end.getTime() - now.getTime() - (time_gmt * 60 * 60000);
139
- if (diff <= 0)
140
- return true;
141
- return false;
142
- },
143
- setDayHundreds : function (action) {
144
- if (action)
145
- $('.counter.days', this.$el).addClass('with-hundreds');
146
- else
147
- $('.counter.days', this.$el).removeClass('with-hundreds');
148
- },
149
- // Update entire counter
150
- updateCounter : function () {
151
- this.updatePart('days');
152
- this.updatePart('hours');
153
- this.updatePart('minutes');
154
- this.updatePart('seconds');
155
- if (this.timeOut()) {
156
- this.active = false;
157
- if (this.callBack)
158
- this.callBack(this);
159
- }
160
- },
161
- localize : function (localization) {
162
- if ($.isPlainObject(localization))
163
- $.extend(this.localization, this.localization, localization);
164
- $('.days', this.$el).siblings('.counter-caption').text(this.localization.days);
165
- $('.hours', this.$el).siblings('.counter-caption').text(this.localization.hours);
166
- $('.minutes', this.$el).siblings('.counter-caption').text(this.localization.minutes);
167
- $('.seconds', this.$el).siblings('.counter-caption').text(this.localization.seconds);
168
- },
169
- // Start automatic update (interval in milliseconds)
170
- start : function (interval) {
171
- if (interval)
172
- this.interval = interval;
173
- var i = this.interval;
174
- this.active = true;
175
- var me = this;
176
- setTimeout(function () {
177
- me.updateCounter();
178
- if (me.active)
179
- me.start();
180
- }, i);
181
- },
182
- // Stop automatic update
183
- stop : function () {
184
- this.active = false;
185
- },
186
- // Animation of a single
187
- scrollNumber : function ($n1, $n2, value) {
188
- if ($n1.hasClass('show')) {
189
- $n2.removeClass('hidden-down')
190
- .css('top', '-100%')
191
- .text(value)
192
- .stop()
193
- .animate({ top: 0 }, this.speed, function () {
194
- $n2.addClass('show');
195
- });
196
- $n1.stop().animate({ top: "100%" }, this.speed, function () {
197
- $n1.removeClass('show')
198
- .addClass('hidden-down');
199
- });
200
- } else {
201
- $n1.removeClass('hidden-down')
202
- .css('top', '-100%')
203
- .text(value)
204
- .stop()
205
- .animate({ top: 0 }, this.speed, function () {
206
- $n1.addClass('show');
207
- });
208
- $n2.stop().animate({ top: "100%" }, this.speed, function () {
209
- $n2.removeClass('show')
210
- .addClass('hidden-down');
211
- });
212
- }
213
- }
214
- }
215
-
216
- // jQuery plugin
217
- jQuery.fn.mbComingsoon = function (opt) {
218
- var defaults = {
219
- interval : 1000,
220
- callBack : null,
221
- localization: { days: "days", hours: "hours", minutes: "minutes", seconds: "seconds" },
222
- speed : 500,
223
- gmt : 0,
224
- showText : 1
225
- }
226
- var options = {};
227
-
228
- var content = ' <div class="counter-group" id="myCounter">' +
229
- ' <div class="counter-block">' +
230
- ' <div class="counter days">' +
231
- ' <div class="number show n1 hundreds">0</div>' +
232
- ' <div class="number show n1 tens">0</div>' +
233
- ' <div class="number show n1 units">0</div>' +
234
- ' <div class="number hidden-up n2 hundreds">0</div>' +
235
- ' <div class="number hidden-up n2 tens">0</div>' +
236
- ' <div class="number hidden-up n2 units">0</div>' +
237
- ' </div>' +
238
- ' <div class="counter-caption">days</div>' +
239
- ' </div>' +
240
- ' <div class="counter-block">' +
241
- ' <div class="counter hours">' +
242
- ' <div class="number show n1 tens">0</div>' +
243
- ' <div class="number show n1 units">0</div>' +
244
- ' <div class="number hidden-up n2 tens">0</div>' +
245
- ' <div class="number hidden-up n2 units">0</div>' +
246
- ' </div>' +
247
- ' <div class="counter-caption">hours</div>' +
248
- ' </div>' +
249
- ' <div class="counter-block">' +
250
- ' <div class="counter minutes">' +
251
- ' <div class="number show n1 tens">0</div>' +
252
- ' <div class="number show n1 units">0</div>' +
253
- ' <div class="number hidden-up n2 tens">0</div>' +
254
- ' <div class="number hidden-up n2 units">0</div>' +
255
- ' </div>' +
256
- ' <div class="counter-caption">minutes</div>' +
257
- ' </div>' +
258
- ' <div class="counter-block">' +
259
- ' <div class="counter seconds">' +
260
- ' <div class="number show n1 tens">0</div>' +
261
- ' <div class="number show n1 units">0</div>' +
262
- ' <div class="number hidden-up n2 tens">0</div>' +
263
- ' <div class="number hidden-up n2 units">0</div>' +
264
- ' </div>' +
265
- ' <div class="counter-caption">seconds</div>' +
266
- ' </div>' +
267
- ' </div>';
268
- var content_notext = ' <div class="counter-group" id="myCounter">' +
269
- ' <div class="counter-block">' +
270
- ' <div class="counter days">' +
271
- ' <div class="number show n1 hundreds">0</div>' +
272
- ' <div class="number show n1 tens">0</div>' +
273
- ' <div class="number show n1 units">0</div>' +
274
- ' <div class="number hidden-up n2 hundreds">0</div>' +
275
- ' <div class="number hidden-up n2 tens">0</div>' +
276
- ' <div class="number hidden-up n2 units">0</div>' +
277
- ' </div>' +
278
- ' </div>' +
279
- ' <div class="counter-block">' +
280
- ' <div class="counter hours">' +
281
- ' <div class="number show n1 tens">0</div>' +
282
- ' <div class="number show n1 units">0</div>' +
283
- ' <div class="number hidden-up n2 tens">0</div>' +
284
- ' <div class="number hidden-up n2 units">0</div>' +
285
- ' </div>' +
286
- ' </div>' +
287
- ' <div class="counter-block">' +
288
- ' <div class="counter minutes">' +
289
- ' <div class="number show n1 tens">0</div>' +
290
- ' <div class="number show n1 units">0</div>' +
291
- ' <div class="number hidden-up n2 tens">0</div>' +
292
- ' <div class="number hidden-up n2 units">0</div>' +
293
- ' </div>' +
294
- ' </div>' +
295
- ' <div class="counter-block">' +
296
- ' <div class="counter seconds">' +
297
- ' <div class="number show n1 tens">0</div>' +
298
- ' <div class="number show n1 units">0</div>' +
299
- ' <div class="number hidden-up n2 tens">0</div>' +
300
- ' <div class="number hidden-up n2 units">0</div>' +
301
- ' </div>' +
302
- ' </div>' +
303
- ' </div>';
304
- return this.each(function () {
305
- var $this = $(this);
306
- var data = $this.data('mbComingsoon');
307
- if (!data) {
308
- if (opt instanceof Date)
309
- options.expiryDate = opt;
310
- else if ($.isPlainObject(opt))
311
- $.extend(options, defaults, opt);
312
- else if (typeof opt == "string")
313
- options.expiryDate = new Date(opt);
314
- if (!options.expiryDate)
315
- throw new Error('Expiry date is required!');
316
-
317
- data = new MbComingsoon(options.expiryDate, $this, options.localization, options.speed, options.callBack, options.gmt, options.showText);
318
- if (options.showText) {
319
- $this.html(content);
320
- } else {
321
- $this.html(content_notext);
322
- }
323
- data.localize();
324
- data.start();
325
- } else if (opt == 'start')
326
- data.start();
327
- else if (opt == 'stop')
328
- data.stop();
329
- else if ($.isPlainObject(opt)) {
330
- if (opt.expiryDate instanceof Date)
331
- data.end = opt.expiryDate;
332
- if ($.isNumeric(opt.interval))
333
- data.interval = opt.interval;
334
- if ($.isNumeric(opt.gmt))
335
- data.gmt = opt.gmt;
336
- if ($.isNumeric(opt.showText))
337
- data.showText = opt.showText;
338
- if ($.isFunction(opt.callBack))
339
- data.callBack = opt.callBack;
340
- if ($.isPlainObject(opt.localization))
341
- this.localize(opt.localization);
342
- }
343
- })
344
- }
345
-
346
- })(jQuery)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/jquery.mb-comingsoon.min.js DELETED
@@ -1 +0,0 @@
1
- (function(e){var t;t=function(t,n,r,i,s,o,u){this.$el=e(n);this.gmt=o;this.showText=u;this.end=t;this.active=false;this.interval=1e3;this.speed=i;if(jQuery.isFunction(s))this.callBack=s;else this.callBack=null;this.localization={days:"days",hours:"hours",minutes:"minutes",seconds:"seconds"};e.extend(this.localization,this.localization,r)};t.prototype={getCounterNumbers:function(){var e={days:{tens:0,units:0,hundreds:0},hours:{tens:0,units:0},minutes:{tens:0,units:0},seconds:{tens:0,units:0}},t=1e3*60*60*24,n=1e3*60*60,r=1e3*60,i=1e3,s=0;var o=new Date;var u=o.getTimezoneOffset()/60+this.gmt;var a=this.end.getTime()-o.getTime()-u*60*6e4;if(a<=0)return e;var f=Math.min(Math.floor(a/t),999);s=a%t;e.days.hundreds=Math.floor(f/100);var l=f%100;e.days.tens=Math.floor(l/10);e.days.units=l%10;var c=Math.floor(s/n);s=s%n;e.hours.tens=Math.floor(c/10);e.hours.units=c%10;var h=Math.floor(s/r);s=s%r;e.minutes.tens=Math.floor(h/10);e.minutes.units=h%10;var p=Math.floor(s/1e3);e.seconds.tens=Math.floor(p/10);e.seconds.units=p%10;return e},updatePart:function(t){var n=this.getCounterNumbers();var r=e("."+t,this.$el);if(t=="days"){this.setDayHundreds(n.days.hundreds>0);if(r.find(".number.hundreds.show").html()!=n[t].hundreds){var i=e(".n1.hundreds",r);var s=e(".n2.hundreds",r);this.scrollNumber(i,s,n[t].hundreds)}}if(r.find(".number.tens.show").html()!=n[t].tens){var i=e(".n1.tens",r);var s=e(".n2.tens",r);this.scrollNumber(i,s,n[t].tens)}if(r.find(".number.units.show").html()!=n[t].units){var i=e(".n1.units",r);var s=e(".n2.units",r);this.scrollNumber(i,s,n[t].units)}},timeOut:function(){var e=new Date;var t=e.getTimezoneOffset()/60+this.gmt;var n=this.end.getTime()-e.getTime()-t*60*6e4;if(n<=0)return true;return false},setDayHundreds:function(t){if(t)e(".counter.days",this.$el).addClass("with-hundreds");else e(".counter.days",this.$el).removeClass("with-hundreds")},updateCounter:function(){this.updatePart("days");this.updatePart("hours");this.updatePart("minutes");this.updatePart("seconds");if(this.timeOut()){this.active=false;if(this.callBack)this.callBack(this)}},localize:function(t){if(e.isPlainObject(t))e.extend(this.localization,this.localization,t);e(".days",this.$el).siblings(".counter-caption").text(this.localization.days);e(".hours",this.$el).siblings(".counter-caption").text(this.localization.hours);e(".minutes",this.$el).siblings(".counter-caption").text(this.localization.minutes);e(".seconds",this.$el).siblings(".counter-caption").text(this.localization.seconds)},start:function(e){if(e)this.interval=e;var t=this.interval;this.active=true;var n=this;setTimeout(function(){n.updateCounter();if(n.active)n.start()},t)},stop:function(){this.active=false},scrollNumber:function(e,t,n){if(e.hasClass("show")){t.removeClass("hidden-down").css("top","-100%").text(n).stop().animate({top:0},this.speed,function(){t.addClass("show")});e.stop().animate({top:"100%"},this.speed,function(){e.removeClass("show").addClass("hidden-down")})}else{e.removeClass("hidden-down").css("top","-100%").text(n).stop().animate({top:0},this.speed,function(){e.addClass("show")});t.stop().animate({top:"100%"},this.speed,function(){t.removeClass("show").addClass("hidden-down")})}}};jQuery.fn.mbComingsoon=function(n){var r={interval:1e3,callBack:null,localization:{days:"days",hours:"hours",minutes:"minutes",seconds:"seconds"},speed:500,gmt:0,showText:1};var i={};var s=' <div class="counter-group" id="myCounter">'+' <div class="counter-block">'+' <div class="counter days">'+' <div class="number show n1 hundreds">0</div>'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 hundreds">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+' <div class="counter-caption">days</div>'+" </div>"+' <div class="counter-block">'+' <div class="counter hours">'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+' <div class="counter-caption">hours</div>'+" </div>"+' <div class="counter-block">'+' <div class="counter minutes">'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+' <div class="counter-caption">minutes</div>'+" </div>"+' <div class="counter-block">'+' <div class="counter seconds">'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+' <div class="counter-caption">seconds</div>'+" </div>"+" </div>";var o=' <div class="counter-group" id="myCounter">'+' <div class="counter-block">'+' <div class="counter days">'+' <div class="number show n1 hundreds">0</div>'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 hundreds">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+" </div>"+' <div class="counter-block">'+' <div class="counter hours">'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+" </div>"+' <div class="counter-block">'+' <div class="counter minutes">'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+" </div>"+' <div class="counter-block">'+' <div class="counter seconds">'+' <div class="number show n1 tens">0</div>'+' <div class="number show n1 units">0</div>'+' <div class="number hidden-up n2 tens">0</div>'+' <div class="number hidden-up n2 units">0</div>'+" </div>"+" </div>"+" </div>";return this.each(function(){var u=e(this);var a=u.data("mbComingsoon");if(!a){if(n instanceof Date)i.expiryDate=n;else if(e.isPlainObject(n))e.extend(i,r,n);else if(typeof n=="string")i.expiryDate=new Date(n);if(!i.expiryDate)throw new Error("Expiry date is required!");a=new t(i.expiryDate,u,i.localization,i.speed,i.callBack,i.gmt,i.showText);if(i.showText){u.html(s)}else{u.html(o)}a.localize();a.start()}else if(n=="start")a.start();else if(n=="stop")a.stop();else if(e.isPlainObject(n)){if(n.expiryDate instanceof Date)a.end=n.expiryDate;if(e.isNumeric(n.interval))a.interval=n.interval;if(e.isNumeric(n.gmt))a.gmt=n.gmt;if(e.isNumeric(n.showText))a.showText=n.showText;if(e.isFunction(n.callBack))a.callBack=n.callBack;if(e.isPlainObject(n.localization))this.localize(n.localization)}})}})(jQuery)
 
assets/js/jquery.ocupload.js DELETED
@@ -1,277 +0,0 @@
1
- /*
2
- One Click Upload - jQuery Plugin
3
- --------------------------------
4
-
5
- Copyright (c) 2008 Michael Mitchell - http://www.michaelmitchell.co.nz
6
- Copyright (c) 2011 Andrey Fedoseev <andrey.fedoseev@gmail.com> -
7
- http://andreyfedoseev.name
8
-
9
- Permission is hereby granted, free of charge, to any person obtaining a copy
10
- of this software and associated documentation files (the "Software"), to deal
11
- in the Software without restriction, including without limitation the rights
12
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
- copies of the Software, and to permit persons to whom the Software is
14
- furnished to do so, subject to the following conditions:
15
-
16
- The above copyright notice and this permission notice shall be included in
17
- all copies or substantial portions of the Software.
18
-
19
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25
- THE SOFTWARE.
26
-
27
- */
28
-
29
- (function ($) {
30
- $.fn.upload = function (options) {
31
- /** Merge the user's options with our defaults */
32
- options = $.extend({
33
- name: 'file',
34
- enctype: 'multipart/form-data',
35
- action: '',
36
- autoSubmit: true,
37
- onSubmit: function () {},
38
- onComplete: function () {},
39
- onSelect: function () {},
40
- params: {}
41
- }, options);
42
-
43
- return new $.ocupload(this, options);
44
- };
45
-
46
- $.ocupload = function (element, options) {
47
- /** Fix scope problems */
48
- var self = this;
49
-
50
- /** A unique id so we can find our elements later */
51
- var id = new Date().getTime().toString().substr(8);
52
-
53
- /** Upload iframe */
54
- var iframe = $("<iframe></iframe>", {
55
- id: "iframe" + id,
56
- name: "iframe" + id
57
- }).css({
58
- display: "none"
59
- });
60
-
61
- /** Form */
62
- var form = $("<form></form>", {
63
- method: "post",
64
- enctype: options.enctype,
65
- action: options.action,
66
- target: "iframe" + id
67
- }).css({
68
- margin: 0,
69
- padding: 0
70
- });
71
-
72
- /** Get cursor type from the object ocupload was assigned to */
73
- /** TODO: Add parameter to init? cursor: auto, cursor: pointer etc */
74
- var element_cursor = element.css('cursor');
75
-
76
- /** File Input */
77
- var input = $("<input>", {
78
- name: options.name,
79
- "type": "file"
80
- }).css({
81
- position: 'absolute',
82
- display: 'block',
83
- cursor: element_cursor,
84
- opacity: 0
85
- });
86
-
87
- /** Put everything together */
88
-
89
- element.wrap("<div></div>");
90
- form.append(input);
91
- element.after(form);
92
- element.after(iframe);
93
-
94
- /** Find the container and make it nice and snug */
95
- var container = element.parent().css({
96
- position: 'relative',
97
- height: element.outerHeight() + 'px',
98
- width: element.outerWidth() + 'px',
99
- overflow: 'hidden',
100
- cursor: element_cursor,
101
- margin: 0,
102
- padding: 0
103
- });
104
-
105
- /** Get input dimensions so we can put it in the right place */
106
- var input_height = input.outerHeight(element.outerHeight());
107
- var input_width = input.outerWidth(element.outerWidth());
108
- input.css({
109
- margin: "0",
110
- padding: "0",
111
- top: "0",
112
- left: "0"
113
- });
114
-
115
- /** Move the input with the mouse to make sure it get clicked! */
116
- container.mousemove(function (e) {
117
- input.css({
118
- top: e.pageY - container.offset().top - (input_height / 2) + 'px',
119
- left: e.pageX - container.offset().left - input_width + 30 + 'px'
120
- });
121
- });
122
-
123
- function onChange() {
124
- /** Do something when a file is selected. */
125
- self.onSelect();
126
-
127
- /** Submit the form automaticly after selecting the file */
128
- if (self.autoSubmit) {
129
- self.submit();
130
- }
131
- }
132
-
133
- /** Watch for file selection */
134
- input.change(onChange);
135
-
136
- /** Methods */
137
- $.extend(this, {
138
- autoSubmit: true,
139
- onSubmit: options.onSubmit,
140
- onComplete: options.onComplete,
141
- onSelect: options.onSelect,
142
-
143
- /** get filename */
144
- filename: function () {
145
- return input.attr('value');
146
- },
147
-
148
- /** get/set params */
149
- params: function (params) {
150
- params = params ? params : false;
151
- if (params) {
152
- options.params = $.extend(options.params, params);
153
- }
154
- else {
155
- return options.params;
156
- }
157
- },
158
-
159
- /** get/set name */
160
- name: function (name) {
161
- name = name ? name : false;
162
- if (name) {
163
- input.attr('name', value);
164
- }
165
- else {
166
- return input.attr('name');
167
- }
168
- },
169
-
170
- /** get/set action */
171
- action: function (action) {
172
- action = action ? action : false;
173
- if (action) {
174
- form.attr('action', action);
175
- }
176
- else {
177
- return form.attr('action');
178
- }
179
- },
180
-
181
- /** get/set enctype */
182
- enctype: function (enctype) {
183
- enctype = enctype ? enctype : false;
184
- if (enctype) {
185
- form.attr('enctype', enctype);
186
- }
187
- else {
188
- return form.attr('enctype');
189
- }
190
- },
191
-
192
- /** set options */
193
- set: function (obj, value) {
194
- value = value ? value : false;
195
- function option(action, value) {
196
- switch (action) {
197
- case 'name':
198
- self.name(value);
199
- break;
200
- case 'action':
201
- self.action(value);
202
- break;
203
- case 'enctype':
204
- self.enctype(value);
205
- break;
206
- case 'params':
207
- self.params(value);
208
- break;
209
- case 'autoSubmit':
210
- self.autoSubmit = value;
211
- break;
212
- case 'onSubmit':
213
- self.onSubmit = value;
214
- break;
215
- case 'onComplete':
216
- self.onComplete = value;
217
- break;
218
- case 'onSelect':
219
- self.onSelect = value;
220
- break;
221
- default:
222
- throw new Error('[jQuery.ocupload.set] \'' + action + '\' is ' +
223
- 'an invalid option.');
224
- }
225
- }
226
-
227
- if (value) {
228
- option(obj, value);
229
- }
230
- else {
231
- $.each(obj,
232
- function (key, value) {
233
- option(key, value);
234
- });
235
- }
236
- },
237
-
238
- /** Submit the form */
239
- submit: function () {
240
- /** Do something before we upload */
241
- this.onSubmit();
242
-
243
- /** add additional parameters before sending */
244
- $.each(options.params, function (key, value) {
245
- field = form.find("input:hidden[name='" + key + "']");
246
- if (!field.length) {
247
- field = $('<input type="hidden">').attr("name",
248
- key).appendTo(form);
249
- }
250
- field.val(value);
251
- });
252
-
253
- /** Submit the actual form */
254
- form.submit();
255
-
256
- /** Do something after we are finished uploading */
257
- iframe.unbind().load(function () {
258
- /** Get a response from the server in plain text */
259
- var myFrame = document.getElementById(iframe.attr('name'));
260
- var response = $(myFrame.contentWindow.document.body).text();
261
-
262
- /** Do something on complete */
263
- self.onComplete(response);
264
- //done :D
265
-
266
- // Reset file input field
267
- input.wrap("<div></div>");
268
- var wrapper = input.parent();
269
- input = $(wrapper.html());
270
- input.change(onChange);
271
- wrapper.replaceWith(input);
272
-
273
- });
274
- }
275
- });
276
- };
277
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/{css → less}/_icons.less RENAMED
File without changes
assets/{css → less}/admin/admin.less RENAMED
@@ -7,12 +7,35 @@
7
  // admin variables
8
  @primary-icon-color: #666666;
9
  @primary-icon-hover-color: #00a0d2;
10
- .rwmb-field {
11
- margin: 20px 0 20px 0;
 
12
  }
13
 
14
- .rwmb-field .rwmb-input .rwmb-label {
15
- margin-top: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  }
17
 
18
  .lp-nav-tab-wrapper {
@@ -32,29 +55,6 @@
32
  vertical-align: top;
33
  }
34
 
35
- .post-type-lp_course {
36
- & .column-price, & .column-students {
37
- width: 10%;
38
- }
39
-
40
- #course_curriculum .curriculum-section-items .lp-item-empty td.section-item-input {
41
- padding-left: 40px;
42
- &.hover {
43
- padding-left: 0;
44
- }
45
- }
46
-
47
- .type-lp_course {
48
-
49
- &.status-pending {
50
- .row-actions .view {
51
- display: none;
52
- }
53
- }
54
- }
55
-
56
- }
57
-
58
  #learn-press-admin-settings {
59
  #learn_press_email_formats {
60
  margin-bottom: 10px;
@@ -98,6 +98,9 @@
98
  width: 100%;
99
  box-sizing: border-box;
100
  opacity: 0;
 
 
 
101
  &:before {
102
  content: '';
103
  position: absolute;
@@ -114,12 +117,21 @@
114
  &.ready {
115
  opacity: 1;
116
  }
 
 
 
 
 
 
 
117
  }
118
  &.no-subtabs {
119
  .learn-press-settings-wrap {
120
  float: none;
121
  margin-left: 0;
122
  padding-left: 25px;
 
 
123
  &:before {
124
  display: none;
125
  }
@@ -177,6 +189,53 @@
177
  }
178
  }
179
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  /* message box */
181
  #learn-press-message-box-block {
182
  position: fixed;
@@ -259,10 +318,6 @@
259
  min-width: 250px;
260
  }
261
 
262
- .description {
263
- margin-top: 5px;
264
- }
265
-
266
  .dashed-placeholder {
267
  border: 2px dashed #999;
268
  padding: 10px;
@@ -270,6 +325,33 @@
270
 
271
  .learn-press-message {
272
  position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  .learn-press-admin-notice-dismiss {
274
  position: absolute;
275
  display: inline-block;
@@ -314,7 +396,11 @@ li.quiz, li.lesson, li.quick_lesson, li.quick_quiz {
314
  width: 15%;
315
  }
316
 
317
- /**/
 
 
 
 
318
  #lpr-block {
319
  position: fixed;
320
  top: 0;
@@ -374,7 +460,7 @@ li.quiz, li.lesson, li.quick_lesson, li.quick_quiz {
374
  .lpr-question tr.lpr-disabled .dashicons-trash,
375
  .lpr-question tr.lpr-disabled .dashicons-sort {
376
  display: none;
377
- }
378
 
379
  /*
380
  * Add on page
@@ -1755,7 +1841,8 @@ body.post-type-lp_question #question_answer_ .inside {
1755
 
1756
  .post-type-lp_order #submitpost .misc-pub-section label {
1757
  display: block;
1758
- font-weight: bold;
 
1759
  }
1760
 
1761
  #learn-press-order {
@@ -2158,7 +2245,7 @@ input.regular-text[id^="learn-press-emails"] {
2158
 
2159
  .learn-press-tab-content {
2160
  > li {
2161
- padding: 0 20px 0px 20px;
2162
  float: left;
2163
  width: 100%;
2164
  margin-right: -100%;
@@ -2215,6 +2302,33 @@ input.regular-text[id^="learn-press-emails"] {
2215
  }
2216
  }
2217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2218
  @keyframes learn-press-meta-box-tabs-initialize-animation {
2219
  0% {
2220
  opacity: 0;
@@ -2273,4 +2387,4 @@ input.regular-text[id^="learn-press-emails"] {
2273
  100% {
2274
  opacity: 0;
2275
  }
2276
- }
7
  // admin variables
8
  @primary-icon-color: #666666;
9
  @primary-icon-hover-color: #00a0d2;
10
+
11
+ input:focus::-webkit-input-placeholder {
12
+ color: transparent !important;
13
  }
14
 
15
+ input:focus::-moz-placeholder {
16
+ color: transparent !important;
17
+ }
18
+
19
+ input:focus:-moz-placeholder {
20
+ color: transparent !important;
21
+ }
22
+
23
+ .rwmb-field {
24
+ margin: 20px 0 20px 0;
25
+ .rwmb-input {
26
+ .rwmb-label {
27
+ margin-top: 0;
28
+ }
29
+ .description {
30
+ margin-top: 5px;
31
+ &.option-desc {
32
+ font-weight: normal;
33
+ margin: 8px 0 10px 24px;
34
+ font-size: smaller;
35
+ font-style: italic;
36
+ }
37
+ }
38
+ }
39
  }
40
 
41
  .lp-nav-tab-wrapper {
55
  vertical-align: top;
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  #learn-press-admin-settings {
59
  #learn_press_email_formats {
60
  margin-bottom: 10px;
98
  width: 100%;
99
  box-sizing: border-box;
100
  opacity: 0;
101
+ input[name="learn_press_auto_redirect_message"] {
102
+ width: 80%;
103
+ }
104
  &:before {
105
  content: '';
106
  position: absolute;
117
  &.ready {
118
  opacity: 1;
119
  }
120
+ #learn-press-reset-settings {
121
+ float: right;
122
+ opacity: 0.5;
123
+ &:hover {
124
+ opacity: 1;
125
+ }
126
+ }
127
  }
128
  &.no-subtabs {
129
  .learn-press-settings-wrap {
130
  float: none;
131
  margin-left: 0;
132
  padding-left: 25px;
133
+ padding-right: 25px;
134
+
135
  &:before {
136
  display: none;
137
  }
189
  }
190
  }
191
 
192
+ .learnpress_page_learn-press-settings {
193
+ .select2-result {
194
+ .select2-result-label {
195
+ position: relative;
196
+ &:before {
197
+ display: inline-block;
198
+ border-bottom: 1px solid #23282d;
199
+ width: 20px;
200
+ position: absolute;
201
+ top: 50%;
202
+ left: 8px;
203
+ }
204
+ &:hover {
205
+ &:before {
206
+ border-color: #FFF;
207
+ }
208
+ }
209
+ }
210
+ &.level-1 {
211
+ .select2-result-label {
212
+ padding-left: 35px;
213
+ &:before {
214
+ content: '';
215
+ }
216
+ }
217
+ }
218
+ &.level-2 {
219
+ .select2-result-label {
220
+ padding-left: 60px;
221
+ &:before {
222
+ left: 35px;
223
+ content: '';
224
+ }
225
+ }
226
+ }
227
+ &.level-3 {
228
+ .select2-result-label {
229
+ padding-left: 85px;
230
+ &:before {
231
+ left: 60px;
232
+ content: '';
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+
239
  /* message box */
240
  #learn-press-message-box-block {
241
  position: fixed;
318
  min-width: 250px;
319
  }
320
 
 
 
 
 
321
  .dashed-placeholder {
322
  border: 2px dashed #999;
323
  padding: 10px;
325
 
326
  .learn-press-message {
327
  position: relative;
328
+ background: #FFF;
329
+ border-left: 5px solid #00A0D2;
330
+ padding: 10px 10px 0px 10px;
331
+ margin-bottom: 20px;
332
+ overflow: hidden;
333
+ color: #777;
334
+ button {
335
+ float: right;
336
+ }
337
+ p {
338
+ margin: 0 0 10px;
339
+ }
340
+ &:after {
341
+ clear: both;
342
+ content: '';
343
+ display: block;
344
+ }
345
+ &.notice {
346
+ border-left-color: #b3d20a;
347
+ }
348
+ &.lp-error,
349
+ &.error {
350
+ border-left-color: #b81c23;
351
+ }
352
+ ul {
353
+ list-style-type: none;
354
+ }
355
  .learn-press-admin-notice-dismiss {
356
  position: absolute;
357
  display: inline-block;
396
  width: 15%;
397
  }
398
 
399
+ .tools-button {
400
+ text-align: right;
401
+ }
402
+
403
+ /*
404
  #lpr-block {
405
  position: fixed;
406
  top: 0;
460
  .lpr-question tr.lpr-disabled .dashicons-trash,
461
  .lpr-question tr.lpr-disabled .dashicons-sort {
462
  display: none;
463
+ }*/
464
 
465
  /*
466
  * Add on page
1841
 
1842
  .post-type-lp_order #submitpost .misc-pub-section label {
1843
  display: block;
1844
+ font-weight: 600;
1845
+ margin-bottom: 8px;
1846
  }
1847
 
1848
  #learn-press-order {
2245
 
2246
  .learn-press-tab-content {
2247
  > li {
2248
+ padding: 0 20px 10px 20px;
2249
  float: left;
2250
  width: 100%;
2251
  margin-right: -100%;
2302
  }
2303
  }
2304
 
2305
+
2306
+ /* Metabox Widget */
2307
+ #widgets-right .widgets-holder-wrap {
2308
+ .rwmb-label {
2309
+ margin-bottom: 5px;
2310
+ }
2311
+ .rwmb-input{
2312
+ input[type="text"]{
2313
+ width: 100%;
2314
+ }
2315
+ }
2316
+ .description {
2317
+ padding: 0;
2318
+ margin-top: 5px;
2319
+ font-size: small;
2320
+ font-style: italic;
2321
+ }
2322
+ }
2323
+
2324
+ .outdated-readmore-link{
2325
+ font-style: italic;
2326
+ }
2327
+
2328
+ .learn-press-message.notice-warning {
2329
+ border-left-color: #ffb900;
2330
+ }
2331
+
2332
  @keyframes learn-press-meta-box-tabs-initialize-animation {
2333
  0% {
2334
  opacity: 0;
2387
  100% {
2388
  opacity: 0;
2389
  }
2390
+ }
assets/{css → less}/admin/attributes.less RENAMED
@@ -1,4 +1,4 @@
1
- .course-attributes{
2
  margin: 20px 0;
3
  .learn-press-attribute {
4
  border: 1px solid #DDD;
@@ -14,4 +14,5 @@
14
  border-top: 1px solid #DDD;
15
  }
16
  }
17
- }
 
1
+ .course-attributes {
2
  margin: 20px 0;
3
  .learn-press-attribute {
4
  border: 1px solid #DDD;
14
  border-top: 1px solid #DDD;
15
  }
16
  }
17
+ }
18
+
assets/{css → less}/admin/course-editor.less RENAMED
File without changes
{inc/libraries/meta-box/css → assets/less/admin}/index.php RENAMED
File without changes
assets/{css → less}/admin/meta-box-course.less RENAMED
@@ -3,7 +3,10 @@
3
  .rwmb-duration-wrapper select {
4
  vertical-align: baseline;
5
  }
6
-
 
 
 
7
  .post-type-lp_course {
8
  #postdivric,
9
  #submitpost {
@@ -30,26 +33,36 @@
30
  }
31
  }
32
 
33
- #learn-press-button-toggle-editor {
34
- margin: 20px 0 0;
35
- }
36
-
37
- #course_curriculum {
38
  border: none;
39
  background-color: transparent;
 
40
  }
41
 
42
- #course_curriculum .handlediv,
43
- #course_curriculum .hndle {
44
- display: none;
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
- #course_curriculum .inside {
48
- margin: 0;
49
- padding: 0;
50
  }
51
 
52
- #course_curriculum .curriculum-heading {
53
  margin: 0 0 20px 0;
54
  padding: 10px 20px;
55
  background-color: #FFF;
@@ -57,7 +70,7 @@
57
  border: 1px solid #DDD;
58
  }
59
 
60
- #course_curriculum .curriculum-heading .description {
61
  font-weight: normal;
62
  color: #999;
63
  display: block;
@@ -65,14 +78,14 @@
65
  margin-top: 10px;;
66
  }
67
 
68
- #course_curriculum .curriculum-heading .items-toggle {
69
  float: right;
70
  margin: -33px 7px 0 0;
71
  line-height: 1;
72
  box-shadow: none;
73
  }
74
 
75
- #course_curriculum .curriculum-heading .items-toggle a {
76
  -webkit-box-shadow: none;
77
  -moz-box-shadow: none;
78
  box-shadow: none;
@@ -80,27 +93,27 @@
80
 
81
  }
82
 
83
- #course_curriculum .curriculum-sections {
84
  margin: 0;
85
  background-color: #FFF;
86
  border-bottom: 1px solid #DDD;
87
  }
88
 
89
- #course_curriculum .curriculum-section {
90
  margin: -1px 0 0 0;
91
  background-color: #FFF;
92
  border-bottom: 1px solid #DDD;
93
  position: relative;
94
  }
95
 
96
- #course_curriculum .curriculum-section.ui-sortable-placeholder {
97
  background-image: url("../../images/stripe.png");
98
  visibility: visible !important;
99
  border: 1px solid #DDD;
100
  border-bottom: none;
101
  }
102
 
103
- #course_curriculum .curriculum-section-head {
104
  border: 1px solid #DDD;
105
  background-color: #F9F9F9;
106
  border-bottom: none;
@@ -109,22 +122,22 @@
109
  padding: 3px 20px;
110
  }
111
 
112
- #course_curriculum .curriculum-section-head input {
113
  background-color: #F9F9F9;
114
  }
115
 
116
- #course_curriculum .curriculum-section-head .lp-section-actions {
117
  float: right;
118
  margin: 14px 0;
119
  visibility: hidden;
120
  position: relative;
121
  }
122
 
123
- #course_curriculum .curriculum-section:not(.lp-empty-section) .curriculum-section-head:hover .lp-section-actions {
124
  visibility: visible;
125
  }
126
 
127
- #course_curriculum .curriculum-section .lp-section-actions a {
128
  vertical-align: middle;
129
  color: #666666;
130
  width: 24px;
@@ -132,21 +145,21 @@
132
  box-shadow: none;
133
  }
134
 
135
- #course_curriculum .curriculum-section .lp-section-actions a[data-action="expand"] {
136
  line-height: 28px;
137
  }
138
 
139
- #course_curriculum .curriculum-section .lp-section-actions a:before {
140
  width: 24px;
141
  height: 24px;
142
  font-size: 24px;
143
  }
144
 
145
- #course_curriculum .curriculum-section .lp-section-actions a:hover {
146
  color: #00a0d2;
147
  }
148
 
149
- #course_curriculum .curriculum-section .curriculum-section-head .lp-section-actions .move {
150
  cursor: url("../../../assets/images/openhand.cur") 7 5, default;
151
  position: absolute;
152
  right: -15px;
@@ -156,7 +169,7 @@
156
  width: 20px;
157
  }
158
 
159
- #course_curriculum .curriculum-section-content {
160
  border: 1px solid #DDD;
161
  padding: 20px;
162
  border-bottom-width: 0;
@@ -164,11 +177,11 @@
164
  box-sizing: border-box;
165
  }
166
 
167
- #course_curriculum .curriculum-section.ui-sortable-helper {
168
  border-bottom: 1px solid #DDD;
169
  }
170
 
171
- #course_curriculum .curriculum-section-head .lp-section-name {
172
  border: none;
173
  outline: none;
174
  box-shadow: none;
@@ -180,87 +193,87 @@
180
  height: 50px;
181
  }
182
 
183
- #course_curriculum .curriculum-section-head .lp-section-name:focus {
184
  color: #444;
185
  }
186
 
187
- #course_curriculum .curriculum-section.lp-empty-section .curriculum-section-content {
188
  _display: none;
189
  }
190
 
191
- #course_curriculum .curriculum-section-items {
192
  border-collapse: collapse;
193
  width: 100%;
194
  }
195
 
196
- #course_curriculum .curriculum-section-items .lp-section-item {
197
  border: 1px dashed #DDD;
198
  margin: -1px 0 0 0;
199
  padding: 5px 0;
200
  background-color: #FFF;
201
  }
202
 
203
- #course_curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1),
204
- #course_curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1) .section-item-input input {
205
  background-color: #FCFCFC;
206
  }
207
 
208
- #course_curriculum .curriculum-section-items .lp-section-item .lp-item-actions {
209
  margin: 0;
210
  float: right;
211
  position: relative;
212
  }
213
 
214
- #course_curriculum .curriculum-section-items .lp-section-item .lp-item-actions a {
215
  vertical-align: middle;
216
  color: #666;
217
  margin-top: -2px;
218
  box-shadow: none;
219
  }
220
 
221
- #course_curriculum .curriculum-section-items .lp-section-item .lp-item-actions a:hover {
222
  color: #00a0d2;
223
  }
224
 
225
- #course_curriculum .curriculum-section-items .lp-section-item[data-item_id=""] .lp-edit {
226
  display: none;
227
  }
228
 
229
- #course_curriculum .curriculum-section-items .lp-section-item.lp-item-empty .lp-item-actions {
230
  display: none;
231
  }
232
 
233
- #course_curriculum .lp-section-item.ui-sortable-helper td {
234
 
235
  }
236
 
237
- #course_curriculum .lp-section-item.ui-sortable-placeholder {
238
  visibility: visible !important;
239
  }
240
 
241
- #course_curriculum .lp-section-item.ui-sortable-placeholder td {
242
  background-image: url("../../../assets/images/stripe.png");
243
  border-bottom: none;
244
  }
245
 
246
- #course_curriculum .lp-item-actions > * {
247
  visibility: hidden;
248
  }
249
 
250
- #course_curriculum .lp-item-actions > a {
251
  }
252
 
253
- #course_curriculum .item-bulk-actions {
254
  text-align: right;
255
  margin-top: 0;
256
  margin-bottom: 15px;
257
  }
258
 
259
- #course_curriculum .lp-section-item:not(.lp-item-empty):hover .lp-item-actions > * {
260
  visibility: visible;
261
  }
262
 
263
- #course_curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty) .item-checkbox {
264
  display: inline-block;
265
  height: 34px;
266
  border: none;
@@ -271,32 +284,32 @@
271
  visibility: visible;
272
  }
273
 
274
- #course_curriculum .curriculum-section-items .lp-section-item .item-checkbox input {
275
  opacity: 0.4;
276
  }
277
 
278
- #course_curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty):hover .item-checkbox input {
279
  opacity: 1;
280
  }
281
 
282
- #course_curriculum .lp-item-lp_lesson .handle.learn-press-icon:before {
283
  content: "\e900";
284
  }
285
 
286
- #course_curriculum .lp-item-lp_quiz .handle.learn-press-icon:before {
287
  content: "\e901";
288
  }
289
 
290
- #course_curriculum .lp-section-item.lp-item-new .handle {
291
  color: #999;
292
  }
293
 
294
- #course_curriculum .curriculum-section-items .lp-section-item:hover,
295
- #course_curriculum .curriculum-section-items .lp-section-item:hover input.lp-item-name {
296
  background-color: #F9F9F9;
297
  }
298
 
299
- #course_curriculum .lp-section-item .handle {
300
  width: 32px;
301
  height: 32px;
302
  display: inline-block;
@@ -307,15 +320,15 @@
307
  color: #00A0D2;
308
  }
309
 
310
- #course_curriculum .lp-section-item.remove input.lp-item-name {
311
  color: #FF0000;
312
  }
313
 
314
- #course_curriculum .lp-section-item.ui-sortable-helper {
315
 
316
  }
317
 
318
- #course_curriculum .lp-section-item input.lp-item-name {
319
  color: #777;
320
  border: none;
321
  box-shadow: none;
@@ -328,7 +341,7 @@
328
  white-space: nowrap;
329
  }
330
 
331
- #course_curriculum .lp-section-describe {
332
  border: none;
333
  box-shadow: none;
334
  color: #999;
@@ -338,12 +351,12 @@
338
  padding-left: 0;
339
  }
340
 
341
- #course_curriculum .curriculum-section-items .lp-section-item input.lp-item-name:focus,
342
- #course_curriculum input:focus {
343
  color: #444;
344
  }
345
 
346
- #course_curriculum .lp-section-item .section-item-icon {
347
  width: 32px;
348
  white-space: nowrap;
349
  }
@@ -361,19 +374,19 @@
361
  border: 1px solid transparent;
362
  }
363
 
364
- #course_curriculum .lp-section-item .learn-press-icon.item-lp_quiz:before {
365
  content: "\f469";
366
  }
367
 
368
- #course_curriculum .lp-section-item .learn-press-icon.item-lp_lesson:before {
369
  content: "\f330";
370
  }
371
 
372
- #course_curriculum .lp-section-item .learn-press-icon.item-selected,
373
- #course_curriculum .lp-section-item[data-item_id=""] .learn-press-icon:hover {
374
  }
375
 
376
- #course_curriculum .lp-section-item td {
377
  height: 30px;
378
  }
379
 
@@ -530,26 +543,23 @@
530
 
531
  .learn-press-dropdown-item-types {
532
  position: relative;
533
- }
534
-
535
- .learn-press-dropdown-item-types > ul {
536
- display: none;
537
- position: absolute;
538
- top: 0px;
539
- z-index: 10;
540
- background: #FFF;
541
- border: 1px solid #DDD;
542
- left: 100%;
543
- margin-left: -1px;
544
- }
545
-
546
- .learn-press-dropdown-item-types > ul > li {
547
- margin: 0;
548
- display: table-cell;
549
- }
550
-
551
- .learn-press-dropdown-item-types > ul > li span {
552
- border-width: 0 !important;
553
  }
554
 
555
  tr[data-item_id=""] .learn-press-dropdown-item-types:hover > ul,
@@ -583,7 +593,14 @@ tr.focus .learn-press-dropdown-item-types > span.learn-press-icon {
583
  color: #0085ba;
584
  }
585
 
 
 
 
 
586
 
 
 
 
587
 
588
  .post-type-lp_course {
589
  #switch-course-tabs,
@@ -591,91 +608,6 @@ tr.focus .learn-press-dropdown-item-types > span.learn-press-icon {
591
  float: right;
592
  margin-left: 10px;
593
  }
594
- &.enable-course-tabs {
595
- #post-body-content {
596
- margin-bottom: 0;
597
- }
598
- #normal-sortables {
599
- .postbox {
600
- _visibility: hidden;
601
- float: left;
602
- margin-right: -100%;
603
- width: 100%;
604
- box-sizing: border-box;
605
- height: 0;
606
- overflow: hidden;
607
- border-width: 0;
608
- &.active {
609
- height: auto;
610
- border-width: 1px;
611
- }
612
- .handlediv, .hndle {
613
- display: none;
614
- }
615
- }
616
- }
617
- #course-tabs {
618
- background: #FFF;
619
- padding: 10px;
620
- margin-bottom: 0;
621
- border: 1px solid #DDD;
622
- border-bottom: none;
623
- &:after {
624
- display: block;
625
- clear: both;
626
- content: '';
627
- }
628
- &.ui-sortable:not(.ui-sortable-disabled) {
629
- li.ui-sortable-handle {
630
- position: relative;
631
- a {
632
- border: 1px solid #ddd;
633
- padding: 0px 5px;
634
- margin: 0 5px;
635
- color: #DDD;
636
- background: #FFF;
637
- }
638
- &:after {
639
- content: '';
640
- position: absolute;
641
- top: 0;
642
- left: 0;
643
- width: 100%;
644
- height: 100%;
645
- cursor: move;
646
- }
647
- }
648
- }
649
- li {
650
- float: left;
651
- margin-bottom: 0;
652
- a {
653
- display: block;
654
- padding: 0 15px 0 0;
655
- text-decoration: none;
656
- outline: none;
657
- box-shadow: none;
658
- }
659
- &.active {
660
- a {
661
- font-weight: bold;
662
- }
663
- }
664
- }
665
- li#switch-course-metaboxes {
666
- float: right;
667
- #complete-reorder-course-tabs {
668
- display: none;
669
- }
670
- a {
671
- padding-right: 0;
672
- color: #FF0000;
673
- display: inline-block;
674
- margin-left: 15px;
675
- }
676
- }
677
- }
678
- }
679
  }
680
 
681
  /*
3
  .rwmb-duration-wrapper select {
4
  vertical-align: baseline;
5
  }
6
+ #learn-press-toggle-course-results{
7
+ display: block;margin-bottom:10px;
8
+ a{box-shadow: none;}
9
+ }
10
  .post-type-lp_course {
11
  #postdivric,
12
  #submitpost {
33
  }
34
  }
35
 
36
+ #lp-course-curriculum {
 
 
 
 
37
  border: none;
38
  background-color: transparent;
39
+ margin: 20px 0;
40
  }
41
 
42
+ .post-type-lp_course {
43
+ & .column-price, & .column-students {
44
+ width: 10%;
45
+ }
46
+
47
+ #lp-course-curriculum .curriculum-section-items .lp-item-empty td.section-item-input {
48
+ padding-left: 40px;
49
+ &.hover {
50
+ padding-left: 0;
51
+ }
52
+ }
53
+
54
+ .type-lp_course {
55
+
56
+ &.status-pending {
57
+ .row-actions .view {
58
+ display: none;
59
+ }
60
+ }
61
+ }
62
 
 
 
 
63
  }
64
 
65
+ #lp-course-curriculum .curriculum-heading {
66
  margin: 0 0 20px 0;
67
  padding: 10px 20px;
68
  background-color: #FFF;
70
  border: 1px solid #DDD;
71
  }
72
 
73
+ #lp-course-curriculum .curriculum-heading .description {
74
  font-weight: normal;
75
  color: #999;
76
  display: block;
78
  margin-top: 10px;;
79
  }
80
 
81
+ #lp-course-curriculum .curriculum-heading .items-toggle {
82
  float: right;
83
  margin: -33px 7px 0 0;
84
  line-height: 1;
85
  box-shadow: none;
86
  }
87
 
88
+ #lp-course-curriculum .curriculum-heading .items-toggle a {
89
  -webkit-box-shadow: none;
90
  -moz-box-shadow: none;
91
  box-shadow: none;
93
 
94
  }
95
 
96
+ #lp-course-curriculum .curriculum-sections {
97
  margin: 0;
98
  background-color: #FFF;
99
  border-bottom: 1px solid #DDD;
100
  }
101
 
102
+ #lp-course-curriculum .curriculum-section {
103
  margin: -1px 0 0 0;
104
  background-color: #FFF;
105
  border-bottom: 1px solid #DDD;
106
  position: relative;
107
  }
108
 
109
+ #lp-course-curriculum .curriculum-section.ui-sortable-placeholder {
110
  background-image: url("../../images/stripe.png");
111
  visibility: visible !important;
112
  border: 1px solid #DDD;
113
  border-bottom: none;
114
  }
115
 
116
+ #lp-course-curriculum .curriculum-section-head {
117
  border: 1px solid #DDD;
118
  background-color: #F9F9F9;
119
  border-bottom: none;
122
  padding: 3px 20px;
123
  }
124
 
125
+ #lp-course-curriculum .curriculum-section-head input {
126
  background-color: #F9F9F9;
127
  }
128
 
129
+ #lp-course-curriculum .curriculum-section-head .lp-section-actions {
130
  float: right;
131
  margin: 14px 0;
132
  visibility: hidden;
133
  position: relative;
134
  }
135
 
136
+ #lp-course-curriculum .curriculum-section:not(.lp-empty-section) .curriculum-section-head:hover .lp-section-actions {
137
  visibility: visible;
138
  }
139
 
140
+ #lp-course-curriculum .curriculum-section .lp-section-actions a {
141
  vertical-align: middle;
142
  color: #666666;
143
  width: 24px;
145
  box-shadow: none;
146
  }
147
 
148
+ #lp-course-curriculum .curriculum-section .lp-section-actions a[data-action="expand"] {
149
  line-height: 28px;
150
  }
151
 
152
+ #lp-course-curriculum .curriculum-section .lp-section-actions a:before {
153
  width: 24px;
154
  height: 24px;
155
  font-size: 24px;
156
  }
157
 
158
+ #lp-course-curriculum .curriculum-section .lp-section-actions a:hover {
159
  color: #00a0d2;
160
  }
161
 
162
+ #lp-course-curriculum .curriculum-section .curriculum-section-head .lp-section-actions .move {
163
  cursor: url("../../../assets/images/openhand.cur") 7 5, default;
164
  position: absolute;
165
  right: -15px;
169
  width: 20px;
170
  }
171
 
172
+ #lp-course-curriculum .curriculum-section-content {
173
  border: 1px solid #DDD;
174
  padding: 20px;
175
  border-bottom-width: 0;
177
  box-sizing: border-box;
178
  }
179
 
180
+ #lp-course-curriculum .curriculum-section.ui-sortable-helper {
181
  border-bottom: 1px solid #DDD;
182
  }
183
 
184
+ #lp-course-curriculum .curriculum-section-head .lp-section-name {
185
  border: none;
186
  outline: none;
187
  box-shadow: none;
193
  height: 50px;
194
  }
195
 
196
+ #lp-course-curriculum .curriculum-section-head .lp-section-name:focus {
197
  color: #444;
198
  }
199
 
200
+ #lp-course-curriculum .curriculum-section.lp-empty-section .curriculum-section-content {
201
  _display: none;
202
  }
203
 
204
+ #lp-course-curriculum .curriculum-section-items {
205
  border-collapse: collapse;
206
  width: 100%;
207
  }
208
 
209
+ #lp-course-curriculum .curriculum-section-items .lp-section-item {
210
  border: 1px dashed #DDD;
211
  margin: -1px 0 0 0;
212
  padding: 5px 0;
213
  background-color: #FFF;
214
  }
215
 
216
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1),
217
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:nth-child(2n+1) .section-item-input input {
218
  background-color: #FCFCFC;
219
  }
220
 
221
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .lp-item-actions {
222
  margin: 0;
223
  float: right;
224
  position: relative;
225
  }
226
 
227
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .lp-item-actions a {
228
  vertical-align: middle;
229
  color: #666;
230
  margin-top: -2px;
231
  box-shadow: none;
232
  }
233
 
234
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .lp-item-actions a:hover {
235
  color: #00a0d2;
236
  }
237
 
238
+ #lp-course-curriculum .curriculum-section-items .lp-section-item[data-item_id=""] .lp-edit {
239
  display: none;
240
  }
241
 
242
+ #lp-course-curriculum .curriculum-section-items .lp-section-item.lp-item-empty .lp-item-actions {
243
  display: none;
244
  }
245
 
246
+ #lp-course-curriculum .lp-section-item.ui-sortable-helper td {
247
 
248
  }
249
 
250
+ #lp-course-curriculum .lp-section-item.ui-sortable-placeholder {
251
  visibility: visible !important;
252
  }
253
 
254
+ #lp-course-curriculum .lp-section-item.ui-sortable-placeholder td {
255
  background-image: url("../../../assets/images/stripe.png");
256
  border-bottom: none;
257
  }
258
 
259
+ #lp-course-curriculum .lp-item-actions > * {
260
  visibility: hidden;
261
  }
262
 
263
+ #lp-course-curriculum .lp-item-actions > a {
264
  }
265
 
266
+ #lp-course-curriculum .item-bulk-actions {
267
  text-align: right;
268
  margin-top: 0;
269
  margin-bottom: 15px;
270
  }
271
 
272
+ #lp-course-curriculum .lp-section-item:not(.lp-item-empty):hover .lp-item-actions > * {
273
  visibility: visible;
274
  }
275
 
276
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty) .item-checkbox {
277
  display: inline-block;
278
  height: 34px;
279
  border: none;
284
  visibility: visible;
285
  }
286
 
287
+ #lp-course-curriculum .curriculum-section-items .lp-section-item .item-checkbox input {
288
  opacity: 0.4;
289
  }
290
 
291
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:not(.lp-item-empty):hover .item-checkbox input {
292
  opacity: 1;
293
  }
294
 
295
+ #lp-course-curriculum .lp-item-lp_lesson .handle.learn-press-icon:before {
296
  content: "\e900";
297
  }
298
 
299
+ #lp-course-curriculum .lp-item-lp_quiz .handle.learn-press-icon:before {
300
  content: "\e901";
301
  }
302
 
303
+ #lp-course-curriculum .lp-section-item.lp-item-new .handle {
304
  color: #999;
305
  }
306
 
307
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:hover,
308
+ #lp-course-curriculum .curriculum-section-items .lp-section-item:hover input.lp-item-name {
309
  background-color: #F9F9F9;
310
  }
311
 
312
+ #lp-course-curriculum .lp-section-item .handle {
313
  width: 32px;
314
  height: 32px;
315
  display: inline-block;
320
  color: #00A0D2;
321
  }
322
 
323
+ #lp-course-curriculum .lp-section-item.remove input.lp-item-name {
324
  color: #FF0000;
325
  }
326
 
327
+ #lp-course-curriculum .lp-section-item.ui-sortable-helper {
328
 
329
  }
330
 
331
+ #lp-course-curriculum .lp-section-item input.lp-item-name {
332
  color: #777;
333
  border: none;
334
  box-shadow: none;
341
  white-space: nowrap;
342
  }
343
 
344
+ #lp-course-curriculum .lp-section-describe {
345
  border: none;
346
  box-shadow: none;
347
  color: #999;
351
  padding-left: 0;
352
  }
353
 
354
+ #lp-course-curriculum .curriculum-section-items .lp-section-item input.lp-item-name:focus,
355
+ #lp-course-curriculum input:focus {
356
  color: #444;
357
  }
358
 
359
+ #lp-course-curriculum .lp-section-item .section-item-icon {
360
  width: 32px;
361
  white-space: nowrap;
362
  }
374
  border: 1px solid transparent;
375
  }
376
 
377
+ #lp-course-curriculum .lp-section-item .learn-press-icon.item-lp_quiz:before {
378
  content: "\f469";
379
  }
380
 
381
+ #lp-course-curriculum .lp-section-item .learn-press-icon.item-lp_lesson:before {
382
  content: "\f330";
383
  }
384
 
385
+ #lp-course-curriculum .lp-section-item .learn-press-icon.item-selected,
386
+ #lp-course-curriculum .lp-section-item[data-item_id=""] .learn-press-icon:hover {
387
  }
388
 
389
+ #lp-course-curriculum .lp-section-item td {
390
  height: 30px;
391
  }
392
 
543
 
544
  .learn-press-dropdown-item-types {
545
  position: relative;
546
+ > ul {
547
+ display: none;
548
+ position: absolute;
549
+ top: 0px;
550
+ z-index: 10;
551
+ background: #FFF;
552
+ border: 1px solid #DDD;
553
+ left: 100%;
554
+ margin-left: -1px;
555
+ > li {
556
+ margin: 0;
557
+ display: table-cell;
558
+ span {
559
+ border-width: 0 !important;
560
+ }
561
+ }
562
+ }
 
 
 
563
  }
564
 
565
  tr[data-item_id=""] .learn-press-dropdown-item-types:hover > ul,
593
  color: #0085ba;
594
  }
595
 
596
+ .learn-press-course-attributes {
597
+ margin: 20px 0;
598
+ .course-attribute-taxonomy {
599
+ li {
600
 
601
+ }
602
+ }
603
+ }
604
 
605
  .post-type-lp_course {
606
  #switch-course-tabs,
608
  float: right;
609
  margin-left: 10px;
610
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
611
  }
612
 
613
  /*
{inc/libraries/meta-box/css/jqueryui → assets/less}/index.php RENAMED
File without changes
assets/{css → less}/learnpress.less RENAMED
@@ -1,3 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  @icon-url: '../fonts/lp-icons';
2
  @font-face {
3
  font-family: 'lp-icons';
@@ -304,6 +320,15 @@
304
  }
305
  }
306
 
 
 
 
 
 
 
 
 
 
307
  .learn-press-notice .button {
308
  float: right;
309
  }
@@ -312,7 +337,7 @@
312
  margin-bottom: 20px;
313
  }
314
 
315
- //
316
 
317
  #learn-press-course-curriculum {
318
  ul.curriculum-sections,
@@ -363,6 +388,7 @@
363
  border-radius: 5px;
364
  vertical-align: middle;
365
  margin-left: 5px;
 
366
  &:before {
367
  content: "\ea0b";
368
  margin: 0 auto;
@@ -404,6 +430,59 @@
404
  .lp-icon {
405
  display: none;
406
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  &.viewable {
408
  cursor: pointer;
409
  &:hover {
@@ -438,20 +517,7 @@
438
  content: '';
439
  }
440
  }
441
- &.item-has-status .item-status {
442
- display: inline-block;
443
- background: #d6d6d6;
444
- margin-left: 5px;
445
- &:before {
446
- content: '\ea10';
447
- color: #FFF;
448
- }
449
- }
450
- &.item-has-status.item-completed {
451
- .item-status {
452
- background: #95e6f9;
453
- }
454
- }
455
  &.focus {
456
  background: #ffb710;
457
  &.off {
@@ -468,11 +534,19 @@
468
  .course-item-meta {
469
  display: block;
470
  line-height: 1;
471
- __position: absolute;
472
  top: 15px;
473
  right: 15px;
474
  float: right;
475
  margin-top: 5px;
 
 
 
 
 
 
 
 
 
476
  }
477
  }
478
 
@@ -570,6 +644,24 @@
570
  .percentage-sign {
571
  margin-left: 5px;
572
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
573
  &:after {
574
  display: block;
575
  content: '';
@@ -699,7 +791,29 @@
699
  }
700
  }
701
 
702
- /* POPUP */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
703
 
704
  #popup_overlay {
705
  z-index: 10000000 !important;
@@ -945,7 +1059,7 @@ body.course-has-popup {
945
  height: 43px;
946
  line-height: 43px;
947
  background: #F5F5F5;
948
- margin: 0 10px;
949
  border: 1px solid #DDD;
950
  outline: none;
951
  }
@@ -1031,7 +1145,6 @@ body.block-content {
1031
  }
1032
 
1033
  /* COURSE QUIZ */
1034
- //.single-quiz {
1035
  .quiz-buttons {
1036
  margin-bottom: 20px;
1037
  clear: both;
@@ -1040,6 +1153,10 @@ body.block-content {
1040
  .quiz-intro {
1041
  list-style: none;
1042
  padding: 0;
 
 
 
 
1043
  }
1044
 
1045
  .quiz-questions-list {
@@ -1051,12 +1168,127 @@ body.block-content {
1051
  }
1052
  .question-title {
1053
  margin: 0 0 5px 0;
 
 
1054
  }
1055
  .current {
1056
  .question-title {
1057
  font-weight: bold;
1058
  }
1059
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1060
  }
1061
 
1062
  .quiz-description,
@@ -1077,7 +1309,6 @@ body.block-content {
1077
  }
1078
 
1079
  #quiz-countdown {
1080
- //.progress-circle(@initialize: 100%, @size: 260px, @inside-size: 200px);
1081
  .progress-circle {
1082
  overflow: hidden;
1083
  box-shadow: 0 0 3px #bdbdbd inset;
@@ -1309,8 +1540,9 @@ body.block-content {
1309
  .learn-press-message {
1310
  background: #F5F5F5;
1311
  border-left: 5px solid #00A0D2;
1312
- padding: 10px 20px 10px 20px;
1313
  margin-bottom: 20px;
 
1314
  button {
1315
  float: right;
1316
  }
@@ -1409,7 +1641,20 @@ body.block-content {
1409
  }
1410
 
1411
  .learn-press-user-profile {
1412
-
 
 
 
 
 
 
 
 
 
 
 
 
 
1413
  .lp-edit-profile {
1414
  &:after {
1415
  .clearfix();
@@ -1419,6 +1664,7 @@ body.block-content {
1419
  p {
1420
  margin-top: 10px;
1421
  }
 
1422
  }
1423
  .learn-press-tabs {
1424
  list-style: none;
@@ -1524,9 +1770,8 @@ body.block-content {
1524
  }
1525
  }
1526
 
1527
-
1528
  }
1529
- .update-profile{
1530
  border-top: 2px solid #DDD;
1531
  padding-top: 20px;
1532
  }
@@ -1537,10 +1782,10 @@ body.block-content {
1537
  .moxie-shim {
1538
  display: none;
1539
  }
1540
- .lp-form-field-avatar{
1541
  float: left;
1542
  }
1543
- #lp-avatar-actions{
1544
  margin: 20px 0;
1545
  }
1546
  }
@@ -1623,7 +1868,6 @@ body.block-content {
1623
  display: block;
1624
  }
1625
  }
1626
-
1627
  &.croping {
1628
  .lp-avatar-preview-actions {
1629
  display: none;
@@ -1760,6 +2004,14 @@ body {
1760
  }
1761
  }
1762
 
 
 
 
 
 
 
 
 
1763
  .single-lp_course {
1764
  .course-summary {
1765
  .lp_course {
@@ -1769,9 +2021,41 @@ body {
1769
  }
1770
  }
1771
  .learn-press-message {
 
1772
  clear: both;
1773
  margin-top: 25px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1774
  }
 
1775
  }
1776
 
1777
  /* tooltip */
@@ -1844,20 +2128,6 @@ body.content-item-only {
1844
  }
1845
 
1846
  /*
1847
- .sidebar-hide-btn, .sidebar-show-btn {
1848
- cursor: pointer;
1849
- width: 60px;
1850
- height: 60px;
1851
- display: inline-block;
1852
- font-size: 34px;
1853
- line-height: 60px;
1854
- text-align: center;
1855
- color: #FFF;
1856
- position: absolute;
1857
-
1858
-
1859
- }*/
1860
-
1861
  .payment-method-form {
1862
  &.payment_method_authorizenet {
1863
  background: #f7f7f7;
@@ -1888,7 +2158,7 @@ body.content-item-only {
1888
  }
1889
  }
1890
  }
1891
- }
1892
 
1893
  .place-order-action {
1894
  margin-top: 20px;
@@ -1924,8 +2194,16 @@ body.content-item-only {
1924
  }
1925
  }
1926
 
 
 
 
 
 
 
 
 
1927
  /* Shortcode/Widgets */
1928
- .recent-courses-widget, .popular-courses-widget, .featured-courses-widget {
1929
  .course-meta-data {
1930
  > div {
1931
  display: inline-block;
@@ -1943,6 +2221,119 @@ body.content-item-only {
1943
  }
1944
  .course-entry {
1945
  margin-bottom: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1946
  }
1947
  }
1948
 
@@ -2078,6 +2469,7 @@ body.content-item-only {
2078
 
2079
  }
2080
 
 
2081
  @media (max-width: 480px) {
2082
  .woocommerce {
2083
  .checkout_coupon {
@@ -2087,7 +2479,7 @@ body.content-item-only {
2087
  }
2088
  }
2089
  }
2090
-
2091
  @media (max-width: 400px) {
2092
 
2093
  .learn-press-courses {
@@ -2120,6 +2512,7 @@ body.content-item-only {
2120
  }
2121
  }
2122
 
 
2123
  @media screen and (max-width: 615px) {
2124
  .payment-method-form {
2125
  &.payment_method_authorizenet {
@@ -2150,3 +2543,4 @@ body.content-item-only {
2150
  }
2151
  }
2152
  }
 
1
+ /*
2
+ - PROGRESS CIRCLE
3
+ - Archive courses
4
+ - Course Curriculum
5
+ - BREADCRUMB
6
+ - COURSE PROGRESS
7
+ - COURSE TABS
8
+ - POPUP STYLE
9
+ - COURSE QUIZ
10
+ - Form field
11
+ - jAlerts
12
+ - tooltip
13
+ - fill in blank
14
+ - Shortcode/Widgets
15
+ */
16
+
17
  @icon-url: '../fonts/lp-icons';
18
  @font-face {
19
  font-family: 'lp-icons';
320
  }
321
  }
322
 
323
+ .course-origin-price {
324
+ text-decoration: line-through;
325
+ padding-right: 5px;
326
+ }
327
+
328
+ .course-price {
329
+ color: rgb(84, 181, 81);
330
+ }
331
+
332
  .learn-press-notice .button {
333
  float: right;
334
  }
337
  margin-bottom: 20px;
338
  }
339
 
340
+ /* Course Curriculum */
341
 
342
  #learn-press-course-curriculum {
343
  ul.curriculum-sections,
388
  border-radius: 5px;
389
  vertical-align: middle;
390
  margin-left: 5px;
391
+ font-size: 10px;
392
  &:before {
393
  content: "\ea0b";
394
  margin: 0 auto;
430
  .lp-icon {
431
  display: none;
432
  }
433
+ .item-status {
434
+ display: none;
435
+ font-family: dashicons;
436
+ .border-radius(4px);
437
+ background: #DDD;
438
+ color: #22b4ff;
439
+ font-size: 18px;
440
+ &:before {
441
+ content: "\f177";
442
+ }
443
+ &.item-status-viewed {
444
+
445
+ }
446
+ &.item-status-started {
447
+ &:before {
448
+ content: "\f469";
449
+ }
450
+ }
451
+ &.item-status-completed {
452
+ background: #22b4ff;
453
+ color: #FFF;
454
+ &:before {
455
+ content: "\f147";
456
+ }
457
+ }
458
+ &.item-status-passed {
459
+ background: #22b4ff;
460
+ color: #FFF;
461
+ &:before {
462
+ content: "\f147";
463
+ }
464
+ }
465
+ &.item-status-failed {
466
+ background: #cc540d;
467
+ color: #FFF;
468
+ &:before {
469
+ content: "\f335";
470
+ }
471
+ }
472
+ }
473
+ .item-result {
474
+ display: none;
475
+ }
476
+ &.item-has-status {
477
+ .item-status {
478
+ display: inline-block;
479
+ }
480
+ }
481
+ &.item-has-result {
482
+ .item-result {
483
+ display: inline-block;
484
+ }
485
+ }
486
  &.viewable {
487
  cursor: pointer;
488
  &:hover {
517
  content: '';
518
  }
519
  }
520
+
 
 
 
 
 
 
 
 
 
 
 
 
 
521
  &.focus {
522
  background: #ffb710;
523
  &.off {
534
  .course-item-meta {
535
  display: block;
536
  line-height: 1;
 
537
  top: 15px;
538
  right: 15px;
539
  float: right;
540
  margin-top: 5px;
541
+ .item-loop-meta-text {
542
+ font-size: small;
543
+ &.item-final {
544
+ color: #ffffff;
545
+ background: #cc540d;
546
+ padding: 3px 8px;
547
+ .border-radius(3px);
548
+ }
549
+ }
550
  }
551
  }
552
 
644
  .percentage-sign {
645
  margin-left: 5px;
646
  }
647
+ .grade {
648
+ font-size: 12px;
649
+ font-weight: bold;
650
+ background: #F5F5F5;
651
+ padding: 2px 7px;
652
+ .border-radius(3px);
653
+ &.in-progress {
654
+
655
+ }
656
+ &.passed {
657
+ color: #ffffff;
658
+ background: #95e6f9;
659
+ }
660
+ &.failed {
661
+ color: #ffffff;
662
+ background: #ff5425;
663
+ }
664
+ }
665
  &:after {
666
  display: block;
667
  content: '';
791
  }
792
  }
793
 
794
+ .learn-press-course-buttons {
795
+
796
+ a.button {
797
+ display: inline-block;
798
+ font-size: 16px;
799
+ background: #1a1a1a;
800
+ border: 0;
801
+ border-radius: 2px;
802
+ color: #fff;
803
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
804
+ font-weight: 700;
805
+ letter-spacing: 0.046875em;
806
+ line-height: 1;
807
+ padding: 0.84375em 0.875em 0.78125em;
808
+ text-transform: uppercase;
809
+
810
+ &:hover {
811
+ background: #007acc;
812
+ }
813
+ }
814
+ }
815
+
816
+ /* POPUP STYLE */
817
 
818
  #popup_overlay {
819
  z-index: 10000000 !important;
1059
  height: 43px;
1060
  line-height: 43px;
1061
  background: #F5F5F5;
1062
+ margin-left: 10px;
1063
  border: 1px solid #DDD;
1064
  outline: none;
1065
  }
1145
  }
1146
 
1147
  /* COURSE QUIZ */
 
1148
  .quiz-buttons {
1149
  margin-bottom: 20px;
1150
  clear: both;
1153
  .quiz-intro {
1154
  list-style: none;
1155
  padding: 0;
1156
+ margin-left: 0;
1157
+ li label {
1158
+ display: inline-block;
1159
+ }
1160
  }
1161
 
1162
  .quiz-questions-list {
1168
  }
1169
  .question-title {
1170
  margin: 0 0 5px 0;
1171
+ display: inline-block;
1172
+ font-size: 14px;
1173
  }
1174
  .current {
1175
  .question-title {
1176
  font-weight: bold;
1177
  }
1178
  }
1179
+ input[type="checkbox"], input[type="radio"] {
1180
+ border: 1px solid #DDD;
1181
+ display: inline-block;
1182
+ -webkit-appearance: none;
1183
+ width: 18px;
1184
+ height: 18px;
1185
+ position: relative;
1186
+ &:checked {
1187
+ &:after {
1188
+ content: '';
1189
+ display: inline-block;
1190
+ position: absolute;
1191
+ }
1192
+ }
1193
+ }
1194
+ input[type="checkbox"]:checked {
1195
+ &:after {
1196
+ border-bottom: 3px solid #00b9eb;
1197
+ border-right: 1px solid #00b9eb;
1198
+ -webkit-transform: rotate(14deg);
1199
+ -moz-transform: rotate(14deg);
1200
+ -ms-transform: rotate(14deg);
1201
+ -o-transform: rotate(14deg);
1202
+ transform: rotate(33deg);
1203
+ width: 8px;
1204
+ height: 16px;
1205
+
1206
+ top: -5px;
1207
+ left: 5px;
1208
+ }
1209
+ }
1210
+ input[type="checkbox"] {
1211
+ &:disabled {
1212
+ &:after {
1213
+ border-color: #DDD;
1214
+ }
1215
+ }
1216
+ }
1217
+ input[type="radio"] {
1218
+ -webkit-border-radius: 50%;
1219
+ -moz-border-radius: 50%;
1220
+ border-radius: 50%;
1221
+ &:checked {
1222
+ &:after {
1223
+ background: #00b9eb;
1224
+ width: 8px;
1225
+ height: 8px;
1226
+ border-radius: 50%;
1227
+ top: 50%;
1228
+ left: 50%;
1229
+ margin-left: -4px;
1230
+ margin-top: -4px;
1231
+ }
1232
+ }
1233
+ &:disabled {
1234
+ &:after {
1235
+ background: #DDD;
1236
+ }
1237
+ }
1238
+ }
1239
+ }
1240
+
1241
+ .question-results {
1242
+ .question-title {
1243
+ &:after {
1244
+ font-family: dashicons;
1245
+ font-size: 24px;
1246
+ vertical-align: middle;
1247
+ display: inline-block;
1248
+ text-align: center;
1249
+ margin-left: 5px;
1250
+ }
1251
+ }
1252
+ &.correct {
1253
+ .question-title {
1254
+ &:after {
1255
+ content: '\f147';
1256
+ color: #00adff;
1257
+ }
1258
+ }
1259
+ }
1260
+ &.skipped {
1261
+ .question-title {
1262
+ &:after {
1263
+ content: '\f534';
1264
+ color: #c6c6c6;
1265
+ }
1266
+ }
1267
+ }
1268
+ &.incorrect {
1269
+ .question-title {
1270
+ &:after {
1271
+ content: '\f335';
1272
+ color: #ff5425;
1273
+ }
1274
+ }
1275
+ .user-answer-false {
1276
+ .option-title {
1277
+ text-decoration: line-through;
1278
+ }
1279
+ }
1280
+ }
1281
+ .answer-true {
1282
+ color: #007acc;
1283
+ .option-title {
1284
+ background: #fff9d8;
1285
+ padding: 0 5px;
1286
+ margin-left: -5px;
1287
+ }
1288
+ }
1289
+ input {
1290
+ vertical-align: middle;
1291
+ }
1292
  }
1293
 
1294
  .quiz-description,
1309
  }
1310
 
1311
  #quiz-countdown {
 
1312
  .progress-circle {
1313
  overflow: hidden;
1314
  box-shadow: 0 0 3px #bdbdbd inset;
1540
  .learn-press-message {
1541
  background: #F5F5F5;
1542
  border-left: 5px solid #00A0D2;
1543
+ padding: 10px 20px 0px 20px;
1544
  margin-bottom: 20px;
1545
+ overflow: hidden;
1546
  button {
1547
  float: right;
1548
  }
1641
  }
1642
 
1643
  .learn-press-user-profile {
1644
+ #learn-press-user-info{
1645
+ overflow: hidden;
1646
+ .user-avatar {
1647
+ width: 150px;
1648
+ float: left;
1649
+ .avatar {
1650
+ border-radius: 0;
1651
+ width: 100%;
1652
+ }
1653
+ }
1654
+ .user-basic-info{
1655
+ margin-left: 170px;
1656
+ }
1657
+ }
1658
  .lp-edit-profile {
1659
  &:after {
1660
  .clearfix();
1664
  p {
1665
  margin-top: 10px;
1666
  }
1667
+
1668
  }
1669
  .learn-press-tabs {
1670
  list-style: none;
1770
  }
1771
  }
1772
 
 
1773
  }
1774
+ .update-profile {
1775
  border-top: 2px solid #DDD;
1776
  padding-top: 20px;
1777
  }
1782
  .moxie-shim {
1783
  display: none;
1784
  }
1785
+ .lp-form-field-avatar {
1786
  float: left;
1787
  }
1788
+ #lp-avatar-actions {
1789
  margin: 20px 0;
1790
  }
1791
  }
1868
  display: block;
1869
  }
1870
  }
 
1871
  &.croping {
1872
  .lp-avatar-preview-actions {
1873
  display: none;
2004
  }
2005
  }
2006
 
2007
+ .learn-press-auto-redirect-next-item {
2008
+ display: none;
2009
+
2010
+ &.active {
2011
+ display: block;
2012
+ }
2013
+ }
2014
+
2015
  .single-lp_course {
2016
  .course-summary {
2017
  .lp_course {
2021
  }
2022
  }
2023
  .learn-press-message {
2024
+ position: relative;
2025
  clear: both;
2026
  margin-top: 25px;
2027
+
2028
+ .learn-press-countdown {
2029
+ display: inline-block;
2030
+ width: 1.5em;
2031
+ height: 1.5em;
2032
+ background: #cc540d;
2033
+ text-align: center;
2034
+ border-radius: 50%;
2035
+ line-height: 1.5em;
2036
+ font-size: 0.8em;
2037
+ color: #fff;
2038
+ }
2039
+ .learnpress-dismiss-notice {
2040
+ display: inline-block;
2041
+ position: absolute;
2042
+ right: 1em;
2043
+ top: 50%;
2044
+ -ms-transform: translateY(-50%);
2045
+ -webkit-transform: translateY(-50%);
2046
+ transform: translateY(-50%);
2047
+ cursor: pointer;
2048
+
2049
+ &:before {
2050
+ font-size: 1.2em;
2051
+ color: red;
2052
+ content: "\f153";
2053
+ font-family: dashicons;
2054
+ }
2055
+ }
2056
+
2057
  }
2058
+
2059
  }
2060
 
2061
  /* tooltip */
2128
  }
2129
 
2130
  /*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2131
  .payment-method-form {
2132
  &.payment_method_authorizenet {
2133
  background: #f7f7f7;
2158
  }
2159
  }
2160
  }
2161
+ }*/
2162
 
2163
  .place-order-action {
2164
  margin-top: 20px;
2194
  }
2195
  }
2196
 
2197
+ .table-orders {
2198
+ .order-status {
2199
+ &.order-status-removed {
2200
+ color: #FF0000;
2201
+ }
2202
+ }
2203
+ }
2204
+
2205
  /* Shortcode/Widgets */
2206
+ .widget_lp-widget-popular-courses, .widget_lp-widget-recent-courses, .widget_lp-widget-featured-courses {
2207
  .course-meta-data {
2208
  > div {
2209
  display: inline-block;
2221
  }
2222
  .course-entry {
2223
  margin-bottom: 20px;
2224
+ border-bottom: 1px dashed #DDD;
2225
+ padding-bottom: 20px;
2226
+ }
2227
+ }
2228
+
2229
+ .edit-course-item-link {
2230
+ a {
2231
+ font-size: 14px;
2232
+ position: relative;
2233
+ padding-left: 25px;
2234
+ &:after {
2235
+ content: "\f464";
2236
+ font-family: Dashicons;
2237
+ font-size: 26px;
2238
+ position: absolute;
2239
+ bottom: 0;
2240
+ line-height: 1;
2241
+ left: 0;
2242
+ }
2243
+ }
2244
+ }
2245
+
2246
+ .course-item-navigation {
2247
+ border-top: 4px solid #333;
2248
+ padding-top: 10px;
2249
+ margin-top: 20px;
2250
+ .nav-links {
2251
+ .nav-link {
2252
+ opacity: 1;
2253
+ a {
2254
+ opacity: 1;
2255
+ .meta-nav {
2256
+ display: block;
2257
+ text-transform: uppercase;
2258
+ font-size: small;
2259
+ color: #b9b9b9;
2260
+ }
2261
+ .post-title {
2262
+ opacity: 1;
2263
+ }
2264
+ }
2265
+ &.nav-previous {
2266
+ float: left;
2267
+ }
2268
+ &.nav-next {
2269
+ float: right;
2270
+ text-align: right;
2271
+ }
2272
+ }
2273
+ &:after {
2274
+ clear: both;
2275
+ display: block;
2276
+ content: '';
2277
+ }
2278
+ }
2279
+ }
2280
+
2281
+ /* widget attributes */
2282
+ .lp-course-attributes {
2283
+ list-style: none;
2284
+ margin-left: 0;
2285
+ li {
2286
+ list-style: none;
2287
+ margin-bottom: 10px;
2288
+ }
2289
+ .lp-course-attribute-values {
2290
+ list-style: none;
2291
+ margin-left: 0;
2292
+ }
2293
+ &.course-attributes {
2294
+ .lp-course-attribute-values {
2295
+ li {
2296
+ display: inline-block;
2297
+ padding: 3px 8px;
2298
+ background: #F0F0F0;
2299
+ border-radius: 4px;
2300
+ margin: 0 5px 5px 0;
2301
+ }
2302
+ }
2303
+ }
2304
+ &.course-filters {
2305
+ .lp-course-attribute-values {
2306
+ li {
2307
+ a:before {
2308
+ font-family: dashicons;
2309
+ border-radius: 50%;
2310
+ background: #DDD;
2311
+ display: inline-block;
2312
+ width: 16px;
2313
+ height: 16px;
2314
+ text-align: center;
2315
+ line-height: 16px;
2316
+ color: #FFF;
2317
+ font-size: 16px;
2318
+ vertical-align: middle;
2319
+ margin-right: 5px;
2320
+ content: '';
2321
+ }
2322
+ &:hover a:before {
2323
+ background: #4acfff;
2324
+ }
2325
+ }
2326
+ li.active {
2327
+ a:before {
2328
+ content: "\f147";
2329
+ background: #4acfff;
2330
+ }
2331
+ &:hover a:before {
2332
+ content: "\f335";
2333
+ background: #a20000;
2334
+ }
2335
+ }
2336
+ }
2337
  }
2338
  }
2339
 
2469
 
2470
  }
2471
 
2472
+ /*
2473
  @media (max-width: 480px) {
2474
  .woocommerce {
2475
  .checkout_coupon {
2479
  }
2480
  }
2481
  }
2482
+ */
2483
  @media (max-width: 400px) {
2484
 
2485
  .learn-press-courses {
2512
  }
2513
  }
2514
 
2515
+ /*
2516
  @media screen and (max-width: 615px) {
2517
  .payment-method-form {
2518
  &.payment_method_authorizenet {
2543
  }
2544
  }
2545
  }
2546
+ */
inc/admin/class-lp-admin-ajax.php CHANGED
@@ -54,7 +54,9 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
54
  'duplicate_course' => false,
55
  'duplicate_question' => false,
56
  // Remove Notice
57
- 'remove_notice_popup' => false
 
 
58
  );
59
  foreach ( $ajaxEvents as $ajaxEvent => $nopriv ) {
60
  add_action( 'wp_ajax_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );
@@ -63,8 +65,14 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
63
  add_action( 'wp_ajax_nopriv_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );
64
  }
65
  }
66
- add_filter( 'learn_press_modal_search_items_exclude', array( __CLASS__, '_modal_search_items_exclude' ), 10, 4 );
67
- add_filter( 'learn_press_modal_search_items_not_found', array( __CLASS__, '_modal_search_items_not_found' ), 10, 2 );
 
 
 
 
 
 
68
  do_action( 'learn_press_admin_ajax_load', __CLASS__ );
69
  }
70
 
@@ -211,42 +219,56 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
211
  $message .= '<a target="_blank" href="' . admin_url( 'post-new.php?post_type=lp_question' ) . '">' . esc_html__( 'Adding New Item.', 'learnpress' ) . '</a>';
212
  break;
213
  }
 
214
  return $message;
215
  }
216
 
 
 
 
 
 
 
 
 
 
 
 
217
  public static function _modal_search_items_exclude( $exclude, $type, $context = '', $context_id = null ) {
218
  global $wpdb;
219
- $exclude2 = array();
220
- $user = learn_press_get_current_user();
221
  switch ( $type ) {
222
  case 'lp_lesson':
223
  case 'lp_quiz':
224
- $query = $wpdb->prepare( "
225
  SELECT item_id
226
- FROM {$wpdb->prefix}learnpress_section_items
 
 
227
  WHERE %d
228
- ", 1 );
229
- $exclude2 = $wpdb->get_col( $query );
230
- if ( ( $context == 'course' ) && ( get_post_type( $context_id ) == 'lp_course' ) ) {
231
- $course_author = get_post_field( 'post_author', $context_id );
232
- }
233
  break;
234
  case 'lp_question':
235
- $query = $wpdb->prepare( "
236
  SELECT question_id
237
- FROM {$wpdb->prefix}learnpress_quiz_questions
 
238
  WHERE %d
239
- ", 1 );
240
- $exclude2 = $wpdb->get_col( $query );
 
241
  break;
242
 
243
  }
244
- if ( $exclude2 && $exclude ) {
245
- $exclude = array_merge( $exclude, $exclude2 );
246
- } else if ( $exclude2 ) {
247
- $exclude = $exclude2;
248
  }
249
- return $exclude;
 
250
  }
251
 
252
  public static function add_item_to_section() {
@@ -272,6 +294,19 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
272
  $type = (string) ( stripslashes( learn_press_get_request( 'type' ) ) );
273
  $context = (string) ( stripslashes( learn_press_get_request( 'context' ) ) );
274
  $context_id = (string) ( stripslashes( learn_press_get_request( 'context_id' ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  $exclude = array();
276
 
277
  if ( !empty( $_GET['exclude'] ) ) {
@@ -298,7 +333,12 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
298
  */
299
  case 'course-items':
300
  if ( get_post_type( $context_id ) == 'lp_course' ) {
301
- $args['author'] = get_post_field( 'post_author', $context_id );
 
 
 
 
 
302
  }
303
  break;
304
  /**
@@ -306,7 +346,13 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
306
  */
307
  case 'quiz-items':
308
  if ( get_post_type( $context_id ) == 'lp_quiz' ) {
309
- $args['author'] = get_post_field( 'post_author', $context_id );
 
 
 
 
 
 
310
  }
311
  break;
312
  }
@@ -314,22 +360,34 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
314
  if ( $term ) {
315
  $args['s'] = $term;
316
  }
317
-
318
  $posts = get_posts( $args );
319
  $found_items = array();
320
 
321
  if ( !empty( $posts ) ) {
322
- foreach ( $posts as $post ) {
323
- $found_items[$post->ID] = $post;
324
- $found_items[$post->ID]->post_title = !empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
325
- }
 
 
 
 
 
 
 
 
 
 
326
  }
327
 
 
 
328
  ob_start();
329
  if ( $found_items ) {
330
  foreach ( $found_items as $id => $item ) {
331
  printf( '
332
- <li class="" data-id="%1$d" data-type="%3$s" data-text="%2$s">
333
  <label>
334
  <input type="checkbox" value="%1$d">
335
  <span class="lp-item-text">%2$s</span>
@@ -767,13 +825,13 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
767
  $post = get_post( $quiz_id );
768
  setup_postdata( $post );
769
  if ( !$id ) {
770
- $id = wp_insert_post(
771
- array(
772
- 'post_title' => $name,
773
- 'post_type' => LP_QUESTION_CPT,
774
- 'post_status' => 'publish'
775
- )
776
  );
 
 
777
  if ( $id ) {
778
  add_post_meta( $id, '_lp_type', $type );
779
  }
@@ -823,8 +881,8 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
823
  $question_types[$to] = !empty( $question_types[$to] ) && $question_types[$to] ? absint( $question_types[$to] ) + 1 : 1;
824
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
825
  // end trigger change user memorize question types
826
- if('auto-draft'=== $question->post->post_status){
827
- $question->answers = $question->get_default_answers(false);
828
  }
829
  learn_press_send_json(
830
  array(
@@ -1133,7 +1191,23 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1133
 
1134
  }
1135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1136
  }
1137
  }
1138
  LP_Admin_Ajax::init();
1139
-
54
  'duplicate_course' => false,
55
  'duplicate_question' => false,
56
  // Remove Notice
57
+ 'remove_notice_popup' => false,
58
+ // Update order status
59
+ 'update_order_status' => false,
60
  );
61
  foreach ( $ajaxEvents as $ajaxEvent => $nopriv ) {
62
  add_action( 'wp_ajax_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );
65
  add_action( 'wp_ajax_nopriv_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );
66
  }
67
  }
68
+ add_filter( 'learn_press_modal_search_items_exclude', array(
69
+ __CLASS__,
70
+ '_modal_search_items_exclude'
71
+ ), 10, 4 );
72
+ add_filter( 'learn_press_modal_search_items_not_found', array(
73
+ __CLASS__,
74
+ '_modal_search_items_not_found'
75
+ ), 10, 2 );
76
  do_action( 'learn_press_admin_ajax_load', __CLASS__ );
77
  }
78
 
219
  $message .= '<a target="_blank" href="' . admin_url( 'post-new.php?post_type=lp_question' ) . '">' . esc_html__( 'Adding New Item.', 'learnpress' ) . '</a>';
220
  break;
221
  }
222
+
223
  return $message;
224
  }
225
 
226
+ /**
227
+ * Filter to exclude the items has already added to it's parent.
228
+ * Each item only use one time
229
+ *
230
+ * @param $exclude
231
+ * @param $type
232
+ * @param string $context
233
+ * @param null $context_id
234
+ *
235
+ * @return array
236
+ */
237
  public static function _modal_search_items_exclude( $exclude, $type, $context = '', $context_id = null ) {
238
  global $wpdb;
239
+ $used_items = array();
 
240
  switch ( $type ) {
241
  case 'lp_lesson':
242
  case 'lp_quiz':
243
+ $query = $wpdb->prepare( "
244
  SELECT item_id
245
+ FROM {$wpdb->prefix}learnpress_section_items si
246
+ INNER JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id
247
+ INNER JOIN {$wpdb->posts} p ON p.ID = s.section_course_id
248
  WHERE %d
249
+ AND p.post_type = %s
250
+ ", 1, LP_COURSE_CPT );
251
+ $used_items = $wpdb->get_col( $query );
 
 
252
  break;
253
  case 'lp_question':
254
+ $query = $wpdb->prepare( "
255
  SELECT question_id
256
+ FROM {$wpdb->prefix}learnpress_quiz_questions qq
257
+ INNER JOIN {$wpdb->posts} q ON q.ID = qq.quiz_id
258
  WHERE %d
259
+ AND q.post_type = %s
260
+ ", 1, LP_QUIZ_CPT );
261
+ $used_items = $wpdb->get_col( $query );
262
  break;
263
 
264
  }
265
+ if ( $used_items && $exclude ) {
266
+ $exclude = array_merge( $exclude, $used_items );
267
+ } else if ( $used_items ) {
268
+ $exclude = $used_items;
269
  }
270
+
271
+ return array_unique( $exclude );
272
  }
273
 
274
  public static function add_item_to_section() {
294
  $type = (string) ( stripslashes( learn_press_get_request( 'type' ) ) );
295
  $context = (string) ( stripslashes( learn_press_get_request( 'context' ) ) );
296
  $context_id = (string) ( stripslashes( learn_press_get_request( 'context_id' ) ) );
297
+ $current_items_in_order = learn_press_get_request( 'current_items' );
298
+ $current_items = array();
299
+
300
+
301
+ foreach ($current_items_in_order as $item) {
302
+ $sql = "SELECT meta_value
303
+ FROM {$wpdb->prefix}learnpress_order_itemmeta
304
+ WHERE meta_key = '_course_id'
305
+ AND learnpress_order_item_id = $item";
306
+ $id = $wpdb->get_results( $sql, OBJECT );
307
+ array_push($current_items, $id[0]->meta_value);
308
+ }
309
+
310
  $exclude = array();
311
 
312
  if ( !empty( $_GET['exclude'] ) ) {
333
  */
334
  case 'course-items':
335
  if ( get_post_type( $context_id ) == 'lp_course' ) {
336
+ $post_author = get_post_field( 'post_author', $context_id );
337
+ $authors = array($post_author);
338
+ if($post_author != $user->id ){
339
+ $authors[] =$user->id;
340
+ }
341
+ $args['author'] = $authors;
342
  }
343
  break;
344
  /**
346
  */
347
  case 'quiz-items':
348
  if ( get_post_type( $context_id ) == 'lp_quiz' ) {
349
+ $post_author = get_post_field( 'post_author', $context_id );
350
+ $authors = array($post_author);
351
+ if($post_author != $user->id ){
352
+ $authors[] =$user->id;
353
+ }
354
+ $args['author'] = $authors;
355
+ //$args['author'] = get_post_field( 'post_author', $context_id );
356
  }
357
  break;
358
  }
360
  if ( $term ) {
361
  $args['s'] = $term;
362
  }
363
+ $args = apply_filters('learn_press_filter_admin_ajax_modal_search_items_args', $args, $context, $context_id );
364
  $posts = get_posts( $args );
365
  $found_items = array();
366
 
367
  if ( !empty( $posts ) ) {
368
+ if ($current_items_in_order) {
369
+ foreach ( $posts as $post ) {
370
+ if (in_array($post->ID, $current_items)) {
371
+ continue;
372
+ }
373
+ $found_items[$post->ID] = $post;
374
+ $found_items[$post->ID]->post_title = !empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
375
+ }
376
+ } else {
377
+ foreach ( $posts as $post ) {
378
+ $found_items[$post->ID] = $post;
379
+ $found_items[$post->ID]->post_title = !empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
380
+ }
381
+ }
382
  }
383
 
384
+
385
+
386
  ob_start();
387
  if ( $found_items ) {
388
  foreach ( $found_items as $id => $item ) {
389
  printf( '
390
+ <li class="" data-id="%1$d" data-type="%3$s" data-text="%2$s">
391
  <label>
392
  <input type="checkbox" value="%1$d">
393
  <span class="lp-item-text">%2$s</span>
825
  $post = get_post( $quiz_id );
826
  setup_postdata( $post );
827
  if ( !$id ) {
828
+ $args_item = array(
829
+ 'post_title' => $name,
830
+ 'post_type' => LP_QUESTION_CPT,
831
+ 'post_status' => 'publish'
 
 
832
  );
833
+ $args_item = apply_filters( 'learnpress_quiz_insert_item_args', $args_item, $quiz_id );
834
+ $id = wp_insert_post( $args_item );
835
  if ( $id ) {
836
  add_post_meta( $id, '_lp_type', $type );
837
  }
881
  $question_types[$to] = !empty( $question_types[$to] ) && $question_types[$to] ? absint( $question_types[$to] ) + 1 : 1;
882
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
883
  // end trigger change user memorize question types
884
+ if ( 'auto-draft' === $question->post->post_status ) {
885
+ $question->answers = $question->get_default_answers( false );
886
  }
887
  learn_press_send_json(
888
  array(
1191
 
1192
  }
1193
 
1194
+ public static function update_order_status () {
1195
+ global $wpdb;
1196
+ $order_id = learn_press_get_request( 'order_id' );
1197
+ $value = learn_press_get_request( 'value' );
1198
+
1199
+ $order = array(
1200
+ 'ID' => $order_id,
1201
+ 'post_status' => $value,
1202
+ );
1203
+
1204
+ wp_update_post( $order ) ? $response['success'] = true : $response['success'] = false;
1205
+
1206
+ learn_press_send_json( $response );
1207
+
1208
+ die();
1209
+ }
1210
+
1211
  }
1212
  }
1213
  LP_Admin_Ajax::init();
 
inc/admin/class-lp-admin-menu.php CHANGED
@@ -26,6 +26,9 @@ class LP_Admin_Menu {
26
  add_action( 'admin_menu', array( $this, 'notify_new_course' ) );
27
  add_action( 'init', array( $this, 'menu_content' ) );
28
  add_action( 'init', 'learn_press_admin_update_settings', 1000 );
 
 
 
29
 
30
  // auto include file for admin page
31
  // example: slug = learn_press_settings -> file = inc/admin/sub-menus/settings.php
@@ -41,6 +44,27 @@ class LP_Admin_Menu {
41
  }
42
  }
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  /**
45
  * Register for menu for admin
46
  */
@@ -48,7 +72,7 @@ class LP_Admin_Menu {
48
  $capacity = 'edit_' . LP_COURSE_CPT . 's';
49
  add_menu_page(
50
  __( 'Learning Management System', 'learnpress' ),
51
- __( 'LearnPress', 'learnpress' ),
52
  $capacity,
53
  'learn_press',
54
  '',
@@ -97,8 +121,6 @@ class LP_Admin_Menu {
97
  if ( $menu_items ) foreach ( $menu_items as $item ) {
98
  call_user_func_array( 'add_submenu_page', $item );
99
  }
100
-
101
- //add_submenu_page( 'tools.php', __( 'Database tools', 'learnpress' ), __( 'LearnPress', 'learnpress' ), 'manage_options', 'learn_press_tools', 'learn_press_tools_page' );
102
  }
103
 
104
  /*
26
  add_action( 'admin_menu', array( $this, 'notify_new_course' ) );
27
  add_action( 'init', array( $this, 'menu_content' ) );
28
  add_action( 'init', 'learn_press_admin_update_settings', 1000 );
29
+ if ( apply_filters( 'learn_press_show_admin_bar_courses_page', true ) ) {
30
+ add_action( 'admin_bar_menu', array( $this, 'admin_bar_menus' ), 50 );
31
+ }
32
 
33
  // auto include file for admin page
34
  // example: slug = learn_press_settings -> file = inc/admin/sub-menus/settings.php
44
  }
45
  }
46
 
47
+ public function admin_bar_menus( $wp_admin_bar ) {
48
+ if ( !is_admin() || !is_user_logged_in() ) {
49
+ return;
50
+ }
51
+
52
+ if ( !is_user_member_of_blog() && !is_super_admin() ) {
53
+ return;
54
+ }
55
+
56
+ if ( get_option( 'page_on_front' ) == learn_press_get_page_id( 'courses' ) ) {
57
+ return;
58
+ }
59
+
60
+ $wp_admin_bar->add_node( array(
61
+ 'parent' => 'site-name',
62
+ 'id' => 'courses-page',
63
+ 'title' => __( 'View Courses', 'learnpress' ),
64
+ 'href' => learn_press_get_page_link( 'courses' )
65
+ ) );
66
+ }
67
+
68
  /**
69
  * Register for menu for admin
70
  */
72
  $capacity = 'edit_' . LP_COURSE_CPT . 's';
73
  add_menu_page(
74
  __( 'Learning Management System', 'learnpress' ),
75
+ 'LearnPress',
76
  $capacity,
77
  'learn_press',
78
  '',
121
  if ( $menu_items ) foreach ( $menu_items as $item ) {
122
  call_user_func_array( 'add_submenu_page', $item );
123
  }
 
 
124
  }
125
 
126
  /*
inc/admin/class-lp-admin.php CHANGED
@@ -214,6 +214,7 @@ if ( !class_exists( 'LP_Admin' ) ) {
214
  * Include all classes and functions used for admin
215
  */
216
  public function includes() {
 
217
  // Common function used in admin
218
  include_once( 'lp-admin-functions.php' );
219
  // Admin actions
214
  * Include all classes and functions used for admin
215
  */
216
  public function includes() {
217
+ //crazy tu
218
  // Common function used in admin
219
  include_once( 'lp-admin-functions.php' );
220
  // Admin actions
inc/admin/class-lp-meta-box-tabs.php CHANGED
@@ -49,7 +49,8 @@ if ( !class_exists( 'LP_Meta_Box_Tabs' ) ) {
49
  */
50
  public function add_tab_arg( $url ) {
51
  if ( array_key_exists( 'learn-press-meta-box-tab', $_REQUEST ) && !empty( $_REQUEST['learn-press-meta-box-tab'] ) ) {
52
- $m = add_query_arg( 'tab', $_REQUEST['learn-press-meta-box-tab'], $url );
 
53
  }
54
  return $url;
55
  }
49
  */
50
  public function add_tab_arg( $url ) {
51
  if ( array_key_exists( 'learn-press-meta-box-tab', $_REQUEST ) && !empty( $_REQUEST['learn-press-meta-box-tab'] ) ) {
52
+ $url = remove_query_arg('tab', $url );
53
+ $url = add_query_arg( 'tab', $_REQUEST['learn-press-meta-box-tab'], $url );
54
  }
55
  return $url;
56
  }
inc/admin/class-lp-profile.php DELETED
@@ -1,139 +0,0 @@
1
- <?php
2
- if ( ! defined( 'ABSPATH' ) ) {
3
- exit; // Exit if accessed directly
4
- }
5
-
6
- if ( ! class_exists( 'LP_Profile' ) ) {
7
- /**
8
- * Class LP_Profile
9
- */
10
- class LP_Profile {
11
- /**
12
- * Constructor
13
- */
14
- public function __construct() {
15
- add_filter( 'learn_press_profile_methods', array( $this, 'learn_press_profile_method' ) );
16
- // add_action( 'wp_loaded', array( $this, 'learn_press_process_profile' ) );
17
- add_action( 'learn_press_before_profile_content', array( $this, 'learn_press_add_tabs_scripts' ) );
18
- add_action( 'learn_press_add_profile_tab', array( $this, 'learn_press_add_profile_tab' ) );
19
- add_filter( 'learn_press_user_info_tab_content', array( $this, 'learn_press_user_info_tab_content' ), 10, 2 );
20
- add_filter( 'learn_press_user_courses_tab_content', array( $this, 'learn_press_user_courses_tab_content' ), 10, 2 );
21
- add_filter( 'learn_press_user_quizzes_tab_content', array( $this, 'learn_press_user_quizzes_tab_content' ), 10, 2 );
22
- add_action( 'learn_press_enrolled_course_after_title', array( $this, 'end_title_content' ), 10, 2 );
23
- }
24
-
25
- /**
26
- * Process profile
27
- */
28
- public function learn_press_process_profile() {
29
- if ( learn_press_has_profile_method() ) {
30
- if ( learn_press_get_profile_page_id() == 0 ) {
31
- $profile = array(
32
- 'post_title' => 'Profile',
33
- 'post_content' => '[learn_press_profile]',
34
- 'post_type' => 'page',
35
- 'post_status' => 'publish',
36
- );
37
- $profile_page_id = wp_insert_post( $profile );
38
- update_post_meta( $profile_page_id, '_lpr_is_profile_page', 1 );
39
- }
40
- } else {
41
- wp_delete_post( learn_press_get_profile_page_id(), true );
42
- }
43
- }
44
-
45
- /*
46
- * Profile methods
47
- */
48
- public function learn_press_profile_method( $methods ) {
49
- $methods['lpr_profile'] = __( 'LearnPress Profile', 'learnpress' );
50
-
51
- return $methods;
52
- }
53
-
54
- /*
55
- * Enqueue jquery ui scripts
56
- */
57
- public function learn_press_add_tabs_scripts() {
58
- /*wp_enqueue_style( 'lpr-jquery-ui-css', LP_CSS_URL . 'jquery-ui.css' );
59
- wp_enqueue_script( 'lpr-jquery-ui-js', LP_JS_URL . 'jquery-ui.js', array( 'jquery' ), '', false );*/
60
- }
61
-
62
- /*
63
- * Add profile tab
64
- */
65
- public function learn_press_add_profile_tab( $user ) {
66
- $content = '';
67
- $tabs = apply_filters(
68
- 'learn_press_profile_tabs',
69
- array(
70
- 10 => array(
71
- 'tab_id' => 'user_info',
72
- 'tab_name' => __( 'User Information', 'learnpress' ),
73
- 'tab_content' => apply_filters( 'learn_press_user_info_tab_content', $content, $user )
74
- ),
75
- 20 => array(
76
- 'tab_id' => 'user_courses',
77
- 'tab_name' => __( 'Courses', 'learnpress' ),
78
- 'tab_content' => apply_filters( 'learn_press_user_courses_tab_content', $content, $user )
79
- )/*,
80
- 30 => array(
81
- 'tab_id' => 'user_quizzes',
82
- 'tab_name' => __( 'Quiz Results', 'learnpress' ),
83
- 'tab_content' => apply_filters( 'learn_press_user_quizzes_tab_content', $content, $user )
84
- )*/
85
- ),
86
- $user
87
- );
88
- ksort( $tabs );
89
- echo '<ul>';
90
- foreach ( $tabs as $tab ) {
91
- echo '<li><a href="#' . $tab['tab_id'] . '">' . $tab['tab_name'] . '</a></li>';
92
- }
93
- echo '</ul>';
94
- foreach ( $tabs as $tab ) {
95
- echo '<div id="' . $tab['tab_id'] . '">' . $tab['tab_content'] . '</div>';
96
- }
97
- }
98
-
99
- /*
100
- * Add content for user information tab
101
- */
102
- public function learn_press_user_info_tab_content( $content, $user ) {
103
- ob_start();
104
- learn_press_get_template( 'profile/user-info.php', array( 'user' => $user ) );
105
- $content .= ob_get_clean();
106
- return $content;
107
- }
108
-
109
- /*
110
- * Add content for user courses tab
111
- */
112
- public function learn_press_user_courses_tab_content( $content, $user ) {
113
- ob_start();
114
- learn_press_get_template( 'profile/user-courses.php', array( 'user' => $user ) );
115
- $content .= ob_get_clean();
116
- return $content;
117
- }
118
-
119
-
120
- /*
121
- * Add content for user quiz results tab
122
- */
123
- public function learn_press_user_quizzes_tab_content( $content, $user ) {
124
- ob_start();
125
- learn_press_get_template( 'profile/user-quizzes.php', array( 'content' => $content, 'user' => $user ) );
126
- $content .= ob_get_clean();
127
- return $content;
128
- }
129
-
130
- public function end_title_content( $course, $user ) {
131
- if ( learn_press_user_has_passed_course( $course->ID, $user->ID ) ) {
132
- _e( '<span class="course-status passed">Passed</span>', 'learnpress' );
133
- } else {
134
-
135
- }
136
- }
137
- }
138
- new LP_Profile;
139
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/admin/dashboard-statistics/class-lp-statistic-status.php CHANGED
@@ -12,15 +12,15 @@ if ( !class_exists( 'LP_Statistic_Status' ) ) :
12
  * @since 2.0
13
  */
14
  public static function render() {
15
- $order_statuses = learn_press_get_register_order_statuses();
16
  $eduma_data = self::get_eduma_info( 14058034 );
17
- $xx = array_keys( $order_statuses );
18
  $specific_statuses = array( 'lp-completed', 'lp-failed', 'lp-on-hold' );
19
- foreach ( $xx as $status ) {
20
  if ( !in_array( $status, $specific_statuses ) ) {
21
  $specific_statuses[] = $status;
22
  }
23
  }
 
24
  ?>
25
  <ul class="learnpress-statistic-status">
26
  <li class="full-width">
@@ -37,7 +37,7 @@ if ( !class_exists( 'LP_Statistic_Status' ) ) :
37
  if ( !$status_object ) {
38
  continue;
39
  }
40
- $count = count( learn_press_get_orders( array( 'post_status' => $status ) ) );
41
  ?>
42
  <li>
43
  <?php if ( $count ): ?>
12
  * @since 2.0
13
  */
14
  public static function render() {
15
+ $order_statuses = learn_press_get_order_statuses(true, true);
16
  $eduma_data = self::get_eduma_info( 14058034 );
 
17
  $specific_statuses = array( 'lp-completed', 'lp-failed', 'lp-on-hold' );
18
+ foreach ( $order_statuses as $status ) {
19
  if ( !in_array( $status, $specific_statuses ) ) {
20
  $specific_statuses[] = $status;
21
  }
22
  }
23
+ $counts = learn_press_count_orders( array( 'status' => $specific_statuses ) );
24
  ?>
25
  <ul class="learnpress-statistic-status">
26
  <li class="full-width">
37
  if ( !$status_object ) {
38
  continue;
39
  }
40
+ $count = $counts[$status];
41
  ?>
42
  <li>
43
  <?php if ( $count ): ?>
inc/admin/includes/class-markdown-parse.php CHANGED
@@ -239,7 +239,7 @@ class Markdown_Parser {
239
  var $predef_titles = array();
240
 
241
 
242
- function Markdown_Parser() {
243
  #
244
  # Constructor function. Initialize appropriate member variables.
245
  #
@@ -1691,7 +1691,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
1691
  var $predef_abbr = array();
1692
 
1693
 
1694
- function MarkdownExtra_Parser() {
1695
  #
1696
  # Constructor function. Initialize the parser object.
1697
  #
@@ -1717,7 +1717,7 @@ class MarkdownExtra_Parser extends Markdown_Parser {
1717
  "doAbbreviations" => 70,
1718
  );
1719
 
1720
- parent::Markdown_Parser();
1721
  }
1722
 
1723
 
@@ -2268,13 +2268,15 @@ class MarkdownExtra_Parser extends Markdown_Parser {
2268
  if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
2269
  return $matches[0];
2270
  $level = $matches[3]{0} == '=' ? 1 : 2;
2271
- $attr = $this->_doHeaders_attr($id =& $matches[2]);
 
2272
  $block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
2273
  return "\n" . $this->hashBlock($block) . "\n\n";
2274
  }
2275
  function _doHeaders_callback_atx($matches) {
2276
  $level = strlen($matches[1]);
2277
- $attr = $this->_doHeaders_attr($id =& $matches[3]);
 
2278
  $block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
2279
  return "\n" . $this->hashBlock($block) . "\n\n";
2280
  }
239
  var $predef_titles = array();
240
 
241
 
242
+ function __construct() {
243
  #
244
  # Constructor function. Initialize appropriate member variables.
245
  #
1691
  var $predef_abbr = array();
1692
 
1693
 
1694
+ function __construct() {
1695
  #
1696
  # Constructor function. Initialize the parser object.
1697
  #
1717
  "doAbbreviations" => 70,
1718
  );
1719
 
1720
+ parent::__construct();
1721
  }
1722
 
1723
 
2268
  if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
2269
  return $matches[0];
2270
  $level = $matches[3]{0} == '=' ? 1 : 2;
2271
+ $id =& $matches[2];
2272
+ $attr = $this->_doHeaders_attr($id);
2273
  $block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
2274
  return "\n" . $this->hashBlock($block) . "\n\n";
2275
  }
2276
  function _doHeaders_callback_atx($matches) {
2277
  $level = strlen($matches[1]);
2278
+ $id =& $matches[3];
2279
+ $attr = $this->_doHeaders_attr($id);
2280
  $block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
2281
  return "\n" . $this->hashBlock($block) . "\n\n";
2282
  }
inc/admin/lp-admin-actions.php CHANGED
@@ -11,10 +11,10 @@
11
  function _learn_press_set_user_items( $query ) {
12
  global $post_type, $pagenow, $wpdb;
13
 
14
- if ( current_user_can( 'manage_options' ) || !current_user_can( LP_TEACHER_ROLE ) || !is_admin() || ( $pagenow != 'edit.php' ) ) {
15
  return $query;
16
  }
17
- if ( !in_array( $post_type, array( 'lp_course', LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT ) ) ) {
18
  return;
19
  }
20
  $items = $wpdb->get_col(
@@ -69,17 +69,18 @@ function _learn_press_restrict_view_items( $views ) {
69
  }
70
  $result = new WP_Query( $query );
71
  if ( $result->found_posts > 0 ) {
72
- $views[$view] = sprintf(
73
  '<a href="%s"' . $class . '>' . __( $name, 'learnpress' ) . ' <span class="count">(%d)</span></a>',
74
  esc_url( add_query_arg( $query, $url ) ),
75
  $result->found_posts
76
  );
77
  } else {
78
- unset( $views[$view] );
79
  }
80
  }
81
  // remove view 'mine'
82
  unset( $views['mine'] );
 
83
  return $views;
84
  }
85
 
@@ -95,9 +96,10 @@ function learn_press_update_permalink_structure() {
95
  return;
96
  }
97
  $rewrite_prefix = '';
98
- $permalink_structure = !empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';
99
  if ( $permalink_structure ) {
100
- $segs = explode( '/', $permalink_structure );
 
101
  if ( sizeof( $segs ) ) {
102
  foreach ( $segs as $seg ) {
103
  if ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {
@@ -120,16 +122,22 @@ add_action( 'init', 'learn_press_update_permalink_structure' );
120
 
121
  add_action( 'wp_dashboard_setup', 'learnpress_dashboard_widgets' );
122
 
123
- if ( !function_exists( 'learnpress_dashboard_widgets' ) ) {
124
- /**
125
- * Register dashboard widgets
126
- *
127
- * LearnPress statistic
128
- * Eduma statistic
129
- * @since 2.0
130
- */
131
- function learnpress_dashboard_widgets() {
132
- wp_add_dashboard_widget( 'learn_press_dashboard_widget', __( 'LearnPress Plugin', 'learnpress' ), array( 'LP_Statistic_Plugin', 'render' ) );
133
- wp_add_dashboard_widget( 'learn_press_dashboard_widget_status', __( 'LearnPress Status', 'learnpress' ), array( 'LP_Statistic_Status', 'render' ) );
134
- }
 
 
 
 
 
 
135
  }
11
  function _learn_press_set_user_items( $query ) {
12
  global $post_type, $pagenow, $wpdb;
13
 
14
+ if ( current_user_can( 'manage_options' ) || ! current_user_can( LP_TEACHER_ROLE ) || ! is_admin() || ( $pagenow != 'edit.php' ) ) {
15
  return $query;
16
  }
17
+ if ( ! in_array( $post_type, array( 'lp_course', LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT ) ) ) {
18
  return;
19
  }
20
  $items = $wpdb->get_col(
69
  }
70
  $result = new WP_Query( $query );
71
  if ( $result->found_posts > 0 ) {
72
+ $views[ $view ] = sprintf(
73
  '<a href="%s"' . $class . '>' . __( $name, 'learnpress' ) . ' <span class="count">(%d)</span></a>',
74
  esc_url( add_query_arg( $query, $url ) ),
75
  $result->found_posts
76
  );
77
  } else {
78
+ unset( $views[ $view ] );
79
  }
80
  }
81
  // remove view 'mine'
82
  unset( $views['mine'] );
83
+
84
  return $views;
85
  }
86
 
96
  return;
97
  }
98
  $rewrite_prefix = '';
99
+ $permalink_structure = ! empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';
100
  if ( $permalink_structure ) {
101
+ $rewrite_prefix = array();
102
+ $segs = explode( '/', $permalink_structure );
103
  if ( sizeof( $segs ) ) {
104
  foreach ( $segs as $seg ) {
105
  if ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {
122
 
123
  add_action( 'wp_dashboard_setup', 'learnpress_dashboard_widgets' );
124
 
125
+ if ( ! function_exists( 'learnpress_dashboard_widgets' ) ) {
126
+ /**
127
+ * Register dashboard widgets
128
+ *
129
+ * LearnPress statistic
130
+ * Eduma statistic
131
+ * @since 2.0
132
+ */
133
+ function learnpress_dashboard_widgets() {
134
+ wp_add_dashboard_widget( 'learn_press_dashboard_widget', __( 'LearnPress Plugin', 'learnpress' ), array(
135
+ 'LP_Statistic_Plugin',
136
+ 'render'
137
+ ) );
138
+ wp_add_dashboard_widget( 'learn_press_dashboard_widget_status', __( 'LearnPress Status', 'learnpress' ), array(
139
+ 'LP_Statistic_Status',
140
+ 'render'
141
+ ) );
142
+ }
143
  }
inc/admin/lp-admin-functions.php CHANGED
@@ -7,8 +7,8 @@
7
  * @version 1.0
8
  */
9
 
10
- if ( !defined( 'ABSPATH' ) ) {
11
- exit;
12
  }
13
  /**
14
  * Get html view path for admin to display
@@ -18,48 +18,53 @@ if ( !defined( 'ABSPATH' ) ) {
18
  *
19
  * @return mixed
20
  */
21
- function learn_press_get_admin_view( $name, $plugin_file = null ) {
22
- if ( !preg_match( '/\.(.*)$/', $name ) ) {
23
- $name .= '.php';
24
- }
25
- if ( $plugin_file ) {
26
- $view = dirname( $plugin_file ) . '/inc/admin/views/' . $name;
27
- } else {
28
- $view = LP()->plugin_path( 'inc/admin/views/' . $name );
29
- }
30
- return apply_filters( 'learn_press_admin_view', $view, $name );
 
 
31
  }
32
 
33
  /**
34
  * Find a full path of a view and display the content in admin
35
  *
36
  * @param $name
37
- * @param array $args
38
  * @param bool|false $include_once
39
  * @param bool
40
  *
41
  * @return bool
42
  */
43
- function learn_press_admin_view( $name, $args = array(), $include_once = false, $return = false ) {
44
- $view = learn_press_get_admin_view( $name, !empty( $args['plugin_file'] ) ? $args['plugin_file'] : null );
45
- if ( file_exists( $view ) ) {
46
- ob_start();
47
- // extract parameters as local variables if passed
48
- is_array( $args ) && extract( $args );
49
- do_action( 'learn_press_before_display_admin_view', $name, $args );
50
- if ( $include_once ) {
51
- include_once $view;
52
- } else {
53
- include $view;
54
- }
55
- do_action( 'learn_press_after_display_admin_view', $name, $args );
56
- $output = ob_get_clean();
57
- if ( !$return ) {
58
- echo $output;
59
- }
60
- return $return ? $output : true;
61
- }
62
- return false;
 
 
 
63
  }
64
 
65
  /**
@@ -67,78 +72,82 @@ function learn_press_admin_view( $name, $args = array(), $include_once = false,
67
  *
68
  * @param $name
69
  * @param bool|false $selected
70
- * @param array $args
71
  *
72
  * @return mixed|string
73
  */
74
- function learn_press_pages_dropdown( $name, $selected = false, $args = array() ) {
75
- $id = null;
76
- $class = null;
77
- $css = null;
78
- $before = array(
79
- 'add_new_page' => __( '[ Add a new page ]', 'learnpress' )
80
- );
81
- $after = null;
82
- $echo = true;
83
- $allow_create = true;
84
- is_array( $args ) && extract( $args );
85
-
86
- if ( empty( $id ) ) {
87
- $id = $name;
88
- }
89
- $args = array(
90
- 'name' => $name,
91
- 'id' => $id,
92
- 'sort_column' => 'menu_order',
93
- 'sort_order' => 'ASC',
94
- 'show_option_none' => __( 'Select Page', 'learnpress' ),
95
- 'class' => $class,
96
- 'echo' => false,
97
- 'selected' => $selected,
98
- 'allow_create' => true
99
- );
100
- $output = wp_dropdown_pages( $args );
101
- $replace = "";
102
-
103
- $class .= 'learn-press-dropdown-pages';
104
-
105
- if ( $class ) {
106
- $replace .= ' class="' . $class . '"';
107
- }
108
- if ( $css ) {
109
- $replace .= ' style="' . $css . '"';
110
- }
111
-
112
- $replace .= ' data-selected="' . $selected . '"';
113
- $replace .= " data-placeholder='" . __( 'Select a page&hellip;', 'learnpress' ) . "' id=";
114
- $output = str_replace( ' id=', $replace, $output );
115
- if ( $before ) {
116
- $before_output = array();
117
- foreach ( $before as $v => $l ) {
118
- $before_output[] = sprintf( '<option value="%s">%s</option>', $v, $l );
119
- }
120
- $before_output = join( "\n", $before_output );
121
- $output = preg_replace( '!(<option class=".*" value="[0-9]+".*>.*</option>)!', $before_output . "\n$1", $output, 1 );
122
- }
123
- if ( $allow_create ) {
124
- ob_start(); ?>
125
- <button class="button button-quick-add-page" data-id="<?php echo $id; ?>" type="button"><?php _e( 'Create', 'learnpress' ); ?></button>
126
- <p class="learn-press-quick-add-page-inline <?php echo $id; ?> hide-if-js">
127
- <input type="text" placeholder="<?php esc_attr_e( 'New page title', 'learnpress' ); ?>" />
128
- <button class="button" type="button"><?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?></button>
129
- <a href=""><?php _e( 'Cancel [ESC]', 'learnpress' ); ?></a>
130
- </p>
131
- <p class="learn-press-quick-add-page-actions <?php echo $id; ?><?php echo $selected ? '' : ' hide-if-js'; ?>">
132
- <a class="edit-page" href="<?php echo get_edit_post_link( $selected ); ?>" target="_blank"><?php _e( 'Edit Page', 'learnpress' ); ?></a>
133
- <a class="view-page" href="<?php echo get_permalink( $selected ); ?>" target="_blank"><?php _e( 'View Page', 'learnpress' ); ?></a>
134
- </p>
135
- <?php $output .= ob_get_clean();
136
- }
137
- if ( $echo ) {
138
- echo $output;
139
- }
140
-
141
- return $output;
 
 
 
 
142
  }
143
 
144
  /**
@@ -148,31 +157,33 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
148
  *
149
  * @return string
150
  */
151
- function learn_press_dropdown_question_types( $args = array() ) {
152
- $args = wp_parse_args(
153
- $args,
154
- array(
155
- 'name' => 'learn-press-dropdown-question-types',
156
- 'id' => '',
157
- 'class' => '',
158
- 'selected' => '',
159
- 'echo' => true
160
- )
161
- );
162
- if ( !$args['id'] ) {
163
- $args['id'] = $args['name'];
164
- }
165
- $args['class'] = 'lp-dropdown-question-types' . ( $args['class'] ? ' ' . $args['class'] : '' );
166
- $types = learn_press_question_types();
167
- $output = sprintf( '<select name="%s" id="%s" class="%s"%s>', $args['name'], $args['id'], $args['class'], $args['selected'] ? 'data-selected="' . $args['selected'] . '"' : '' );
168
- foreach ( $types as $slug => $name ) {
169
- $output .= sprintf( '<option value="%s"%s>%s</option>', $slug, selected( $slug == $args['selected'], true, false ), $name );
170
- }
171
- $output .= '</select>';
172
- if ( $args['echo'] ) {
173
- echo $output;
174
- }
175
- return $output;
 
 
176
  }
177
 
178
  /**
@@ -182,46 +193,47 @@ function learn_press_dropdown_question_types( $args = array() ) {
182
  *
183
  * @return string
184
  */
185
- function learn_press_field_question_duration( $args = array(), $question ) {
186
- global $post;
187
- $duration_type = get_post_meta( $post->ID, "_lp_duration_type", true );
188
- $value = get_post_meta( $question->id, '_question_duration', true );
189
-
190
- $wrap_class = 'learn-press-question-duration';
191
- if ( 'questions_duration' !== $duration_type ) {
192
- $wrap_class .= ' hide';
193
- }
194
- $args = wp_parse_args(
195
- $args,
196
- array(
197
- 'name' => 'learn_press_question[' . $question->id . '][duration]',
198
- 'id' => 'learn-press-question-duration-' . $question->id,
199
- 'class' => 'learn-press-question-duration',
200
- 'selected' => '',
201
- 'echo' => true,
202
- 'value' => 0,
203
- 'step' => 1,
204
- 'min' => 0,
205
- 'placeholder' => __( 'Minutes', 'learnpress' ),
206
- )
207
- );
208
- $args['value'] = $value;
209
-
210
- if ( !$args['id'] ) {
211
- $args['id'] = $args['name'];
212
- }
213
-
214
- return '<span class="' . esc_attr( $wrap_class ) . '">' . sprintf(
215
- '<input type="number" class="%s" name="%s" id="%s" value="%s" step="%s" min="%s" max="%s" placeholder="%s"/>',
216
- $args['class'],
217
- $args['name'],
218
- empty( $args['clone'] ) ? $args['id'] : '',
219
- $args['value'],
220
- $args['step'],
221
- $args['min'],
222
- !empty( $args['max'] ) ? $args['max'] : '',
223
- $args['placeholder']
224
- ) . $args['placeholder'] . '</span>';
 
225
  }
226
 
227
  /**
@@ -231,31 +243,35 @@ function learn_press_field_question_duration( $args = array(), $question ) {
231
  *
232
  * @return string
233
  */
234
- function learn_press_email_formats_dropdown( $args = array() ) {
235
- $args = wp_parse_args(
236
- $args,
237
- array(
238
- 'name' => 'learn-press-dropdown-email-formats',
239
- 'id' => '',
240
- 'class' => '',
241
- 'selected' => '',
242
- 'echo' => true
243
- )
244
- );
245
- $formats = array(
246
- //'text_message' => __( 'Text message', 'learnpress' ),
247
- 'plain_text' => __( 'Plain text', 'learnpress' ),
248
- 'html' => __( 'HTML', 'learnpress' ),
249
- //'multipart' => __( 'Multipart', 'learnpress' )
250
- );
251
- $output = sprintf( '<select name="%s" id="%s" class="%s" %s>', $args['name'], $args['id'], $args['class'], '' );
252
- foreach ( $formats as $name => $text ) {
253
- $output .= sprintf( '<option value="%s" %s>%s</option>', $name, selected( $args['selected'] == $name, true, false ), $text ) . "\n";
254
- }
255
- $output .= '</select>';
256
-
257
- if ( $args['echo'] ) echo $output;
258
- return $output;
 
 
 
 
259
  }
260
 
261
  /**************************************************/
@@ -265,45 +281,50 @@ function learn_press_email_formats_dropdown( $args = array() ) {
265
  /**
266
  * Translate javascript text
267
  */
268
- function learn_press_admin_localize_script() {
269
- if ( defined( 'LP_DOING_AJAX' ) || !is_admin() ) return;
270
- $translate = array(
271
- 'quizzes_is_not_available' => __( 'Quiz is not available', 'learnpress' ),
272
- 'lessons_is_not_available' => __( 'Lesson is not available', 'learnpress' ),
273
- 'duplicate_course' => array(
274
- 'title' => __( 'Duplicate course', 'learnpress' ),
275
- 'message' => __( 'Duplicate course curriculum?', 'learnpress' )
276
- ),
277
- 'duplicate_question' => array(
278
- 'title' => __( 'Duplicate Question', 'learnpress' ),
279
- 'message' => __( 'Do you want to duplicate this question?', 'learnpress' )
280
- ),
281
- 'remove_question' => __( 'Do you want to remove this question from quiz?', 'learnpress' ),
282
- 'nonces' => array(
283
- 'duplicate_question' => wp_create_nonce( 'duplicate-question' )
284
- )
285
- );
286
- LP_Assets::add_localize( $translate );
 
 
 
287
  }
288
 
289
- add_action( 'init', 'learn_press_admin_localize_script' );
290
 
291
  /**
292
  * Default admin settings pages
293
  *
294
  * @return mixed
295
  */
296
- function learn_press_settings_tabs_array() {
297
- $tabs = array(
298
- 'general' => __( 'General', 'learnpress' ),
299
- 'courses' => __( 'Courses', 'learnpress' ),
300
- 'pages' => __( 'Pages', 'learnpress' ),
301
- 'payments' => __( 'Payments', 'learnpress' ),
302
- 'checkout' => __( 'Checkout', 'learnpress' ),
303
- //'profile' => __( 'Profile', 'learnpress' ),
304
- 'emails' => __( 'Emails', 'learnpress' )
305
- );
306
- return apply_filters( 'learn_press_settings_tabs_array', $tabs );
 
 
307
  }
308
 
309
  /**
@@ -314,18 +335,19 @@ function learn_press_settings_tabs_array() {
314
  *
315
  * @return int
316
  */
317
- function learn_press_get_order_by_time( $by, $time ) {
318
- global $wpdb;
319
- $user_id = get_current_user_id();
320
-
321
- $y = date( 'Y', $time );
322
- $m = date( 'm', $time );
323
- $d = date( 'd', $time );
324
- switch ( $by ) {
325
- case 'days':
326
- $orders = $wpdb->get_var(
327
- $wpdb->prepare(
328
- "SELECT COUNT(*)
 
329
  FROM $wpdb->posts AS p
330
  INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id
331
  WHERE p.post_author = %d
@@ -334,14 +356,14 @@ function learn_press_get_order_by_time( $by, $time ) {
334
  AND m.meta_key = %s
335
  AND m.meta_value = %s
336
  AND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s AND DAY(p.post_date) = %s",
337
- $user_id, LP_ORDER_CPT, 'publish', '_learn_press_transaction_status', 'completed', $y, $m, $d
338
- )
339
- );
340
- break;
341
- case 'months':
342
- $orders = $wpdb->get_var(
343
- $wpdb->prepare(
344
- "SELECT COUNT(*)
345
  FROM $wpdb->posts AS p
346
  INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id
347
  WHERE p.post_author = %d
@@ -350,12 +372,13 @@ function learn_press_get_order_by_time( $by, $time ) {
350
  AND m.meta_key = %s
351
  AND m.meta_value = %s
352
  AND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s",
353
- $user_id, LP_ORDER_CPT, 'publish', '_learn_press_transaction_status', 'completed', $y, $m
354
- )
355
- );
356
- break;
357
- }
358
- return $orders;
 
359
  }
360
 
361
  /**
@@ -365,20 +388,22 @@ function learn_press_get_order_by_time( $by, $time ) {
365
  *
366
  * @return int
367
  */
368
- function learn_press_get_courses_by_status( $status ) {
369
- global $wpdb;
370
- $user_id = get_current_user_id();
371
- $courses = $wpdb->get_var(
372
- $wpdb->prepare(
373
- "SELECT COUNT(*)
 
374
  FROM $wpdb->posts
375
  WHERE post_author = %d
376
  AND post_type = %s
377
  AND post_status = %s",
378
- $user_id, LP_COURSE_CPT, $status
379
- )
380
- );
381
- return $courses;
 
382
  }
383
 
384
  /**
@@ -388,12 +413,13 @@ function learn_press_get_courses_by_status( $status ) {
388
  *
389
  * @return int
390
  */
391
- function learn_press_get_courses_by_price( $fee ) {
392
- global $wpdb;
393
- $user_id = get_current_user_id();
394
- $courses = $wpdb->get_var(
395
- $wpdb->prepare(
396
- "SELECT COUNT(*)
 
397
  FROM $wpdb->posts AS p
398
  INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id
399
  WHERE p.post_author = %d
@@ -401,10 +427,11 @@ function learn_press_get_courses_by_price( $fee ) {
401
  AND p.post_status IN (%s, %s)
402
  AND m.meta_key = %s
403
  AND m.meta_value = %s",
404
- $user_id, LP_COURSE_CPT, 'publish', 'pending', '_lpr_course_payment', $fee
405
- )
406
- );
407
- return $courses;
 
408
  }
409
 
410
  /**
@@ -416,43 +443,45 @@ function learn_press_get_courses_by_price( $fee ) {
416
  *
417
  * @return array
418
  */
419
- function learn_press_get_chart_students( $from = null, $by = null, $time_ago ) {
420
- $labels = array();
421
- $datasets = array();
422
- if ( is_null( $from ) ) {
423
- $from = current_time( 'mysql' );
424
- }
425
- // $by: days, months or years
426
- if ( is_null( $by ) ) {
427
- $by = 'days';
428
- }
429
- switch ( $by ) {
430
- case 'days':
431
- $date_format = 'M d';
432
- break;
433
- case 'months':
434
- $date_format = 'M Y';
435
- break;
436
- case 'years':
437
- $date_format = 'Y';
438
- break;
439
- }
440
-
441
- for ( $i = - $time_ago + 1; $i <= 0; $i ++ ) {
442
- $labels[] = date( $date_format, strtotime( "$i $by", strtotime( $from ) ) );
443
- $datasets[0]['data'][] = learn_press_get_order_by_time( $by, strtotime( "$i $by", strtotime( $from ) ) );
444
- }
445
- $colors = learn_press_get_admin_colors();
446
- $datasets[0]['fillColor'] = 'rgba(255,255,255,0.1)';
447
- $datasets[0]['strokeColor'] = $colors[0];
448
- $datasets[0]['pointColor'] = $colors[0];
449
- $datasets[0]['pointStrokeColor'] = $colors[2];
450
- $datasets[0]['pointHighlightFill'] = $colors[2];
451
- $datasets[0]['pointHighlightStroke'] = $colors[0];
452
- return array(
453
- 'labels' => $labels,
454
- 'datasets' => $datasets
455
- );
 
 
456
  }
457
 
458
  /**
@@ -464,66 +493,67 @@ function learn_press_get_chart_students( $from = null, $by = null, $time_ago ) {
464
  *
465
  * @return array
466
  */
467
- function learn_press_get_chart_users( $from = null, $by = null, $time_ago ) {
468
- global $wpdb;
469
-
470
- $labels = array();
471
- $datasets = array();
472
- if ( is_null( $from ) ) {
473
- $from = current_time( 'mysql' );
474
- }
475
- if ( is_null( $by ) ) {
476
- $by = 'days';
477
- }
478
- $results = array(
479
- 'all' => array(),
480
- 'instructors' => array()
481
- );
482
- $from_time = is_numeric( $from ) ? $from : strtotime( $from );
483
-
484
- switch ( $by ) {
485
- case 'days':
486
- $date_format = 'M d Y';
487
- $_from = - $time_ago + 1;
488
- $_from = date( 'Y-m-d', strtotime( "{$_from} {$by}", $from_time ) );
489
- $_to = date( 'Y-m-d', $from_time );
490
- $_sql_format = '%Y-%m-%d';
491
- $_key_format = 'Y-m-d';
492
- break;
493
- case 'months':
494
- $date_format = 'M Y';
495
- $_from = - $time_ago + 1;
496
- $_from = date( 'Y-m-01', strtotime( "{$_from} {$by}", $from_time ) );
497
- $days = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );
498
- $_to = date( 'Y-m-' . $days, $from_time );
499
- $_sql_format = '%Y-%m';
500
- $_key_format = 'Y-m';
501
- break;
502
- case 'years':
503
- $date_format = 'Y';
504
- $_from = - $time_ago + 1;
505
- $_from = date( 'Y-01-01', strtotime( "{$_from} {$by}", $from_time ) );
506
- $days = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );
507
- $_to = date( 'Y-12-' . $days, $from_time );
508
- $_sql_format = '%Y';
509
- $_key_format = 'Y';
510
-
511
- break;
512
- }
513
- $query = $wpdb->prepare( "
 
514
  SELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d
515
  FROM {$wpdb->users} u
516
  WHERE 1
517
  GROUP BY d
518
  HAVING d BETWEEN %s AND %s
519
  ORDER BY d ASC
520
- ", $_sql_format, $_from, $_to );
521
- if ( $_results = $wpdb->get_results( $query ) ) {
522
- foreach ( $_results as $k => $v ) {
523
- $results['all'][$v->d] = $v;
524
- }
525
- }
526
- $query = $wpdb->prepare( "
527
  SELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d
528
  FROM {$wpdb->users} u
529
  INNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s AND ( um.meta_value LIKE %s OR um.meta_value LIKE %s )
@@ -531,59 +561,59 @@ function learn_press_get_chart_users( $from = null, $by = null, $time_ago ) {
531
  GROUP BY d
532
  HAVING d BETWEEN %s AND %s
533
  ORDER BY d ASC
534
- ", $_sql_format, 'wp_capabilities', '%' . $wpdb->esc_like( 's:13:"administrator"' ) . '%', '%' . $wpdb->esc_like( 's:10:"lp_teacher"' ) . '%', $_from, $_to );
535
-
536
- if ( $_results = $wpdb->get_results( $query ) ) {
537
- foreach ( $_results as $k => $v ) {
538
- $results['instructors'][$v->d] = $v;
539
- }
540
- }
541
- for ( $i = - $time_ago + 1; $i <= 0; $i ++ ) {
542
- $date = strtotime( "$i $by", $from_time );
543
- $labels[] = date( $date_format, $date );
544
- $key = date( $_key_format, $date );
545
-
546
- $all = !empty( $results['all'][$key] ) ? $results['all'][$key]->c : 0;
547
- $instructors = !empty( $results['instructors'][$key] ) ? $results['instructors'][$key]->c : 0;
548
-
549
- $datasets[0]['data'][] = $all;
550
- $datasets[1]['data'][] = $instructors;
551
- $datasets[2]['data'][] = $all - $instructors;
552
- }
553
-
554
- $dataset_params = array(
555
- array(
556
- 'color1' => 'rgba(47, 167, 255, %s)',
557
- 'color2' => '#FFF',
558
- 'label' => __( 'All', 'learnpress' )
559
- ),
560
- array(
561
- 'color1' => 'rgba(212, 208, 203, %s)',
562
- 'color2' => '#FFF',
563
- 'label' => __( 'Instructors', 'learnpress' )
564
- ),
565
- array(
566
- 'color1' => 'rgba(234, 199, 155, %s)',
567
- 'color2' => '#FFF',
568
- 'label' => __( 'Students', 'learnpress' )
569
- )
570
- );
571
-
572
- foreach ( $dataset_params as $k => $v ) {
573
- $datasets[$k]['fillColor'] = sprintf( $v['color1'], '0.2' );
574
- $datasets[$k]['strokeColor'] = sprintf( $v['color1'], '1' );
575
- $datasets[$k]['pointColor'] = sprintf( $v['color1'], '1' );
576
- $datasets[$k]['pointStrokeColor'] = $v['color2'];
577
- $datasets[$k]['pointHighlightFill'] = $v['color2'];
578
- $datasets[$k]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );
579
- $datasets[$k]['label'] = $v['label'];
580
- }
581
-
582
- return array(
583
- 'labels' => $labels,
584
- 'datasets' => $datasets,
585
- 'sql' => $query
586
- );
587
  }
588
 
589
 
@@ -596,63 +626,64 @@ function learn_press_get_chart_users( $from = null, $by = null, $time_ago ) {
596
  *
597
  * @return array
598
  */
599
- function learn_press_get_chart_courses( $from = null, $by = null, $time_ago ) {
600
- global $wpdb;
601
-
602
- $labels = array();
603
- $datasets = array();
604
- if ( is_null( $from ) ) {
605
- $from = current_time( 'mysql' );
606
- }
607
- if ( is_null( $by ) ) {
608
- $by = 'days';
609
- }
610
- $results = array(
611
- 'all' => array(),
612
- 'public' => array(),
613
- 'pending' => array(),
614
- 'free' => array(),
615
- 'paid' => array()
616
- );
617
- $from_time = is_numeric( $from ) ? $from : strtotime( $from );
618
-
619
- switch ( $by ) {
620
- case 'days':
621
- $date_format = 'M d Y';
622
- $_from = - $time_ago + 1;
623
- $_from = date( 'Y-m-d', strtotime( "{$_from} {$by}", $from_time ) );
624
- $_to = date( 'Y-m-d', $from_time );
625
- $_sql_format = '%Y-%m-%d';
626
- $_key_format = 'Y-m-d';
627
- break;
628
- case 'months':
629
- $date_format = 'M Y';
630
- $_from = - $time_ago + 1;
631
- $_from = date( 'Y-m-01', strtotime( "{$_from} {$by}", $from_time ) );
632
- $days = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );
633
- $_to = date( 'Y-m-' . $days, $from_time );
634
- $_sql_format = '%Y-%m';
635
- $_key_format = 'Y-m';
636
- break;
637
- case 'years':
638
- $date_format = 'Y';
639
- $_from = - $time_ago + 1;
640
- $_from = date( 'Y-01-01', strtotime( "{$_from} {$by}", $from_time ) );
641
- $days = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );
642
- $_to = date( 'Y-12-' . $days, $from_time );
643
- $_sql_format = '%Y';
644
- $_key_format = 'Y';
645
-
646
- break;
647
- }
648
-
649
- $query_where = '';
650
- if ( current_user_can( LP_TEACHER_ROLE ) ) {
651
- $user_id = learn_press_get_current_user_id();
652
- $query_where .= $wpdb->prepare( " AND c.post_author=%d ", $user_id );
653
- }
654
-
655
- $query = $wpdb->prepare( "
 
656
  SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
657
  FROM {$wpdb->posts} c
658
  WHERE 1
@@ -661,13 +692,13 @@ function learn_press_get_chart_courses( $from = null, $by = null, $time_ago ) {
661
  GROUP BY d
662
  HAVING d BETWEEN %s AND %s
663
  ORDER BY d ASC
664
- ", $_sql_format, 'lp_course', $_from, $_to );
665
- if ( $_results = $wpdb->get_results( $query ) ) {
666
- foreach ( $_results as $k => $v ) {
667
- $results['all'][$v->d] = $v;
668
- }
669
- }
670
- $query = $wpdb->prepare( "
671
  SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
672
  FROM {$wpdb->posts} c
673
  WHERE 1
@@ -676,14 +707,14 @@ function learn_press_get_chart_courses( $from = null, $by = null, $time_ago ) {
676
  GROUP BY d
677
  HAVING d BETWEEN %s AND %s
678
  ORDER BY d ASC
679
- ", $_sql_format, 'publish', 'lp_course', $_from, $_to );
680
- if ( $_results = $wpdb->get_results( $query ) ) {
681
- foreach ( $_results as $k => $v ) {
682
- $results['publish'][$v->d] = $v;
683
- }
684
- }
685
-
686
- $query = $wpdb->prepare( "
687
  SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
688
  FROM {$wpdb->posts} c
689
  INNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID AND cm.meta_key = %s AND cm.meta_value = %s
@@ -693,72 +724,72 @@ function learn_press_get_chart_courses( $from = null, $by = null, $time_ago ) {
693
  GROUP BY d
694
  HAVING d BETWEEN %s AND %s
695
  ORDER BY d ASC
696
- ", $_sql_format, '_lp_payment', 'yes', 'publish', 'lp_course', $_from, $_to );
697
- if ( $_results = $wpdb->get_results( $query ) ) {
698
- foreach ( $_results as $k => $v ) {
699
- $results['paid'][$v->d] = $v;
700
- }
701
- }
702
-
703
- for ( $i = - $time_ago + 1; $i <= 0; $i ++ ) {
704
- $date = strtotime( "$i $by", $from_time );
705
- $labels[] = date( $date_format, $date );
706
- $key = date( $_key_format, $date );
707
-
708
- $all = !empty( $results['all'][$key] ) ? $results['all'][$key]->c : 0;
709
- $publish = !empty( $results['publish'][$key] ) ? $results['publish'][$key]->c : 0;
710
- $paid = !empty( $results['paid'][$key] ) ? $results['paid'][$key]->c : 0;
711
-
712
- $datasets[0]['data'][] = $all;
713
- $datasets[1]['data'][] = $publish;
714
- $datasets[2]['data'][] = $all - $publish;
715
- $datasets[3]['data'][] = $paid;
716
- $datasets[4]['data'][] = $all - $paid;
717
- }
718
-
719
- $dataset_params = array(
720
- array(
721
- 'color1' => 'rgba(47, 167, 255, %s)',
722
- 'color2' => '#FFF',
723
- 'label' => __( 'All', 'learnpress' )
724
- ),
725
- array(
726
- 'color1' => 'rgba(212, 208, 203, %s)',
727
- 'color2' => '#FFF',
728
- 'label' => __( 'Publish', 'learnpress' )
729
- ),
730
- array(
731
- 'color1' => 'rgba(234, 199, 155, %s)',
732
- 'color2' => '#FFF',
733
- 'label' => __( 'Pending', 'learnpress' )
734
- ),
735
- array(
736
- 'color1' => 'rgba(234, 199, 155, %s)',
737
- 'color2' => '#FFF',
738
- 'label' => __( 'Paid', 'learnpress' )
739
- ),
740
- array(
741
- 'color1' => 'rgba(234, 199, 155, %s)',
742
- 'color2' => '#FFF',
743
- 'label' => __( 'Free', 'learnpress' )
744
- )
745
- );
746
-
747
- foreach ( $dataset_params as $k => $v ) {
748
- $datasets[$k]['fillColor'] = sprintf( $v['color1'], '0.2' );
749
- $datasets[$k]['strokeColor'] = sprintf( $v['color1'], '1' );
750
- $datasets[$k]['pointColor'] = sprintf( $v['color1'], '1' );
751
- $datasets[$k]['pointStrokeColor'] = $v['color2'];
752
- $datasets[$k]['pointHighlightFill'] = $v['color2'];
753
- $datasets[$k]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );
754
- $datasets[$k]['label'] = $v['label'];
755
- }
756
-
757
- return array(
758
- 'labels' => $labels,
759
- 'datasets' => $datasets,
760
- 'sql' => $query
761
- );
762
  }
763
 
764
 
@@ -771,94 +802,95 @@ function learn_press_get_chart_courses( $from = null, $by = null, $time_ago ) {
771
  *
772
  * @return array
773
  */
774
- function learn_press_get_chart_orders( $from = null, $by = null, $time_ago ) {
775
- global $wpdb;
 
776
  // var_dump( current_user_can(LP_TEACHER_ROLE) );
777
  // exit();
778
- $report_sales_by = learn_press_get_request( 'report_sales_by' );
779
- $course_id = learn_press_get_request( 'course_id' );
780
- $cat_id = learn_press_get_request( 'cat_id' );
781
-
782
- $labels = array();
783
- $datasets = array();
784
- if ( is_null( $from ) ) {
785
- $from = current_time( 'mysql' );
786
- }
787
- if ( is_null( $by ) ) {
788
- $by = 'days';
789
- }
790
- $results = array(
791
- 'all' => array(),
792
- 'completed' => array(),
793
- 'pending' => array()
794
- );
795
- $from_time = is_numeric( $from ) ? $from : strtotime( $from );
796
-
797
- switch ( $by ) {
798
- case 'days':
799
- $date_format = 'M d Y';
800
- $_from = - $time_ago + 1;
801
- $_from = date( 'Y-m-d', strtotime( "{$_from} {$by}", $from_time ) );
802
- $_to = date( 'Y-m-d', $from_time );
803
- $_sql_format = '%Y-%m-%d';
804
- $_key_format = 'Y-m-d';
805
- break;
806
- case 'months':
807
- $date_format = 'M Y';
808
- $_from = - $time_ago + 1;
809
- $_from = date( 'Y-m-01', strtotime( "{$_from} {$by}", $from_time ) );
810
- $days = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );
811
- $_to = date( 'Y-m-' . $days, $from_time );
812
- $_sql_format = '%Y-%m';
813
- $_key_format = 'Y-m';
814
- break;
815
- case 'years':
816
- $date_format = 'Y';
817
- $_from = - $time_ago + 1;
818
- $_from = date( 'Y-01-01', strtotime( "{$_from} {$by}", $from_time ) );
819
- $days = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );
820
- $_to = date( 'Y-12-' . $days, $from_time );
821
- $_sql_format = '%Y';
822
- $_key_format = 'Y';
823
-
824
- break;
825
- }
826
-
827
- $query_join = '';
828
- $query_where = '';
829
- if ( 'course' === $report_sales_by ) {
830
- $sql_join .= " INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` "
831
- . " ON o.ID=lpoi.order_id "
832
- . " INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim "
833
- . " ON lpoi.order_item_id=loim.learnpress_order_item_id "
834
- . " AND loim.meta_key='_course_id' "
835
- . " AND CAST(loim.meta_value AS SIGNED)=%d ";
836
- if ( current_user_can( LP_TEACHER_ROLE ) ) {
837
- $user_id = learn_press_get_current_user_id();
838
- $sql_join .= $wpdb->prepare( " AND CAST(loim.meta_value AS SIGNED) IN "
839
- . " ( "
840
- . " SELECT ID FROM {$wpdb->posts} p WHERE p.ID = CAST(loim.meta_value AS SIGNED) AND `post_author`=" . intval( $user_id )
841
- . " ) " );
842
- }
843
- $query_join .= $wpdb->prepare( $sql_join, $course_id );
844
-
845
- } elseif ( 'category' === $report_sales_by ) {
846
- $sql_join .= " INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` "
847
- . " ON o.ID=lpoi.order_id "
848
- . " INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim "
849
- . " ON lpoi.order_item_id=loim.learnpress_order_item_id "
850
- . " AND loim.meta_key='_course_id' "
851
- . " AND CAST(loim.meta_value AS SIGNED) IN("
852
- //sub query
853
- . " SELECT tr.object_id "
854
- . " FROM wp_term_taxonomy tt INNER JOIN wp_term_relationships tr "
855
- . " ON tt.term_taxonomy_id = tr.term_taxonomy_id AND tt.taxonomy='course_category' "
856
- . " WHERE tt.term_id=%d)";
857
- $query_join .= $wpdb->prepare( $sql_join, $cat_id );
858
- }
859
- if ( current_user_can( LP_TEACHER_ROLE ) ) {
860
- $user_id = learn_press_get_current_user_id();
861
- $query_where .= $wpdb->prepare( " AND o.ID IN( SELECT oi.order_id
862
  FROM lptest.{$wpdb->prefix}learnpress_order_items oi
863
  inner join {$wpdb->prefix}learnpress_order_itemmeta oim
864
  on oi.order_item_id = oim.learnpress_order_item_id
@@ -866,10 +898,10 @@ function learn_press_get_chart_orders( $from = null, $by = null, $time_ago ) {
866
  and cast(oim.meta_value as SIGNED) IN (
867
  SELECT sp.ID FROM {$wpdb->prefix}posts sp WHERE sp.post_author=%d and sp.ID=cast(oim.meta_value as SIGNED)
868
  )
869
- ) ", $user_id );
870
- }
871
 
872
- $query = $wpdb->prepare( "
873
  SELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d
874
  FROM {$wpdb->posts} o {$query_join}
875
  WHERE 1 {$query_where}
@@ -877,16 +909,16 @@ function learn_press_get_chart_orders( $from = null, $by = null, $time_ago ) {
877
  GROUP BY d
878
  HAVING d BETWEEN %s AND %s
879
  ORDER BY d ASC
880
- ", $_sql_format, 'lp_order', $_from, $_to );
881
  // echo $query;
882
- if ( $_results = $wpdb->get_results( $query ) ) {
883
- foreach ( $_results as $k => $v ) {
884
  // $results['all'][$v->d] = $v;
885
- $results['completed'][$v->d] = $v;
886
- }
887
- }
888
 
889
- $query = $wpdb->prepare( "
890
  SELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d
891
  FROM {$wpdb->posts} o {$query_join}
892
  WHERE 1 {$query_where}
@@ -894,104 +926,117 @@ function learn_press_get_chart_orders( $from = null, $by = null, $time_ago ) {
894
  GROUP BY d
895
  HAVING d BETWEEN %s AND %s
896
  ORDER BY d ASC
897
- ", $_sql_format, 'lp_order', $_from, $_to );
898
  // echo $query;
899
- if ( $_results = $wpdb->get_results( $query ) ) {
900
- foreach ( $_results as $k => $v ) {
901
  // $results['completed'][$v->d] = $v;
902
- $results['pending'][$v->d] = $v;
903
- }
904
- }
905
-
906
-
907
- for ( $i = - $time_ago + 1; $i <= 0; $i ++ ) {
908
- $date = strtotime( "$i $by", $from_time );
909
- $labels[] = date( $date_format, $date );
910
- $key = date( $_key_format, $date );
911
-
912
- $completed = !empty( $results['completed'][$key] ) ? $results['completed'][$key]->c : 0;
913
- $pending = !empty( $results['pending'][$key] ) ? $results['pending'][$key]->c : 0;
914
- $all = $completed + $pending;
915
-
916
- $datasets[0]['data'][] = $all;
917
- $datasets[1]['data'][] = $completed;
918
- $datasets[2]['data'][] = $pending;
919
- }
920
-
921
- $dataset_params = array(
922
- array(
923
- 'color1' => 'rgba(47, 167, 255, %s)',
924
- 'color2' => '#FFF',
925
- 'label' => __( 'All', 'learnpress' )
926
- ),
927
- array(
928
- 'color1' => 'rgba(212, 208, 203, %s)',
929
- 'color2' => '#FFF',
930
- 'label' => __( 'Completed', 'learnpress' )
931
- ),
932
- array(
933
- 'color1' => 'rgba(234, 199, 155, %s)',
934
- 'color2' => '#FFF',
935
- 'label' => __( 'Pending', 'learnpress' )
936
- )
937
- );
938
-
939
- foreach ( $dataset_params as $k => $v ) {
940
- $datasets[$k]['fillColor'] = sprintf( $v['color1'], '0.2' );
941
- $datasets[$k]['strokeColor'] = sprintf( $v['color1'], '1' );
942
- $datasets[$k]['pointColor'] = sprintf( $v['color1'], '1' );
943
- $datasets[$k]['pointStrokeColor'] = $v['color2'];
944
- $datasets[$k]['pointHighlightFill'] = $v['color2'];
945
- $datasets[$k]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );
946
- $datasets[$k]['label'] = $v['label'];
947
- }
948
-
949
- return array(
950
- 'labels' => $labels,
951
- 'datasets' => $datasets,
952
- 'sql' => $query
953
- );
954
  }
955
 
956
  /**
957
  * Get data about courses to render in the chart
958
  * @return array
959
  */
960
- function learn_press_get_chart_courses2() {
961
- $labels = array( __( 'Pending Courses / Publish Courses', 'learnpress' ), __( 'Free Courses / Priced Courses', 'learnpress' ) );
962
- $datasets = array();
963
- $datasets[0]['data'] = array( learn_press_get_courses_by_status( 'pending' ), learn_press_get_courses_by_price( 'free' ) );
964
- $datasets[1]['data'] = array( learn_press_get_courses_by_status( 'publish' ), learn_press_get_courses_by_price( 'not_free' ) );
965
-
966
- $colors = learn_press_get_admin_colors();
967
- $datasets[0]['fillColor'] = $colors[1];
968
- $datasets[0]['strokeColor'] = $colors[1];
969
- $datasets[1]['fillColor'] = $colors[3];
970
- $datasets[1]['strokeColor'] = $colors[3];
971
- return array(
972
- 'labels' => $labels,
973
- 'datasets' => $datasets
974
- );
 
 
 
 
 
 
 
 
 
 
 
975
  }
976
 
977
  /**
978
  * Get colors setting up by admin user
979
  * @return array
980
  */
981
- function learn_press_get_admin_colors() {
982
- $admin_color = get_user_meta( get_current_user_id(), 'admin_color', true );
983
- global $_wp_admin_css_colors;
984
- $colors = array();
985
- if ( !empty( $_wp_admin_css_colors[$admin_color]->colors ) ) {
986
- $colors = $_wp_admin_css_colors[$admin_color]->colors;
987
- }
988
- if ( empty ( $colors[0] ) ) {
989
- $colors[0] = '#000000';
990
- }
991
- if ( empty ( $colors[2] ) ) {
992
- $colors[2] = '#00FF00';
993
- }
994
- return $colors;
 
 
995
  }
996
 
997
  /**
@@ -999,58 +1044,63 @@ function learn_press_get_admin_colors() {
999
  *
1000
  * @param array $chart
1001
  */
1002
- function learn_press_process_chart( $chart = array() ) {
1003
- $data = json_encode(
1004
- array(
1005
- 'labels' => $chart['labels'],
1006
- 'datasets' => $chart['datasets']
1007
- )
1008
- );
1009
- echo $data;
 
1010
  }
1011
 
1012
  /**
1013
  * Print out the configuration for admin chart
1014
  */
1015
- function learn_press_config_chart() {
1016
- $colors = learn_press_get_admin_colors();
1017
- $config = array(
1018
- 'scaleShowGridLines' => true,
1019
- 'scaleGridLineColor' => "#777",
1020
- 'scaleGridLineWidth' => 0.3,
1021
- 'scaleFontColor' => "#444",
1022
- 'scaleLineColor' => $colors[0],
1023
- 'bezierCurve' => true,
1024
- 'bezierCurveTension' => 0.2,
1025
- 'pointDotRadius' => 5,
1026
- 'pointDotStrokeWidth' => 5,
1027
- 'pointHitDetectionRadius' => 20,
1028
- 'datasetStroke' => true,
1029
- 'responsive' => true,
1030
- 'tooltipFillColor' => $colors[2],
1031
- 'tooltipFontColor' => "#eee",
1032
- 'tooltipCornerRadius' => 0,
1033
- 'tooltipYPadding' => 10,
1034
- 'tooltipXPadding' => 10,
1035
- 'barDatasetSpacing' => 10,
1036
- 'barValueSpacing' => 200
1037
-
1038
- );
1039
- echo json_encode( $config );
 
1040
  }
1041
 
1042
- function set_post_order_in_admin( $wp_query ) {
1043
- global $pagenow;
1044
- if ( isset( $_GET['post_type'] ) ) {
1045
- $post_type = $_GET['post_type'];
1046
- } else $post_type = '';
1047
- if ( is_admin() && 'edit.php' == $pagenow && $post_type == LP_COURSE_CPT && !isset( $_GET['orderby'] ) ) {
1048
- $wp_query->set( 'orderby', 'date' );
1049
- $wp_query->set( 'order', 'DSC' );
1050
- }
 
 
 
1051
  }
1052
 
1053
- add_filter( 'pre_get_posts', 'set_post_order_in_admin' );
1054
  /**
1055
  * Add actions to the list of the course. e.g: Duplicate link
1056
  *
@@ -1058,71 +1108,74 @@ add_filter( 'pre_get_posts', 'set_post_order_in_admin' );
1058
  *
1059
  * @return mixed
1060
  */
1061
- function learn_press_add_row_action_link( $actions ) {
1062
- global $post;
1063
- if ( LP_COURSE_CPT == $post->post_type ) {
1064
- $duplicate_link = admin_url( 'edit.php?post_type=lp_course&action=lp-duplicate-course&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'lp-duplicate-' . $post->ID ) );
1065
- $duplicate_link = array(
1066
- array(
1067
- 'link' => $duplicate_link,
1068
- 'title' => __( 'Duplicate this course', 'learnpress' ),
1069
- 'class' => 'lp-duplicate-course'
1070
- )
1071
- );
1072
- $links = apply_filters( 'learn_press_row_action_links', $duplicate_link );
1073
- if ( count( $links ) > 1 ) {
1074
- $drop_down = array( '<ul class="lpr-row-action-dropdown">' );
1075
- foreach ( $links as $link ) {
1076
- $drop_down[] = '<li>' . sprintf( '<a href="%s" class="%s">%s</a>', $link['link'], $link['class'], $link['title'] ) . '</li>';
1077
- };
1078
- $drop_down[] = '</ul>';
1079
- $link = sprintf( '<div class="lpr-row-actions"><a href="%s">%s</a>%s</div>', 'javascript: void(0);', __( 'Course', 'learnpress' ), join( "\n", $drop_down ) );
1080
- } else {
1081
- $link = array_shift( $links );
1082
- $link = sprintf( '<a href="%s" class="%s">%s</a>', $link['link'], $link['class'], $link['title'] );
1083
- }
1084
- $actions['lpr-course-row-action'] = $link;
1085
- } else if ( LP_QUIZ_CPT === $post->post_type ) {
1086
- unset( $actions['view'] );
1087
- $url = admin_url( 'edit.php?post_type=' . LP_QUIZ_CPT . '&lp-action=lp-duplicate-quiz&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'lp-duplicate-' . $post->ID ) );
1088
- $link = sprintf( '<a href="%s" class="lp-duplicate-lesson">%s</a>', $url, __( 'Duplicate this quiz', 'learnpress' ) );
1089
- $actions['lpr-course-row-action'] = $link;
1090
- } else if ( LP_QUESTION_CPT === $post->post_type ) {
1091
- unset( $actions['view'] );
1092
- $url = admin_url( 'edit.php?post_type=' . LP_QUESTION_CPT . '&lp-action=lp-duplicate-question&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'lp-duplicate-' . $post->ID ) );
1093
- $link = sprintf( '<a href="%s" class="lp-duplicate-lesson">%s</a>', $url, __( 'Duplicate this question', 'learnpress' ) );
1094
- $actions['lpr-course-row-action'] = $link;
1095
- } else if ( LP_LESSON_CPT === $post->post_type ) {
1096
- unset( $actions['view'] );
1097
- $url = admin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&lp-action=lp-duplicate-lesson&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'lp-duplicate-' . $post->ID ) );
1098
- $link = sprintf( '<a href="%s" class="lp-duplicate-lesson">%s</a>', $url, __( 'Duplicate this lesson', 'learnpress' ) );
1099
- $actions['lpr-course-row-action'] = $link;
1100
- }
1101
- return $actions;
 
 
1102
  }
1103
 
1104
- add_filter( 'post_row_actions', 'learn_press_add_row_action_link' );
1105
- add_filter( 'page_row_actions', 'learn_press_add_row_action_link' );
1106
-
1107
- function learn_press_copy_post_meta( $from_id, $to_id ) {
1108
- global $wpdb;
1109
- $course_meta = $wpdb->get_results(
1110
- $wpdb->prepare( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d", $from_id )
1111
- );
1112
- if ( count( $course_meta ) != 0 ) {
1113
- $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
1114
- $sql_query_sel = array();
1115
-
1116
- foreach ( $course_meta as $meta ) {
1117
- $meta_key = $meta->meta_key;
1118
- $meta_value = addslashes( $meta->meta_value );
1119
-
1120
- $sql_query_sel[] = "SELECT {$to_id}, '$meta_key', '$meta_value'";
1121
- }
1122
-
1123
- $sql_query .= implode( " UNION ALL ", $sql_query_sel );
1124
- $wpdb->query( $sql_query );
1125
- }
 
1126
  }
1127
 
1128
  /**
@@ -1130,172 +1183,176 @@ function learn_press_copy_post_meta( $from_id, $to_id ) {
1130
  *
1131
  * @author TuNN
1132
  */
1133
- function learn_press_process_duplicate_action() {
1134
-
1135
- $wp_list_table = _get_list_table( 'WP_Posts_List_Table' );
1136
- $action = $wp_list_table->current_action();
1137
-
1138
- if ( isset( $_REQUEST['action'] ) && $action == 'lp-duplicate-course' ) {
1139
- // current is not usefully because this feature using ajax action
1140
- $post_id = isset( $_REQUEST['post'] ) ? $_REQUEST['post'] : 0;
1141
- $nonce = !empty( $_REQUEST['nonce'] ) ? $_REQUEST['nonce'] : '';
1142
- if ( !wp_verify_nonce( $nonce, 'lp-duplicate-' . $post_id ) ) {
1143
- wp_die( __( 'Error', 'learnpress' ) );
1144
- }
1145
- if ( $post_id && is_array( $post_id ) ) {
1146
- $post_id = array_shift( $post_id );
1147
- }
1148
- // check for post is exists
1149
- if ( !( $post_id && $post = get_post( $post_id ) ) ) {
1150
- wp_die( __( 'Oops! The course does not exist.', 'learnpress' ) );
1151
- }
1152
- // ensure that user can create course
1153
- if ( !current_user_can( 'edit_posts' ) ) {
1154
- wp_die( __( 'Sorry! You have not permission to duplicate this course.', 'learnpress' ) );
1155
- }
1156
-
1157
- // assign course to current user
1158
- $current_user = wp_get_current_user();
1159
- $new_course_author = $current_user->ID;
1160
-
1161
- // setup course data
1162
- $new_course_title = $post->post_title . ' - Copy';
1163
- $args = array(
1164
- 'comment_status' => $post->comment_status,
1165
- 'ping_status' => $post->ping_status,
1166
- 'post_author' => $new_course_author,
1167
- 'post_content' => $post->post_content,
1168
- 'post_excerpt' => $post->post_excerpt,
1169
- 'post_name' => $post->post_name,
1170
- 'post_parent' => $post->post_parent,
1171
- 'post_password' => $post->post_password,
1172
- 'post_status' => 'draft',
1173
- 'post_title' => $new_course_title,
1174
- 'post_type' => $post->post_type,
1175
- 'to_ping' => $post->to_ping,
1176
- 'menu_order' => $post->menu_order
1177
- );
1178
-
1179
- // insert new course and get it ID
1180
- $new_post_id = wp_insert_post( $args );
1181
-
1182
- if ( !$new_post_id ) {
1183
- LP_Admin_Notice::add_redirect( __( '<p>Sorry! Duplicate course failed!</p>', 'learnpress' ) );
1184
- wp_redirect( admin_url( 'edit.php?post_type=lp_course' ) );
1185
- exit();
1186
- }
1187
- // assign related tags/categories to new course
1188
- $taxonomies = get_object_taxonomies( $post->post_type );
1189
- foreach ( $taxonomies as $taxonomy ) {
1190
- $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
1191
- wp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false );
1192
- }
1193
-
1194
- // duplicate course data
1195
- global $wpdb;
1196
- //learn_press_copy_post_meta( $post_id, $new_post_id );
1197
-
1198
- $query = $wpdb->prepare( "
1199
  SELECT *
1200
  FROM {$wpdb->prefix}learnpress_sections s
1201
  INNER JOIN {$wpdb->posts} c ON c.ID = s.section_course_id
1202
  WHERE c.ID = %d
1203
- ", $post->ID );
1204
- if ( $sections = $wpdb->get_results( $query ) ) {
1205
- foreach ( $sections as $section ) {
1206
- $new_section_id = $wpdb->insert(
1207
- $wpdb->prefix . 'learnpress_sections',
1208
- array(
1209
- 'section_name' => $section->section_name,
1210
- 'section_course_id' => $new_post_id,
1211
- 'section_order' => $section->section_order,
1212
- 'section_description' => $section->section_description
1213
- ),
1214
- array( '%s', '%d', '%d', '%s' )
1215
- );
1216
- if ( $new_section_id ) {
1217
- $query = $wpdb->prepare( "
1218
  SELECT i.*
1219
  FROM {$wpdb->posts} i
1220
  INNER JOIN {$wpdb->prefix}learnpress_sections s ON i.item_id = i.ID
1221
  WHERE s.section_id = %d
1222
- ", $section->section_id );
1223
- if ( $items = $wpdb->get_results( $query ) ) {
1224
- foreach ( $items as $item ) {
1225
- $item_args = (array) $item;
1226
- unset(
1227
- $item_args['ID'],
1228
- $item_args['post_author'],
1229
- $item_args['post_date'],
1230
- $item_args['post_date_gmt'],
1231
- $item_args['post_modified'],
1232
- $item_args['post_modified_gmt'],
1233
- $item_args['comment_count']
1234
- );
1235
- $new_item_id = $wpdb->insert(
1236
- $wpdb->posts,
1237
- $item_args
1238
- );
1239
- }
1240
- }
1241
- }
1242
- }
1243
- }
1244
- LP_Admin_Notice::add_redirect( __( '<p>Course duplicated.</p>', 'learnpress' ) );
1245
- wp_redirect( admin_url( "post.php?post={$new_post_id}&action=edit" ) );
1246
- die();
1247
- }
1248
-
1249
- // duplicate action
1250
- $action = !empty( $_REQUEST['lp-action'] ) ? $_REQUEST['lp-action'] : '';
1251
- $actions = array(
1252
- 'lp-duplicate-question',
1253
- 'lp-duplicate-lesson',
1254
- 'lp-duplicate-quiz'
1255
- );
1256
- if ( !in_array( $action, $actions ) ) {
1257
- return;
1258
- }
1259
-
1260
- $post_id = !empty ( $_REQUEST['post'] ) ? $_REQUEST['post'] : 0;
1261
- $nonce = !empty( $_REQUEST['nonce'] ) ? $_REQUEST['nonce'] : '';
1262
- if ( !$post_id || !wp_verify_nonce( $nonce, 'lp-duplicate-' . $post_id ) ) return;
1263
- // only duplicate question. not assign any data
1264
- $new_post_id = 0;
1265
- if ( $action === 'lp-duplicate-question' ) {
1266
- $new_post_id = learn_press_duplicate_question( $post_id );
1267
- $post_type = LP_QUESTION_CPT;
1268
- $error = __( 'Sorry! Duplicate question failed!', 'learnpress' );
1269
- $success = __( 'Question duplicated.', 'learnpress' );
1270
- } else if ( $action === 'lp-duplicate-lesson' ) {
1271
- $new_post_id = learn_press_duplicate_lesson( $post_id );
1272
- $post_type = LP_LESSON_CPT;
1273
- $error = __( 'Sorry! Duplicate lesson failed!', 'learnpress' );
1274
- $success = __( 'Lesson duplicated.', 'learnpress' );
1275
- } else if ( $action === 'lp-duplicate-quiz' ) {
1276
- $new_post_id = learn_press_duplicate_quiz( $post_id );
1277
- $post_type = LP_QUIZ_CPT;
1278
- $error = __( 'Sorry! Duplicate quiz failed!', 'learnpress' );
1279
- $success = __( 'Quiz duplicated.', 'learnpress' );
1280
- }
1281
-
1282
- if ( !$new_post_id ) return;
1283
- $redirect = 0;
1284
- if ( is_wp_error( $new_post_id ) ) {
1285
- LP_Admin_Notice::add_redirect( $error, 'error' );
1286
- $redirect = admin_url( 'edit.php?post_type=' . $post_type );
1287
- } else {
1288
- LP_Admin_Notice::add_redirect( $success, 'updated' );
1289
- $redirect = admin_url( 'post.php?post=' . $new_post_id . '&action=edit' );
1290
- }
1291
-
1292
- if ( $redirect ) {
1293
- wp_safe_redirect( $redirect );
1294
- exit();
1295
- }
 
 
 
 
1296
  }
1297
 
1298
- add_action( 'load-edit.php', 'learn_press_process_duplicate_action' );
1299
 
1300
  /**
1301
  * Install a plugin
@@ -1304,78 +1361,84 @@ add_action( 'load-edit.php', 'learn_press_process_duplicate_action' );
1304
  *
1305
  * @return array
1306
  */
1307
- function learn_press_install_add_on( $plugin_name ) {
1308
- require_once( LP_PLUGIN_PATH . '/inc/admin/class-lp-upgrader.php' );
1309
- $upgrader = new LP_Upgrader();
1310
- global $wp_filesystem;
1311
- $response = array();
1312
-
1313
- $package = 'http://thimpress.com/lprepo/' . $plugin_name . '.zip';
1314
-
1315
- $package = $upgrader->download_package( $package );
1316
- if ( is_wp_error( $package ) ) {
1317
- $response['error'] = $package;
1318
- } else {
1319
- $working_dir = $upgrader->unpack_package( $package, true, $plugin_name );
1320
- if ( is_wp_error( $working_dir ) ) {
1321
- $response['error'] = $working_dir;
1322
- } else {
1323
-
1324
- $wp_upgrader = new WP_Upgrader();
1325
- $options = array(
1326
- 'source' => $working_dir,
1327
- 'destination' => WP_PLUGIN_DIR,
1328
- 'clear_destination' => false, // Do not overwrite files.
1329
- 'clear_working' => true,
1330
- 'hook_extra' => array(
1331
- 'type' => 'plugin',
1332
- 'action' => 'install'
1333
- )
1334
- );
1335
- //$response = array();
1336
- $result = $wp_upgrader->install_package( $options );
1337
-
1338
- if ( is_wp_error( $result ) ) {
1339
- $response['error'] = $result;
1340
- } else {
1341
- $response = $result;
1342
- $response['text'] = __( 'Installed', 'learnpress' );
1343
- }
1344
- }
1345
- }
1346
- return $response;
 
 
1347
  }
1348
 
1349
- function learn_press_accept_become_a_teacher() {
1350
- $action = !empty( $_REQUEST['action'] ) ? $_REQUEST['action'] : '';
1351
- $user_id = !empty( $_REQUEST['user_id'] ) ? $_REQUEST['user_id'] : '';
1352
- if ( !$action || !$user_id || ( $action != 'accept-to-be-teacher' ) ) return;
1353
-
1354
- if ( !learn_press_user_maybe_is_a_teacher( $user_id ) ) {
1355
- $be_teacher = new WP_User( $user_id );
1356
- $be_teacher->set_role( LP_TEACHER_ROLE );
1357
- delete_transient( 'learn_press_become_teacher_sent_' . $user_id );
1358
- do_action( 'learn_press_user_become_a_teacher', $user_id );
1359
- $redirect = add_query_arg( 'become-a-teacher-accepted', 'yes' );
1360
- $redirect = remove_query_arg( 'action', $redirect );
1361
- wp_redirect( $redirect );
1362
- }
 
 
 
1363
  }
1364
 
1365
- add_action( 'plugins_loaded', 'learn_press_accept_become_a_teacher' );
1366
-
1367
- function learn_press_user_become_a_teacher_notice() {
1368
- if ( $user_id = learn_press_get_request( 'user_id' ) && learn_press_get_request( 'become-a-teacher-accepted' ) == 'yes' ) {
1369
- $user = new WP_User( $user_id );
1370
- ?>
1371
- <div class="updated">
1372
- <p><?php printf( __( 'The user %s has become a teacher', 'learnpress' ), $user->user_login ); ?></p>
1373
- </div>
1374
- <?php
1375
- }
 
1376
  }
1377
 
1378
- add_action( 'admin_notices', 'learn_press_user_become_a_teacher_notice' );
1379
 
1380
  /**
1381
  * Check to see if a plugin is already installed or not
@@ -1384,9 +1447,11 @@ add_action( 'admin_notices', 'learn_press_user_become_a_teacher_notice' );
1384
  *
1385
  * @return bool
1386
  */
1387
- function learn_press_is_plugin_install( $plugin ) {
1388
- $installed_plugins = get_plugins();
1389
- return isset( $installed_plugins[$plugin] );
 
 
1390
  }
1391
 
1392
  /**
@@ -1396,26 +1461,29 @@ function learn_press_is_plugin_install( $plugin ) {
1396
  *
1397
  * @return mixed
1398
  */
1399
- function learn_press_plugin_basename_from_slug( $slug ) {
1400
- $keys = array_keys( get_plugins() );
1401
- foreach ( $keys as $key ) {
1402
- if ( preg_match( '|^' . $slug . '/|', $key ) ) {
1403
- return $key;
1404
- }
1405
- }
1406
- return $slug;
 
 
1407
  }
1408
 
1409
- function learn_press_one_click_install_sample_data_notice() {
1410
- $courses = get_posts(
1411
- array(
1412
- 'post_type' => LP_COURSE_CPT,
1413
- 'post_status' => 'any'
1414
- )
1415
- );
1416
- if ( ( 0 == sizeof( $courses ) ) && ( 'off' != get_transient( 'learn_press_install_sample_data' ) ) ) {
1417
- printf(
1418
- '<div class="updated" id="learn-press-install-sample-data-notice">
 
1419
  <div class="install-sample-data-notice">
1420
  <p>%s</p>
1421
  <p>%s <strong>%s</strong> %s
@@ -1425,485 +1493,519 @@ function learn_press_one_click_install_sample_data_notice() {
1425
  <p>Importing...</p>
1426
  </div>
1427
  </div>',
1428
- __( 'You haven\'t got any courses yet! Would you like to import sample data?', 'learnpress' ),
1429
- __( 'If yes, it requires to install addon name', 'learnpress' ),
1430
- __( 'LearnPress Import/Export', 'learnpress' ),
1431
- __( 'but don\'t worry because it is completely automated.', 'learnpress' ),
1432
- __( 'Import now', 'learnpress' ),
1433
- __( 'No, thanks!', 'learnpress' )
1434
- );
1435
- }
1436
  }
1437
 
1438
  //add_action( 'admin_notices', 'learn_press_one_click_install_sample_data_notice' );
1439
 
1440
- function learn_press_request_query( $vars = array() ) {
1441
- global $typenow, $wp_query, $wp_post_statuses;
1442
- if ( LP_ORDER_CPT === $typenow ) {
1443
- // Status
1444
- if ( !isset( $vars['post_status'] ) ) {
1445
- $post_statuses = learn_press_get_order_statuses();
 
1446
 
1447
- foreach ( $post_statuses as $status => $value ) {
1448
- if ( isset( $wp_post_statuses[$status] ) && false === $wp_post_statuses[$status]->show_in_admin_all_list ) {
1449
- unset( $post_statuses[$status] );
1450
- }
1451
- }
1452
 
1453
- $vars['post_status'] = array_keys( $post_statuses );
1454
 
1455
- }
1456
- }
1457
- return $vars;
 
1458
  }
1459
 
1460
- add_filter( 'request', 'learn_press_request_query', 0 );
1461
 
1462
- function _learn_press_reset_course_data() {
1463
- if ( empty( $_REQUEST['reset-course-data'] ) ) {
1464
- return false;
1465
- }
1466
- learn_press_reset_course_data( intval( $_REQUEST['reset-course-data'] ) );
1467
- wp_redirect( remove_query_arg( 'reset-course-data' ) );
 
1468
  }
1469
 
1470
- add_action( 'init', '_learn_press_reset_course_data' );
1471
 
1472
  /***********************/
1473
- function learn_press_admin_section_loop_item_class( $item, $section ) {
1474
- $classes = array(
1475
- 'lp-section-item'
1476
- );
1477
- $classes[] = 'lp-item-' . $item->post_type;
1478
- if ( !absint( $item->ID ) ) {
1479
- $classes[] = 'lp-item-empty lp-item-new focus';
1480
- }
1481
- $classes = apply_filters( 'learn_press_section_loop_item_class', $classes, $item, $section );
1482
- if ( $classes ) echo 'class="' . join( ' ', $classes ) . '"';
1483
- return $classes;
 
 
 
 
1484
  }
1485
 
1486
- function learn_press_disable_checked_ontop( $args ) {
 
1487
 
1488
- if ( 'course_category' == $args['taxonomy'] ) {
1489
- $args['checked_ontop'] = false;
1490
- }
1491
 
1492
- return $args;
1493
  }
1494
 
1495
- add_filter( 'wp_terms_checklist_args', 'learn_press_disable_checked_ontop' );
1496
 
1497
- function learn_press_output_admin_template() {
1498
- learn_press_admin_view( 'admin-template.php' );
 
1499
  }
1500
 
1501
- add_action( 'admin_print_scripts', 'learn_press_output_admin_template' );
1502
 
1503
- function learn_press_output_screen_id() {
1504
- $screen = get_current_screen();
1505
- if ( $screen ) {
1506
- echo "<div style=\"position:fixed;top: 0; left:0; z-index: 99999999; background-color:#FFF;padding:4px;\">" . $screen->id . "</div>";
1507
- }
 
1508
  }
1509
 
1510
  //add_action( 'admin_head', 'learn_press_output_screen_id' );
1511
 
1512
- function learn_press_get_screens() {
1513
- $screen_id = sanitize_title( __( 'LearnPress', 'learnpress' ) );
1514
- $screens = array(
1515
- 'toplevel_page_' . $screen_id,
1516
- $screen_id . '_page_learn-press-statistics',
1517
- $screen_id . '_page_learn-press-addons',
1518
- $screen_id . '_page_learn-press-settings',
1519
- $screen_id . '_page_learn-press-tools'
1520
- );
1521
- foreach ( array( LP_COURSE_CPT, LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT, LP_ORDER_CPT ) as $post_type ) {
1522
- $screens[] = 'edit-' . $post_type;
1523
- $screens[] = $post_type;
1524
- }
1525
-
1526
- return apply_filters( 'learn_press_screen_ids', $screens );
 
1527
  }
1528
 
1529
- function learn_press_get_admin_pages() {
1530
- return apply_filters(
1531
- 'learn_press_admin_pages',
1532
- array(
1533
- 'learn-press-settings',
1534
- 'learn-press-settings'
1535
- )
1536
- );
 
1537
  }
1538
 
1539
- function learn_press_is_post_type_screen( $post_type, $union = 'OR' ) {
1540
- if ( is_array( $post_type ) ) {
1541
- $return = null;
1542
- foreach ( $post_type as $_post_type ) {
1543
- $check = learn_press_is_post_type_screen( $_post_type );
1544
- if ( $union == 'OR' && $check ) {
1545
- return true;
1546
- }
1547
- if ( $return == null ) {
1548
- $return = $check;
1549
- } else {
1550
- $return = $return && $check;
1551
- }
1552
- if ( $union !== 'OR' ) {
1553
- return $return;
1554
- }
1555
- }
1556
- return $return;
1557
- }
1558
- $screen = get_current_screen();
1559
- if ( !$screen ) {
1560
- return;
1561
- }
1562
- $screen_id = $screen->id;
1563
- return in_array( $screen_id, array( $post_type, "edit-{$post_type}" ) );
 
 
 
1564
  }
1565
 
1566
- function learn_press_get_notice_dismiss( $context, $type = 'transient' ) {
1567
- if ( $type == 'transient' ) {
1568
- return get_transient( 'learn_press_dismiss_notice_' . $context );
1569
- }
1570
- return get_option( 'learn_press_dismiss_notice_' . $context );
 
 
1571
  }
1572
 
1573
- if ( !function_exists( 'learn_press_course_insert_section' ) ) {
1574
-
1575
- function learn_press_course_insert_section( $section = array() ) {
1576
- global $wpdb;
1577
- $section = wp_parse_args(
1578
- $section,
1579
- array(
1580
- 'section_name' => '',
1581
- 'section_course_id' => 0,
1582
- 'section_order' => 0,
1583
- 'section_description' => ''
1584
- )
1585
- );
1586
- $section = stripslashes_deep( $section );
1587
- extract( $section );
1588
-
1589
- $insert_data = compact( 'section_name', 'section_course_id', 'section_order', 'section_description' );
1590
- $wpdb->insert(
1591
- $wpdb->learnpress_sections,
1592
- $insert_data,
1593
- array( '%s', '%d', '%d' )
1594
- );
1595
-
1596
- return $wpdb->insert_id;
1597
- }
 
1598
 
1599
  }
1600
 
1601
- if ( !function_exists( 'learn_press_course_insert_section_item' ) ) {
1602
-
1603
- function learn_press_course_insert_section_item( $item_data = array() ) {
1604
- global $wpdb;
1605
- $wpdb->insert(
1606
- $wpdb->learnpress_section_items,
1607
- array(
1608
- 'section_id' => $item_data['section_id'],
1609
- 'item_id' => $item_data['item_id'],
1610
- 'item_order' => $item_data['item_order'],
1611
- 'item_type' => $item_data['item_type']
1612
- ),
1613
- array(
1614
- '%d',
1615
- '%d',
1616
- '%d',
1617
- '%s',
1618
- )
1619
- );
1620
- return $wpdb->insert_id;
1621
- }
 
 
1622
 
1623
  }
1624
 
1625
- if ( !function_exists( 'learn_press_duplicate_post' ) ) {
1626
-
1627
- function learn_press_duplicate_post( $post_id = null, $args = array(), $meta = true ) {
1628
- $post = get_post( $post_id );
1629
- if ( !$post ) return;
1630
- $defalts = array(
1631
- 'comment_status' => $post->comment_status,
1632
- 'ping_status' => $post->ping_status,
1633
- 'post_author' => get_current_user_id(),
1634
- 'post_content' => $post->post_content,
1635
- 'post_excerpt' => $post->post_excerpt,
1636
- 'post_parent' => $post->post_parent,
1637
- 'post_password' => $post->post_password,
1638
- 'post_status' => 'draft',
1639
- 'post_title' => $post->post_title . ' - Copy',
1640
- 'post_type' => $post->post_type,
1641
- 'to_ping' => $post->to_ping,
1642
- 'menu_order' => $post->menu_order
1643
- );
1644
- $args = wp_parse_args( $args, $defalts );
1645
- $new_post_id = wp_insert_post( $args );
1646
-
1647
- if ( !is_wp_error( $new_post_id ) && $meta ) {
1648
- learn_press_duplicate_post_meta( $post_id, $new_post_id );
1649
- // assign related tags/categories to new course
1650
- $taxonomies = get_object_taxonomies( $post->post_type );
1651
- foreach ( $taxonomies as $taxonomy ) {
1652
- $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
1653
- wp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false );
1654
- }
1655
- }
1656
- return apply_filters( 'learn_press_duplicate_post', $new_post_id, $post_id );
1657
- }
 
 
 
1658
  }
1659
 
1660
- if ( !function_exists( 'learn_press_duplicate_post_meta' ) ) {
1661
- /**
1662
- * duplicate all post meta just in two SQL queries
1663
- */
1664
- function learn_press_duplicate_post_meta( $old_post_id, $new_post_id, $excerpt = array() ) {
1665
- global $wpdb;
1666
- $post_meta_infos = $wpdb->get_results( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$old_post_id" );
1667
- if ( count( $post_meta_infos ) != 0 ) {
1668
- $excerpt = array_merge( array( '_edit_lock', '_edit_last' ), $excerpt );
1669
- $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
1670
- $sql_query_sel = array();
1671
- foreach ( $post_meta_infos as $meta ) {
1672
- if ( in_array( $meta->meta_value, $excerpt ) ) {
1673
- continue;
1674
- }
1675
- $meta_key = $meta->meta_key;
1676
- $meta_value = addslashes( $meta->meta_value );
1677
- $sql_query_sel[] = "SELECT $new_post_id, '$meta_key', '$meta_value'";
1678
- }
1679
- $sql_query .= implode( " UNION ALL ", $sql_query_sel );
1680
- $wpdb->query( $sql_query );
1681
- }
1682
- }
 
 
 
 
 
1683
 
1684
  }
1685
 
1686
- add_filter( 'learn_press_question_types', 'learn_press_sort_questions', 99 );
1687
- if ( !function_exists( 'learn_press_sort_questions' ) ) {
1688
- function learn_press_sort_questions( $types ) {
1689
- $user_id = get_current_user_id();
1690
- $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
1691
- if ( !empty( $question_types ) ) {
1692
- $sort = array();
1693
- // re-sort array descending
1694
- arsort( $question_types );
1695
- $new_types = array();
1696
- $ktypes = array_keys( $types );
1697
-
1698
- for ( $i = 0; $i < count( $ktypes ) - 1; $i ++ ) {
1699
- $max = $i;
1700
- if ( !isset( $question_types[$ktypes[$i]] ) ) {
1701
- $question_types[$ktypes[$i]] = 0;
1702
- }
1703
- for ( $j = $i + 1; $j < count( $ktypes ); $j ++ ) {
1704
- if ( isset( $question_types[$ktypes[$j]], $question_types[$ktypes[$max]] )
1705
- && $question_types[$ktypes[$j]] > $question_types[$ktypes[$max]]
1706
- ) {
1707
- $max = $j;
1708
- }
1709
- }
1710
- $tmp = $ktypes[$i];
1711
- $ktypes[$i] = $ktypes[$max];
1712
- $ktypes[$max] = $tmp;
1713
- }
1714
- $ktypes = array_flip( $ktypes );
1715
- $types = array_merge( $ktypes, $types );
1716
- }
1717
- return $types;
1718
- }
 
 
1719
  }
1720
 
1721
- if ( !function_exists( 'learn_press_duplicate_course' ) ) {
1722
-
1723
- function learn_press_duplicate_course( $course_id = null, $force = true ) {
1724
- if ( !function_exists( '_learn_press_get_course_curriculum' ) ) {
1725
- require_once LP_PLUGIN_PATH . 'inc/lp-init.php';
1726
- }
1727
- global $wpdb;
1728
-
1729
- if ( $course_id && is_array( $course_id ) ) {
1730
- $course_id = array_shift( $course_id );
1731
- }
1732
- // check for post is exists
1733
- if ( !$course_id || !( $post = get_post( $course_id ) ) ) {
1734
- return new WP_Error( __( '<p>Op! The course does not exist</p>', 'learnpress' ) );
1735
- } else {
1736
- // ensure that user can create course
1737
- if ( !current_user_can( 'edit_posts' ) ) {
1738
- return new WP_Error( __( '<p>Sorry! You have not permission to duplicate this course</p>', 'learnpress' ) );
1739
- } else {
1740
- // duplicate course
1741
- $new_course_id = learn_press_duplicate_post( $course_id );
1742
- if ( !$new_course_id || is_wp_error( $new_course_id ) ) {
1743
- return new WP_Error( __( '<p>Sorry! Duplicate course failed!</p>', 'learnpress' ) );
1744
- } else {
1745
- $curriculums = _learn_press_get_course_curriculum( $course_id );
1746
- foreach ( $curriculums as $section_id => $section ) {
1747
- $new_section_id = learn_press_course_insert_section( array(
1748
- 'section_name' => $section->section_name,
1749
- 'section_course_id' => $new_course_id,
1750
- 'section_order' => $section->section_order,
1751
- 'section_description' => $section->section_description
1752
- ) );
1753
-
1754
- if ( $section->items ) {
1755
- foreach ( $section->items as $item ) {
1756
- // duplicate item
1757
- if ( $force && $item->post_type === LP_QUIZ_CPT ) {
1758
- $item_id = learn_press_duplicate_quiz( $item->ID, array( 'post_status' => 'publish' ) );
1759
- } else {
1760
- $item_id = learn_press_duplicate_post( $item->ID, array( 'post_status' => 'publish' ) );
1761
- }
1762
- if ( $force ) {
1763
- $section_item_id = learn_press_course_insert_section_item( array(
1764
- 'section_id' => $new_section_id,
1765
- 'item_id' => $item_id,
1766
- 'item_order' => $item->item_order,
1767
- 'item_type' => $item->item_type
1768
- ) );
1769
- }
1770
- }
1771
- }
1772
- }
1773
- return $new_course_id;
1774
- }
1775
- }
1776
- }
1777
- }
 
 
1778
 
1779
  }
1780
 
1781
- if ( !function_exists( 'learn_press_duplicate_question' ) ) {
1782
-
1783
- function learn_press_duplicate_question( $question_id = null, $quiz_id = null ) {
1784
- if ( !$question_id || !get_post( $question_id ) ) {
1785
- return new WP_Error( sprintf( __( 'Question id %s is not exists.', 'learnpress' ), $question_id ) );
1786
- }
1787
- if ( $quiz_id && !get_post( $quiz_id ) ) {
1788
- return new WP_Error( sprintf( __( 'Quiz id %s is not exists.', 'learnpress' ), $quiz_id ) );
1789
- }
1790
-
1791
- global $wpdb;
1792
- $new_question_id = learn_press_duplicate_post( $question_id );
1793
- if ( $quiz_id ) {
1794
- // learnpress_quiz_questions
1795
- $sql = $wpdb->prepare( "
 
1796
  SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d
1797
- ", $quiz_id, $question_id );
1798
- $quiz_question_data = $wpdb->get_row( $sql );
1799
- $max_order = $wpdb->get_var( $wpdb->prepare( "SELECT max(question_order) FROM {$wpdb->prefix}learnpress_quiz_questions WHERE quiz_id = %d", $quiz_id ) );
1800
-
1801
- if ( $quiz_question_data ) {
1802
- $wpdb->insert(
1803
- $wpdb->learnpress_quiz_questions,
1804
- array(
1805
- 'quiz_id' => $quiz_id,
1806
- 'question_id' => $new_question_id,
1807
- 'question_order' => $max_order + 1,
1808
- 'params' => $quiz_question_data->params
1809
- ),
1810
- array(
1811
- '%d',
1812
- '%d',
1813
- '%d',
1814
- '%s'
1815
- )
1816
- );
1817
- }
1818
- }
1819
- // learnpress_question_answers
1820
- $sql = $wpdb->prepare( "
1821
  SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d
1822
- ", $question_id );
1823
- $question_answers = $wpdb->get_results( $sql );
1824
- if ( $question_answers ) {
1825
- foreach ( $question_answers as $q_a ) {
1826
- $wpdb->insert(
1827
- $wpdb->learnpress_question_answers,
1828
- array(
1829
- 'question_id' => $new_question_id,
1830
- 'answer_data' => $q_a->answer_data,
1831
- 'answer_order' => $q_a->answer_order
1832
- ),
1833
- array(
1834
- '%d',
1835
- '%s',
1836
- '%s'
1837
- )
1838
- );
1839
- }
1840
- }
1841
-
1842
- return $new_question_id;
1843
- }
1844
 
1845
  }
1846
 
1847
- if ( !function_exists( 'learn_press_duplicate_quiz' ) ) {
1848
-
1849
- function learn_press_duplicate_quiz( $quiz_id = null, $args = array() ) {
1850
- global $wpdb;
1851
- $new_quiz_id = learn_press_duplicate_post( $quiz_id, $args, true );
1852
- $quiz = LP_Quiz::get_quiz( $quiz_id );
1853
- $questions = $quiz->get_questions();
1854
- if ( $questions ) {
1855
- $questions = array_keys( $questions );
1856
- foreach ( $questions as $question_id ) {
1857
- $new_question_id = learn_press_duplicate_post( $question_id );
1858
- // learnpress_quiz_questions
1859
- $sql = $wpdb->prepare( "
 
1860
  SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d
1861
- ", $quiz_id, $question_id );
1862
- $quiz_question_data = $wpdb->get_row( $sql );
1863
- if ( $quiz_question_data ) {
1864
- $wpdb->insert(
1865
- $wpdb->learnpress_quiz_questions,
1866
- array(
1867
- 'quiz_id' => $new_quiz_id,
1868
- 'question_id' => $new_question_id,
1869
- 'question_order' => $quiz_question_data->question_order,
1870
- 'params' => $quiz_question_data->params
1871
- ),
1872
- array(
1873
- '%d',
1874
- '%d',
1875
- '%d',
1876
- '%s'
1877
- )
1878
- );
1879
- }
1880
- // learnpress_question_answers
1881
- $sql = $wpdb->prepare( "
1882
  SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d
1883
- ", $question_id );
1884
- $question_answers = $wpdb->get_results( $sql );
1885
- if ( $question_answers ) {
1886
- foreach ( $question_answers as $q_a ) {
1887
- $wpdb->insert(
1888
- $wpdb->learnpress_question_answers,
1889
- array(
1890
- 'question_id' => $new_question_id,
1891
- 'answer_data' => $q_a->answer_data,
1892
- 'answer_order' => $q_a->answer_order
1893
- ),
1894
- array(
1895
- '%d',
1896
- '%s',
1897
- '%s'
1898
- )
1899
- );
1900
- }
1901
- }
1902
- }
1903
- }
1904
-
1905
- return $new_quiz_id;
1906
- }
1907
 
1908
  }
1909
 
@@ -1914,18 +2016,21 @@ if ( !function_exists( 'learn_press_duplicate_quiz' ) ) {
1914
  *
1915
  * @return string
1916
  */
1917
- function learn_press_get_file_version( $file ) {
1918
- if ( !file_exists( $file ) ) {
1919
- return '';
1920
- }
1921
- $fp = fopen( $file, 'r' );
1922
- $file_data = fread( $fp, 8192 );
1923
- fclose( $fp );
1924
- $file_data = str_replace( "\r", "\n", $file_data );
1925
- $version = '';
1926
- if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] )
1927
- $version = _cleanup_header_comment( $match[1] );
1928
- return $version;
 
 
 
1929
  }
1930
 
1931
  /**
@@ -1935,164 +2040,375 @@ function learn_press_get_file_version( $file ) {
1935
  *
1936
  * @return array|bool
1937
  */
1938
- function learn_press_get_theme_templates( $check = false ) {
1939
- $template_folder = learn_press_template_path();
1940
- $template_path = LP_PLUGIN_PATH . '/templates/';
1941
- $template_dir = get_template_directory();
1942
- $stylesheet_dir = get_stylesheet_directory();
1943
- $t_folder = basename( $template_dir );
1944
- $s_folder = basename( $stylesheet_dir );
1945
-
1946
- $found_files = array( $t_folder => array(), $s_folder => array() );
1947
- $outdated_templates = false;
1948
-
1949
- $scanned_files = learn_press_scan_template_files( $template_path );
1950
- foreach ( $scanned_files as $file ) {
1951
- $theme_folder = '';
1952
-
1953
- if ( file_exists( $stylesheet_dir . '/' . $file ) ) {
1954
- $theme_file = $stylesheet_dir . '/' . $file;
1955
- $theme_folder = $s_folder;
1956
- } elseif ( file_exists( $stylesheet_dir . '/' . $template_folder . '/' . $file ) ) {
1957
- $theme_file = $stylesheet_dir . '/' . $template_folder . '/' . $file;
1958
- $theme_folder = $s_folder;
1959
- } elseif ( file_exists( $template_dir . '/' . $file ) ) {
1960
- $theme_file = $template_dir . '/' . $file;
1961
- $theme_folder = $t_folder;
1962
- } elseif ( file_exists( $template_dir . '/' . $template_folder . '/' . $file ) ) {
1963
- $theme_file = $template_dir . '/' . $template_folder . '/' . $file;
1964
- $theme_folder = $t_folder;
1965
- } else {
1966
- $theme_file = false;
1967
- }
1968
-
1969
- if ( !empty( $theme_file ) ) {
1970
- $core_version = learn_press_get_file_version( $template_path . $file );
1971
- $theme_version = learn_press_get_file_version( $theme_file );
1972
-
1973
- if ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '<' ) ) ) {
1974
- if ( !$outdated_templates ) {
1975
- $outdated_templates = true;
1976
- }
1977
- $found_files[$theme_folder][] = array(
1978
- str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ),
1979
- $theme_version ? $theme_version : '-',
1980
- $core_version,
1981
- true
1982
- );
1983
- } else {
1984
- $found_files[$theme_folder][] = array(
1985
- str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ),
1986
- $theme_version ? $theme_version : '?',
1987
- $core_version ? $core_version : '?',
1988
- null
1989
- );
1990
- }
1991
- }
1992
- if ( $check && $outdated_templates ) {
1993
- return $outdated_templates;
1994
- }
1995
- }
1996
- if ( sizeof( $found_files ) > 1 ) {
1997
- $found_files = array_merge( $found_files[$t_folder], $found_files[$s_folder] );
1998
- } else {
1999
- $found_files = reset( $found_files );
2000
- }
2001
- return $check ? $outdated_templates : $found_files;
 
 
2002
  }
2003
 
2004
- function learn_press_detect_outdated_template() {
2005
- $template_folder = learn_press_template_path();
2006
- $template_path = LP_PLUGIN_PATH . '/templates/';
2007
- $template_dir = get_template_directory();
2008
- $stylesheet_dir = get_stylesheet_directory();
2009
- $scanned_files = learn_press_scan_template_files( $template_path );
2010
- $parent_item = 0;
2011
- $child_item = 0;
2012
-
2013
- foreach ( $scanned_files as $file ) {
2014
- $theme_file = false;
2015
- $cradle = '';
2016
-
2017
- if ( $stylesheet_dir == $template_dir ) { // Parent theme
2018
- if ( file_exists( $template_dir . '/' . $file ) ) {
2019
- $theme_file = $template_dir . '/' . $file;
2020
- $cradle = 'parent';
2021
- }
2022
- elseif ( file_exists( $template_dir . '/' . $template_folder . '/' . $file ) ) {
2023
- $theme_file = $template_dir . '/' . $template_folder . '/' . $file;
2024
- $cradle = 'parent';
2025
- }
2026
- }
2027
- else { // Child Theme
2028
- if ( file_exists( $stylesheet_dir . '/' . $file ) ) {
2029
- $theme_file = $stylesheet_dir . '/' . $file;
2030
- $cradle = 'child';
2031
- }
2032
- elseif ( file_exists( $stylesheet_dir . '/' . $template_folder . '/' . $file ) ) {
2033
- $theme_file = $stylesheet_dir . '/' . $template_folder . '/' . $file;
2034
- $cradle = 'child';
2035
- }
2036
- elseif ( file_exists( $template_dir . '/' . $file ) ) {
2037
- $theme_file = $template_dir . '/' . $file;
2038
- $cradle = 'parent';
2039
- }
2040
- elseif ( file_exists( $template_dir . '/' . $template_folder . '/' . $file ) ) {
2041
- $theme_file = $template_dir . '/' . $template_folder . '/' . $file;
2042
- $cradle = 'parent';
2043
- }
2044
- }
2045
-
2046
- if ( !empty( $theme_file ) ) {
2047
- $core_version = learn_press_get_file_version( $template_path . $file );
2048
- $theme_version = learn_press_get_file_version( $theme_file );
2049
-
2050
- if ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '<' ) ) ) {
2051
- if ( $cradle == 'parent' ) {
2052
- $parent_item ++;
2053
- }
2054
- else {
2055
- $child_item ++;
2056
- }
2057
- }
2058
- }
2059
- }
2060
- if ( !empty( $child_item ) || !empty( $parent_item ) ) {
2061
-
2062
- return array(
2063
- 'parent_item' => $parent_item,
2064
- 'child_item' => $child_item
2065
- );
2066
- }
2067
- return false;
2068
  }
2069
 
2070
- function learn_press_scan_template_files( $template_path ) {
2071
-
2072
- $files = @scandir( $template_path );
2073
- $result = array();
2074
-
2075
- if ( !empty( $files ) ) {
2076
- foreach ( $files as $key => $value ) {
2077
- if ( !in_array( $value, array( ".", "..", 'index.php', 'index.html' ) ) ) {
2078
- if ( is_dir( $template_path . '/' . $value ) ) {
2079
- $sub_files = learn_press_scan_template_files( $template_path . '/' . $value );
2080
- foreach ( $sub_files as $sub_file ) {
2081
- $result[] = $value . '/' . $sub_file;
2082
- }
2083
- } else {
2084
- $result[] = $value;
2085
- }
2086
- }
2087
- }
2088
- }
2089
- return $result;
 
 
2090
  }
2091
 
2092
- if ( !function_exists( 'learn_press_duplicate_lesson' ) ) {
2093
 
2094
- function learn_press_duplicate_lesson( $lesson_id = null ) {
2095
- return learn_press_duplicate_post( $lesson_id );
2096
- }
 
2097
 
2098
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  * @version 1.0
8
  */
9
 
10
+ if (!defined('ABSPATH')) {
11
+ exit;
12
  }
13
  /**
14
  * Get html view path for admin to display
18
  *
19
  * @return mixed
20
  */
21
+ function learn_press_get_admin_view($name, $plugin_file = null)
22
+ {
23
+ if (!preg_match('/\.(.*)$/', $name)) {
24
+ $name .= '.php';
25
+ }
26
+ if ($plugin_file) {
27
+ $view = dirname($plugin_file) . '/inc/admin/views/' . $name;
28
+ } else {
29
+ $view = LP()->plugin_path('inc/admin/views/' . $name);
30
+ }
31
+
32
+ return apply_filters('learn_press_admin_view', $view, $name);
33
  }
34
 
35
  /**
36
  * Find a full path of a view and display the content in admin
37
  *
38
  * @param $name
39
+ * @param array $args
40
  * @param bool|false $include_once
41
  * @param bool
42
  *
43
  * @return bool
44
  */
45
+ function learn_press_admin_view($name, $args = array(), $include_once = false, $return = false)
46
+ {
47
+ $view = learn_press_get_admin_view($name, !empty($args['plugin_file']) ? $args['plugin_file'] : null);
48
+ if (file_exists($view)) {
49
+ ob_start();
50
+ // extract parameters as local variables if passed
51
+ is_array($args) && extract($args);
52
+ do_action('learn_press_before_display_admin_view', $name, $args);
53
+ if ($include_once) {
54
+ include_once $view;
55
+ } else {
56
+ include $view;
57
+ }
58
+ do_action('learn_press_after_display_admin_view', $name, $args);
59
+ $output = ob_get_clean();
60
+ if (!$return) {
61
+ echo $output;
62
+ }
63
+
64
+ return $return ? $output : true;
65
+ }
66
+
67
+ return false;
68
  }
69
 
70
  /**
72
  *
73
  * @param $name
74
  * @param bool|false $selected
75
+ * @param array $args
76
  *
77
  * @return mixed|string
78
  */
79
+ function learn_press_pages_dropdown($name, $selected = false, $args = array())
80
+ {
81
+ $id = null;
82
+ $class = null;
83
+ $css = null;
84
+ $before = array(
85
+ 'add_new_page' => __('[ Add a new page ]', 'learnpress')
86
+ );
87
+ $after = null;
88
+ $echo = true;
89
+ $allow_create = true;
90
+ is_array($args) && extract($args);
91
+
92
+ if (empty($id)) {
93
+ $id = $name;
94
+ }
95
+ $args = array(
96
+ 'name' => $name,
97
+ 'id' => $id,
98
+ 'sort_column' => 'menu_order',
99
+ 'sort_order' => 'ASC',
100
+ 'show_option_none' => __('Select Page', 'learnpress'),
101
+ 'class' => $class,
102
+ 'echo' => false,
103
+ 'selected' => $selected,
104
+ 'allow_create' => true
105
+ );
106
+ $output = wp_dropdown_pages($args);
107
+ $replace = "";
108
+
109
+ $class .= 'learn-press-dropdown-pages';
110
+
111
+ if ($class) {
112
+ $replace .= ' class="' . $class . '"';
113
+ }
114
+ if ($css) {
115
+ $replace .= ' style="' . $css . '"';
116
+ }
117
+
118
+ $replace .= ' data-selected="' . $selected . '"';
119
+ $replace .= " data-placeholder='" . __('Select a page&hellip;', 'learnpress') . "' id=";
120
+ $output = str_replace(' id=', $replace, $output);
121
+ if ($before) {
122
+ $before_output = array();
123
+ foreach ($before as $v => $l) {
124
+ $before_output[] = sprintf('<option value="%s">%s</option>', $v, $l);
125
+ }
126
+ $before_output = join("\n", $before_output);
127
+ $output = preg_replace('!(<option class=".*" value="[0-9]+".*>.*</option>)!', $before_output . "\n$1", $output, 1);
128
+ }
129
+ if ($allow_create) {
130
+ ob_start(); ?>
131
+ <button class="button button-quick-add-page" data-id="<?php echo $id; ?>"
132
+ type="button"><?php _e('Create', 'learnpress'); ?></button>
133
+ <p class="learn-press-quick-add-page-inline <?php echo $id; ?> hide-if-js">
134
+ <input type="text" placeholder="<?php esc_attr_e('New page title', 'learnpress'); ?>"/>
135
+ <button class="button" type="button"><?php esc_html_e('Ok [Enter]', 'learnpress'); ?></button>
136
+ <a href=""><?php _e('Cancel [ESC]', 'learnpress'); ?></a>
137
+ </p>
138
+ <p class="learn-press-quick-add-page-actions <?php echo $id; ?><?php echo $selected ? '' : ' hide-if-js'; ?>">
139
+ <a class="edit-page" href="<?php echo get_edit_post_link($selected); ?>"
140
+ target="_blank"><?php _e('Edit Page', 'learnpress'); ?></a>
141
+ <a class="view-page" href="<?php echo get_permalink($selected); ?>"
142
+ target="_blank"><?php _e('View Page', 'learnpress'); ?></a>
143
+ </p>
144
+ <?php $output .= ob_get_clean();
145
+ }
146
+ if ($echo) {
147
+ echo $output;
148
+ }
149
+
150
+ return $output;
151
  }
152
 
153
  /**
157
  *
158
  * @return string
159
  */
160
+ function learn_press_dropdown_question_types($args = array())
161
+ {
162
+ $args = wp_parse_args(
163
+ $args,
164
+ array(
165
+ 'name' => 'learn-press-dropdown-question-types',
166
+ 'id' => '',
167
+ 'class' => '',
168
+ 'selected' => '',
169
+ 'echo' => true
170
+ )
171
+ );
172
+ if (!$args['id']) {
173
+ $args['id'] = $args['name'];
174
+ }
175
+ $args['class'] = 'lp-dropdown-question-types' . ($args['class'] ? ' ' . $args['class'] : '');
176
+ $types = learn_press_question_types();
177
+ $output = sprintf('<select name="%s" id="%s" class="%s"%s>', $args['name'], $args['id'], $args['class'], $args['selected'] ? 'data-selected="' . $args['selected'] . '"' : '');
178
+ foreach ($types as $slug => $name) {
179
+ $output .= sprintf('<option value="%s"%s>%s</option>', $slug, selected($slug == $args['selected'], true, false), $name);
180
+ }
181
+ $output .= '</select>';
182
+ if ($args['echo']) {
183
+ echo $output;
184
+ }
185
+
186
+ return $output;
187
  }
188
 
189
  /**
193
  *
194
  * @return string
195
  */
196
+ function learn_press_field_question_duration($args = array(), $question)
197
+ {
198
+ global $post;
199
+ $duration_type = get_post_meta($post->ID, "_lp_duration_type", true);
200
+ $value = get_post_meta($question->id, '_question_duration', true);
201
+
202
+ $wrap_class = 'learn-press-question-duration';
203
+ if ('questions_duration' !== $duration_type) {
204
+ $wrap_class .= ' hide';
205
+ }
206
+ $args = wp_parse_args(
207
+ $args,
208
+ array(
209
+ 'name' => 'learn_press_question[' . $question->id . '][duration]',
210
+ 'id' => 'learn-press-question-duration-' . $question->id,
211
+ 'class' => 'learn-press-question-duration',
212
+ 'selected' => '',
213
+ 'echo' => true,
214
+ 'value' => 0,
215
+ 'step' => 1,
216
+ 'min' => 0,
217
+ 'placeholder' => __('Minutes', 'learnpress'),
218
+ )
219
+ );
220
+ $args['value'] = $value;
221
+
222
+ if (!$args['id']) {
223
+ $args['id'] = $args['name'];
224
+ }
225
+
226
+ return '<span class="' . esc_attr($wrap_class) . '">' . sprintf(
227
+ '<input type="number" class="%s" name="%s" id="%s" value="%s" step="%s" min="%s" max="%s" placeholder="%s"/>',
228
+ $args['class'],
229
+ $args['name'],
230
+ empty($args['clone']) ? $args['id'] : '',
231
+ $args['value'],
232
+ $args['step'],
233
+ $args['min'],
234
+ !empty($args['max']) ? $args['max'] : '',
235
+ $args['placeholder']
236
+ ) . $args['placeholder'] . '</span>';
237
  }
238
 
239
  /**
243
  *
244
  * @return string
245
  */
246
+ function learn_press_email_formats_dropdown($args = array())
247
+ {
248
+ $args = wp_parse_args(
249
+ $args,
250
+ array(
251
+ 'name' => 'learn-press-dropdown-email-formats',
252
+ 'id' => '',
253
+ 'class' => '',
254
+ 'selected' => '',
255
+ 'echo' => true
256
+ )
257
+ );
258
+ $formats = array(
259
+ //'text_message' => __( 'Text message', 'learnpress' ),
260
+ 'plain_text' => __('Plain text', 'learnpress'),
261
+ 'html' => __('HTML', 'learnpress'),
262
+ //'multipart' => __( 'Multipart', 'learnpress' )
263
+ );
264
+ $output = sprintf('<select name="%s" id="%s" class="%s" %s>', $args['name'], $args['id'], $args['class'], '');
265
+ foreach ($formats as $name => $text) {
266
+ $output .= sprintf('<option value="%s" %s>%s</option>', $name, selected($args['selected'] == $name, true, false), $text) . "\n";
267
+ }
268
+ $output .= '</select>';
269
+
270
+ if ($args['echo']) {
271
+ echo $output;
272
+ }
273
+
274
+ return $output;
275
  }
276
 
277
  /**************************************************/
281
  /**
282
  * Translate javascript text
283
  */
284
+ function learn_press_admin_localize_script()
285
+ {
286
+ if (defined('LP_DOING_AJAX') || !is_admin()) {
287
+ return;
288
+ }
289
+ $translate = array(
290
+ 'quizzes_is_not_available' => __('Quiz is not available', 'learnpress'),
291
+ 'lessons_is_not_available' => __('Lesson is not available', 'learnpress'),
292
+ 'duplicate_course' => array(
293
+ 'title' => __('Duplicate course', 'learnpress'),
294
+ 'message' => __('Duplicate course curriculum?', 'learnpress')
295
+ ),
296
+ 'duplicate_question' => array(
297
+ 'title' => __('Duplicate Question', 'learnpress'),
298
+ 'message' => __('Do you want to duplicate this question?', 'learnpress')
299
+ ),
300
+ 'remove_question' => __('Do you want to remove this question from quiz?', 'learnpress'),
301
+ 'nonces' => array(
302
+ 'duplicate_question' => wp_create_nonce('duplicate-question')
303
+ )
304
+ );
305
+ LP_Assets::add_localize($translate);
306
  }
307
 
308
+ add_action('init', 'learn_press_admin_localize_script');
309
 
310
  /**
311
  * Default admin settings pages
312
  *
313
  * @return mixed
314
  */
315
+ function learn_press_settings_tabs_array()
316
+ {
317
+ $tabs = array(
318
+ 'general' => __('General', 'learnpress'),
319
+ 'courses' => __('Courses', 'learnpress'),
320
+ 'pages' => __('Pages', 'learnpress'),
321
+ 'payments' => __('Payments', 'learnpress'),
322
+ 'checkout' => __('Checkout', 'learnpress'),
323
+ //'profile' => __( 'Profile', 'learnpress' ),
324
+ 'emails' => __('Emails', 'learnpress')
325
+ );
326
+
327
+ return apply_filters('learn_press_settings_tabs_array', $tabs);
328
  }
329
 
330
  /**
335
  *
336
  * @return int
337
  */
338
+ function learn_press_get_order_by_time($by, $time)
339
+ {
340
+ global $wpdb;
341
+ $user_id = get_current_user_id();
342
+
343
+ $y = date('Y', $time);
344
+ $m = date('m', $time);
345
+ $d = date('d', $time);
346
+ switch ($by) {
347
+ case 'days':
348
+ $orders = $wpdb->get_var(
349
+ $wpdb->prepare(
350
+ "SELECT COUNT(*)
351
  FROM $wpdb->posts AS p
352
  INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id
353
  WHERE p.post_author = %d
356
  AND m.meta_key = %s
357
  AND m.meta_value = %s
358
  AND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s AND DAY(p.post_date) = %s",
359
+ $user_id, LP_ORDER_CPT, 'publish', '_learn_press_transaction_status', 'completed', $y, $m, $d
360
+ )
361
+ );
362
+ break;
363
+ case 'months':
364
+ $orders = $wpdb->get_var(
365
+ $wpdb->prepare(
366
+ "SELECT COUNT(*)
367
  FROM $wpdb->posts AS p
368
  INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id
369
  WHERE p.post_author = %d
372
  AND m.meta_key = %s
373
  AND m.meta_value = %s
374
  AND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s",
375
+ $user_id, LP_ORDER_CPT, 'publish', '_learn_press_transaction_status', 'completed', $y, $m
376
+ )
377
+ );
378
+ break;
379
+ }
380
+
381
+ return $orders;
382
  }
383
 
384
  /**
388
  *
389
  * @return int
390
  */
391
+ function learn_press_get_courses_by_status($status)
392
+ {
393
+ global $wpdb;
394
+ $user_id = get_current_user_id();
395
+ $courses = $wpdb->get_var(
396
+ $wpdb->prepare(
397
+ "SELECT COUNT(*)
398
  FROM $wpdb->posts
399
  WHERE post_author = %d
400
  AND post_type = %s
401
  AND post_status = %s",
402
+ $user_id, LP_COURSE_CPT, $status
403
+ )
404
+ );
405
+
406
+ return $courses;
407
  }
408
 
409
  /**
413
  *
414
  * @return int
415
  */
416
+ function learn_press_get_courses_by_price($fee)
417
+ {
418
+ global $wpdb;
419
+ $user_id = get_current_user_id();
420
+ $courses = $wpdb->get_var(
421
+ $wpdb->prepare(
422
+ "SELECT COUNT(*)
423
  FROM $wpdb->posts AS p
424
  INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id
425
  WHERE p.post_author = %d
427
  AND p.post_status IN (%s, %s)
428
  AND m.meta_key = %s
429
  AND m.meta_value = %s",
430
+ $user_id, LP_COURSE_CPT, 'publish', 'pending', '_lpr_course_payment', $fee
431
+ )
432
+ );
433
+
434
+ return $courses;
435
  }
436
 
437
  /**
443
  *
444
  * @return array
445
  */
446
+ function learn_press_get_chart_students($from = null, $by = null, $time_ago)
447
+ {
448
+ $labels = array();
449
+ $datasets = array();
450
+ if (is_null($from)) {
451
+ $from = current_time('mysql');
452
+ }
453
+ // $by: days, months or years
454
+ if (is_null($by)) {
455
+ $by = 'days';
456
+ }
457
+ switch ($by) {
458
+ case 'days':
459
+ $date_format = 'M d';
460
+ break;
461
+ case 'months':
462
+ $date_format = 'M Y';
463
+ break;
464
+ case 'years':
465
+ $date_format = 'Y';
466
+ break;
467
+ }
468
+
469
+ for ($i = -$time_ago + 1; $i <= 0; $i++) {
470
+ $labels[] = date($date_format, strtotime("$i $by", strtotime($from)));
471
+ $datasets[0]['data'][] = learn_press_get_order_by_time($by, strtotime("$i $by", strtotime($from)));
472
+ }
473
+ $colors = learn_press_get_admin_colors();
474
+ $datasets[0]['fillColor'] = 'rgba(255,255,255,0.1)';
475
+ $datasets[0]['strokeColor'] = $colors[0];
476
+ $datasets[0]['pointColor'] = $colors[0];
477
+ $datasets[0]['pointStrokeColor'] = $colors[2];
478
+ $datasets[0]['pointHighlightFill'] = $colors[2];
479
+ $datasets[0]['pointHighlightStroke'] = $colors[0];
480
+
481
+ return array(
482
+ 'labels' => $labels,
483
+ 'datasets' => $datasets
484
+ );
485
  }
486
 
487
  /**
493
  *
494
  * @return array
495
  */
496
+ function learn_press_get_chart_users($from = null, $by = null, $time_ago)
497
+ {
498
+ global $wpdb;
499
+
500
+ $labels = array();
501
+ $datasets = array();
502
+ if (is_null($from)) {
503
+ $from = current_time('mysql');
504
+ }
505
+ if (is_null($by)) {
506
+ $by = 'days';
507
+ }
508
+ $results = array(
509
+ 'all' => array(),
510
+ 'instructors' => array()
511
+ );
512
+ $from_time = is_numeric($from) ? $from : strtotime($from);
513
+
514
+ switch ($by) {
515
+ case 'days':
516
+ $date_format = 'M d Y';
517
+ $_from = -$time_ago + 1;
518
+ $_from = date('Y-m-d', strtotime("{$_from} {$by}", $from_time));
519
+ $_to = date('Y-m-d', $from_time);
520
+ $_sql_format = '%Y-%m-%d';
521
+ $_key_format = 'Y-m-d';
522
+ break;
523
+ case 'months':
524
+ $date_format = 'M Y';
525
+ $_from = -$time_ago + 1;
526
+ $_from = date('Y-m-01', strtotime("{$_from} {$by}", $from_time));
527
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
528
+ $_to = date('Y-m-' . $days, $from_time);
529
+ $_sql_format = '%Y-%m';
530
+ $_key_format = 'Y-m';
531
+ break;
532
+ case 'years':
533
+ $date_format = 'Y';
534
+ $_from = -$time_ago + 1;
535
+ $_from = date('Y-01-01', strtotime("{$_from} {$by}", $from_time));
536
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
537
+ $_to = date('Y-12-' . $days, $from_time);
538
+ $_sql_format = '%Y';
539
+ $_key_format = 'Y';
540
+
541
+ break;
542
+ }
543
+ $query = $wpdb->prepare("
544
  SELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d
545
  FROM {$wpdb->users} u
546
  WHERE 1
547
  GROUP BY d
548
  HAVING d BETWEEN %s AND %s
549
  ORDER BY d ASC
550
+ ", $_sql_format, $_from, $_to);
551
+ if ($_results = $wpdb->get_results($query)) {
552
+ foreach ($_results as $k => $v) {
553
+ $results['all'][$v->d] = $v;
554
+ }
555
+ }
556
+ $query = $wpdb->prepare("
557
  SELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d
558
  FROM {$wpdb->users} u
559
  INNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s AND ( um.meta_value LIKE %s OR um.meta_value LIKE %s )
561
  GROUP BY d
562
  HAVING d BETWEEN %s AND %s
563
  ORDER BY d ASC
564
+ ", $_sql_format, 'wp_capabilities', '%' . $wpdb->esc_like('s:13:"administrator"') . '%', '%' . $wpdb->esc_like('s:10:"lp_teacher"') . '%', $_from, $_to);
565
+
566
+ if ($_results = $wpdb->get_results($query)) {
567
+ foreach ($_results as $k => $v) {
568
+ $results['instructors'][$v->d] = $v;
569
+ }
570
+ }
571
+ for ($i = -$time_ago + 1; $i <= 0; $i++) {
572
+ $date = strtotime("$i $by", $from_time);
573
+ $labels[] = date($date_format, $date);
574
+ $key = date($_key_format, $date);
575
+
576
+ $all = !empty($results['all'][$key]) ? $results['all'][$key]->c : 0;
577
+ $instructors = !empty($results['instructors'][$key]) ? $results['instructors'][$key]->c : 0;
578
+
579
+ $datasets[0]['data'][] = $all;
580
+ $datasets[1]['data'][] = $instructors;
581
+ $datasets[2]['data'][] = $all - $instructors;
582
+ }
583
+
584
+ $dataset_params = array(
585
+ array(
586
+ 'color1' => 'rgba(47, 167, 255, %s)',
587
+ 'color2' => '#FFF',
588
+ 'label' => __('All', 'learnpress')
589
+ ),
590
+ array(
591
+ 'color1' => 'rgba(212, 208, 203, %s)',
592
+ 'color2' => '#FFF',
593
+ 'label' => __('Instructors', 'learnpress')
594
+ ),
595
+ array(
596
+ 'color1' => 'rgba(234, 199, 155, %s)',
597
+ 'color2' => '#FFF',
598
+ 'label' => __('Students', 'learnpress')
599
+ )
600
+ );
601
+
602
+ foreach ($dataset_params as $k => $v) {
603
+ $datasets[$k]['fillColor'] = sprintf($v['color1'], '0.2');
604
+ $datasets[$k]['strokeColor'] = sprintf($v['color1'], '1');
605
+ $datasets[$k]['pointColor'] = sprintf($v['color1'], '1');
606
+ $datasets[$k]['pointStrokeColor'] = $v['color2'];
607
+ $datasets[$k]['pointHighlightFill'] = $v['color2'];
608
+ $datasets[$k]['pointHighlightStroke'] = sprintf($v['color1'], '1');
609
+ $datasets[$k]['label'] = $v['label'];
610
+ }
611
+
612
+ return array(
613
+ 'labels' => $labels,
614
+ 'datasets' => $datasets,
615
+ 'sql' => $query
616
+ );
617
  }
618
 
619
 
626
  *
627
  * @return array
628
  */
629
+ function learn_press_get_chart_courses($from = null, $by = null, $time_ago)
630
+ {
631
+ global $wpdb;
632
+
633
+ $labels = array();
634
+ $datasets = array();
635
+ if (is_null($from)) {
636
+ $from = current_time('mysql');
637
+ }
638
+ if (is_null($by)) {
639
+ $by = 'days';
640
+ }
641
+ $results = array(
642
+ 'all' => array(),
643
+ 'public' => array(),
644
+ 'pending' => array(),
645
+ 'free' => array(),
646
+ 'paid' => array()
647
+ );
648
+ $from_time = is_numeric($from) ? $from : strtotime($from);
649
+
650
+ switch ($by) {
651
+ case 'days':
652
+ $date_format = 'M d Y';
653
+ $_from = -$time_ago + 1;
654
+ $_from = date('Y-m-d', strtotime("{$_from} {$by}", $from_time));
655
+ $_to = date('Y-m-d', $from_time);
656
+ $_sql_format = '%Y-%m-%d';
657
+ $_key_format = 'Y-m-d';
658
+ break;
659
+ case 'months':
660
+ $date_format = 'M Y';
661
+ $_from = -$time_ago + 1;
662
+ $_from = date('Y-m-01', strtotime("{$_from} {$by}", $from_time));
663
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
664
+ $_to = date('Y-m-' . $days, $from_time);
665
+ $_sql_format = '%Y-%m';
666
+ $_key_format = 'Y-m';
667
+ break;
668
+ case 'years':
669
+ $date_format = 'Y';
670
+ $_from = -$time_ago + 1;
671
+ $_from = date('Y-01-01', strtotime("{$_from} {$by}", $from_time));
672
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
673
+ $_to = date('Y-12-' . $days, $from_time);
674
+ $_sql_format = '%Y';
675
+ $_key_format = 'Y';
676
+
677
+ break;
678
+ }
679
+
680
+ $query_where = '';
681
+ if (current_user_can(LP_TEACHER_ROLE)) {
682
+ $user_id = learn_press_get_current_user_id();
683
+ $query_where .= $wpdb->prepare(" AND c.post_author=%d ", $user_id);
684
+ }
685
+
686
+ $query = $wpdb->prepare("
687
  SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
688
  FROM {$wpdb->posts} c
689
  WHERE 1
692
  GROUP BY d
693
  HAVING d BETWEEN %s AND %s
694
  ORDER BY d ASC
695
+ ", $_sql_format, 'lp_course', $_from, $_to);
696
+ if ($_results = $wpdb->get_results($query)) {
697
+ foreach ($_results as $k => $v) {
698
+ $results['all'][$v->d] = $v;
699
+ }
700
+ }
701
+ $query = $wpdb->prepare("
702
  SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
703
  FROM {$wpdb->posts} c
704
  WHERE 1
707
  GROUP BY d
708
  HAVING d BETWEEN %s AND %s
709
  ORDER BY d ASC
710
+ ", $_sql_format, 'publish', 'lp_course', $_from, $_to);
711
+ if ($_results = $wpdb->get_results($query)) {
712
+ foreach ($_results as $k => $v) {
713
+ $results['publish'][$v->d] = $v;
714
+ }
715
+ }
716
+
717
+ $query = $wpdb->prepare("
718
  SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
719
  FROM {$wpdb->posts} c
720
  INNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID AND cm.meta_key = %s AND cm.meta_value = %s
724
  GROUP BY d
725
  HAVING d BETWEEN %s AND %s
726
  ORDER BY d ASC
727
+ ", $_sql_format, '_lp_payment', 'yes', 'publish', 'lp_course', $_from, $_to);
728
+ if ($_results = $wpdb->get_results($query)) {
729
+ foreach ($_results as $k => $v) {
730
+ $results['paid'][$v->d] = $v;
731
+ }
732
+ }
733
+
734
+ for ($i = -$time_ago + 1; $i <= 0; $i++) {
735
+ $date = strtotime("$i $by", $from_time);
736
+ $labels[] = date($date_format, $date);
737
+ $key = date($_key_format, $date);
738
+
739
+ $all = !empty($results['all'][$key]) ? $results['all'][$key]->c : 0;
740
+ $publish = !empty($results['publish'][$key]) ? $results['publish'][$key]->c : 0;
741
+ $paid = !empty($results['paid'][$key]) ? $results['paid'][$key]->c : 0;
742
+
743
+ $datasets[0]['data'][] = $all;
744
+ $datasets[1]['data'][] = $publish;
745
+ $datasets[2]['data'][] = $all - $publish;
746
+ $datasets[3]['data'][] = $paid;
747
+ $datasets[4]['data'][] = $all - $paid;
748
+ }
749
+
750
+ $dataset_params = array(
751
+ array(
752
+ 'color1' => 'rgba(47, 167, 255, %s)',
753
+ 'color2' => '#FFF',
754
+ 'label' => __('All', 'learnpress')
755
+ ),
756
+ array(
757
+ 'color1' => 'rgba(212, 208, 203, %s)',
758
+ 'color2' => '#FFF',
759
+ 'label' => __('Publish', 'learnpress')
760
+ ),
761
+ array(
762
+ 'color1' => 'rgba(234, 199, 155, %s)',
763
+ 'color2' => '#FFF',
764
+ 'label' => __('Pending', 'learnpress')
765
+ ),
766
+ array(
767
+ 'color1' => 'rgba(234, 199, 155, %s)',
768
+ 'color2' => '#FFF',
769
+ 'label' => __('Paid', 'learnpress')
770
+ ),
771
+ array(
772
+ 'color1' => 'rgba(234, 199, 155, %s)',
773
+ 'color2' => '#FFF',
774
+ 'label' => __('Free', 'learnpress')
775
+ )
776
+ );
777
+
778
+ foreach ($dataset_params as $k => $v) {
779
+ $datasets[$k]['fillColor'] = sprintf($v['color1'], '0.2');
780
+ $datasets[$k]['strokeColor'] = sprintf($v['color1'], '1');
781
+ $datasets[$k]['pointColor'] = sprintf($v['color1'], '1');
782
+ $datasets[$k]['pointStrokeColor'] = $v['color2'];
783
+ $datasets[$k]['pointHighlightFill'] = $v['color2'];
784
+ $datasets[$k]['pointHighlightStroke'] = sprintf($v['color1'], '1');
785
+ $datasets[$k]['label'] = $v['label'];
786
+ }
787
+
788
+ return array(
789
+ 'labels' => $labels,
790
+ 'datasets' => $datasets,
791
+ 'sql' => $query
792
+ );
793
  }
794
 
795
 
802
  *
803
  * @return array
804
  */
805
+ function learn_press_get_chart_orders($from = null, $by = null, $time_ago)
806
+ {
807
+ global $wpdb;
808
  // var_dump( current_user_can(LP_TEACHER_ROLE) );
809
  // exit();
810
+ $report_sales_by = learn_press_get_request('report_sales_by');
811
+ $course_id = learn_press_get_request('course_id');
812
+ $cat_id = learn_press_get_request('cat_id');
813
+
814
+ $labels = array();
815
+ $datasets = array();
816
+ if (is_null($from)) {
817
+ $from = current_time('mysql');
818
+ }
819
+ if (is_null($by)) {
820
+ $by = 'days';
821
+ }
822
+ $results = array(
823
+ 'all' => array(),
824
+ 'completed' => array(),
825
+ 'pending' => array()
826
+ );
827
+ $from_time = is_numeric($from) ? $from : strtotime($from);
828
+
829
+ switch ($by) {
830
+ case 'days':
831
+ $date_format = 'M d Y';
832
+ $_from = -$time_ago + 1;
833
+ $_from = date('Y-m-d', strtotime("{$_from} {$by}", $from_time));
834
+ $_to = date('Y-m-d', $from_time);
835
+ $_sql_format = '%Y-%m-%d';
836
+ $_key_format = 'Y-m-d';
837
+ break;
838
+ case 'months':
839
+ $date_format = 'M Y';
840
+ $_from = -$time_ago + 1;
841
+ $_from = date('Y-m-01', strtotime("{$_from} {$by}", $from_time));
842
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
843
+ $_to = date('Y-m-' . $days, $from_time);
844
+ $_sql_format = '%Y-%m';
845
+ $_key_format = 'Y-m';
846
+ break;
847
+ case 'years':
848
+ $date_format = 'Y';
849
+ $_from = -$time_ago + 1;
850
+ $_from = date('Y-01-01', strtotime("{$_from} {$by}", $from_time));
851
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
852
+ $_to = date('Y-12-' . $days, $from_time);
853
+ $_sql_format = '%Y';
854
+ $_key_format = 'Y';
855
+
856
+ break;
857
+ }
858
+
859
+ $query_join = $sql_join = $query_where = '';
860
+
861
+ if ('course' === $report_sales_by) {
862
+ $sql_join .= " INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` "
863
+ . " ON o.ID=lpoi.order_id "
864
+ . " INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim "
865
+ . " ON lpoi.order_item_id=loim.learnpress_order_item_id "
866
+ . " AND loim.meta_key='_course_id' "
867
+ . " AND CAST(loim.meta_value AS SIGNED)=%d ";
868
+ if (current_user_can(LP_TEACHER_ROLE)) {
869
+ $user_id = learn_press_get_current_user_id();
870
+ $sql_join .= $wpdb->prepare(" AND CAST(loim.meta_value AS SIGNED) IN "
871
+ . " ( "
872
+ . " SELECT ID FROM {$wpdb->posts} p WHERE p.ID = CAST(loim.meta_value AS SIGNED) AND `post_author`=" . intval($user_id)
873
+ . " ) ");
874
+ }
875
+ $query_join .= $wpdb->prepare($sql_join, $course_id);
876
+
877
+ } elseif ('category' === $report_sales_by) {
878
+ $sql_join .= " INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` "
879
+ . " ON o.ID=lpoi.order_id "
880
+ . " INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim "
881
+ . " ON lpoi.order_item_id=loim.learnpress_order_item_id "
882
+ . " AND loim.meta_key='_course_id' "
883
+ . " AND CAST(loim.meta_value AS SIGNED) IN("
884
+ //sub query
885
+ . " SELECT tr.object_id "
886
+ . " FROM wp_term_taxonomy tt INNER JOIN wp_term_relationships tr "
887
+ . " ON tt.term_taxonomy_id = tr.term_taxonomy_id AND tt.taxonomy='course_category' "
888
+ . " WHERE tt.term_id=%d)";
889
+ $query_join .= $wpdb->prepare($sql_join, $cat_id);
890
+ }
891
+ if (current_user_can(LP_TEACHER_ROLE)) {
892
+ $user_id = learn_press_get_current_user_id();
893
+ $query_where .= $wpdb->prepare(" AND o.ID IN( SELECT oi.order_id
894
  FROM lptest.{$wpdb->prefix}learnpress_order_items oi
895
  inner join {$wpdb->prefix}learnpress_order_itemmeta oim
896
  on oi.order_item_id = oim.learnpress_order_item_id
898
  and cast(oim.meta_value as SIGNED) IN (
899
  SELECT sp.ID FROM {$wpdb->prefix}posts sp WHERE sp.post_author=%d and sp.ID=cast(oim.meta_value as SIGNED)
900
  )
901
+ ) ", $user_id);
902
+ }
903
 
904
+ $query = $wpdb->prepare("
905
  SELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d
906
  FROM {$wpdb->posts} o {$query_join}
907
  WHERE 1 {$query_where}
909
  GROUP BY d
910
  HAVING d BETWEEN %s AND %s
911
  ORDER BY d ASC
912
+ ", $_sql_format, 'lp_order', $_from, $_to);
913
  // echo $query;
914
+ if ($_results = $wpdb->get_results($query)) {
915
+ foreach ($_results as $k => $v) {
916
  // $results['all'][$v->d] = $v;
917
+ $results['completed'][$v->d] = $v;
918
+ }
919
+ }
920
 
921
+ $query = $wpdb->prepare("
922
  SELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d
923
  FROM {$wpdb->posts} o {$query_join}
924
  WHERE 1 {$query_where}
926
  GROUP BY d
927
  HAVING d BETWEEN %s AND %s
928
  ORDER BY d ASC
929
+ ", $_sql_format, 'lp_order', $_from, $_to);
930
  // echo $query;
931
+ if ($_results = $wpdb->get_results($query)) {
932
+ foreach ($_results as $k => $v) {
933
  // $results['completed'][$v->d] = $v;
934
+ $results['pending'][$v->d] = $v;
935
+ }
936
+ }
937
+
938
+
939
+ for ($i = -$time_ago + 1; $i <= 0; $i++) {
940
+ $date = strtotime("$i $by", $from_time);
941
+ $labels[] = date($date_format, $date);
942
+ $key = date($_key_format, $date);
943
+
944
+ $completed = !empty($results['completed'][$key]) ? $results['completed'][$key]->c : 0;
945
+ $pending = !empty($results['pending'][$key]) ? $results['pending'][$key]->c : 0;
946
+ $all = $completed + $pending;
947
+
948
+ $datasets[0]['data'][] = $all;
949
+ $datasets[1]['data'][] = $completed;
950
+ $datasets[2]['data'][] = $pending;
951
+ }
952
+
953
+ $dataset_params = array(
954
+ array(
955
+ 'color1' => 'rgba(47, 167, 255, %s)',
956
+ 'color2' => '#FFF',
957
+ 'label' => __('All', 'learnpress')
958
+ ),
959
+ array(
960
+ 'color1' => 'rgba(212, 208, 203, %s)',
961
+ 'color2' => '#FFF',
962
+ 'label' => __('Completed', 'learnpress')
963
+ ),
964
+ array(
965
+ 'color1' => 'rgba(234, 199, 155, %s)',
966
+ 'color2' => '#FFF',
967
+ 'label' => __('Pending', 'learnpress')
968
+ )
969
+ );
970
+
971
+ foreach ($dataset_params as $k => $v) {
972
+ $datasets[$k]['fillColor'] = sprintf($v['color1'], '0.2');
973
+ $datasets[$k]['strokeColor'] = sprintf($v['color1'], '1');
974
+ $datasets[$k]['pointColor'] = sprintf($v['color1'], '1');
975
+ $datasets[$k]['pointStrokeColor'] = $v['color2'];
976
+ $datasets[$k]['pointHighlightFill'] = $v['color2'];
977
+ $datasets[$k]['pointHighlightStroke'] = sprintf($v['color1'], '1');
978
+ $datasets[$k]['label'] = $v['label'];
979
+ }
980
+
981
+ return array(
982
+ 'labels' => $labels,
983
+ 'datasets' => $datasets,
984
+ 'sql' => $query
985
+ );
986
  }
987
 
988
  /**
989
  * Get data about courses to render in the chart
990
  * @return array
991
  */
992
+ function learn_press_get_chart_courses2()
993
+ {
994
+ $labels = array(
995
+ __('Pending Courses / Publish Courses', 'learnpress'),
996
+ __('Free Courses / Priced Courses', 'learnpress')
997
+ );
998
+ $datasets = array();
999
+ $datasets[0]['data'] = array(
1000
+ learn_press_get_courses_by_status('pending'),
1001
+ learn_press_get_courses_by_price('free')
1002
+ );
1003
+ $datasets[1]['data'] = array(
1004
+ learn_press_get_courses_by_status('publish'),
1005
+ learn_press_get_courses_by_price('not_free')
1006
+ );
1007
+
1008
+ $colors = learn_press_get_admin_colors();
1009
+ $datasets[0]['fillColor'] = $colors[1];
1010
+ $datasets[0]['strokeColor'] = $colors[1];
1011
+ $datasets[1]['fillColor'] = $colors[3];
1012
+ $datasets[1]['strokeColor'] = $colors[3];
1013
+
1014
+ return array(
1015
+ 'labels' => $labels,
1016
+ 'datasets' => $datasets
1017
+ );
1018
  }
1019
 
1020
  /**
1021
  * Get colors setting up by admin user
1022
  * @return array
1023
  */
1024
+ function learn_press_get_admin_colors()
1025
+ {
1026
+ $admin_color = get_user_meta(get_current_user_id(), 'admin_color', true);
1027
+ global $_wp_admin_css_colors;
1028
+ $colors = array();
1029
+ if (!empty($_wp_admin_css_colors[$admin_color]->colors)) {
1030
+ $colors = $_wp_admin_css_colors[$admin_color]->colors;
1031
+ }
1032
+ if (empty ($colors[0])) {
1033
+ $colors[0] = '#000000';
1034
+ }
1035
+ if (empty ($colors[2])) {
1036
+ $colors[2] = '#00FF00';
1037
+ }
1038
+
1039
+ return $colors;
1040
  }
1041
 
1042
  /**
1044
  *
1045
  * @param array $chart
1046
  */
1047
+ function learn_press_process_chart($chart = array())
1048
+ {
1049
+ $data = json_encode(
1050
+ array(
1051
+ 'labels' => $chart['labels'],
1052
+ 'datasets' => $chart['datasets']
1053
+ )
1054
+ );
1055
+ echo $data;
1056
  }
1057
 
1058
  /**
1059
  * Print out the configuration for admin chart
1060
  */
1061
+ function learn_press_config_chart()
1062
+ {
1063
+ $colors = learn_press_get_admin_colors();
1064
+ $config = array(
1065
+ 'scaleShowGridLines' => true,
1066
+ 'scaleGridLineColor' => "#777",
1067
+ 'scaleGridLineWidth' => 0.3,
1068
+ 'scaleFontColor' => "#444",
1069
+ 'scaleLineColor' => $colors[0],
1070
+ 'bezierCurve' => true,
1071
+ 'bezierCurveTension' => 0.2,
1072
+ 'pointDotRadius' => 5,
1073
+ 'pointDotStrokeWidth' => 5,
1074
+ 'pointHitDetectionRadius' => 20,
1075
+ 'datasetStroke' => true,
1076
+ 'responsive' => true,
1077
+ 'tooltipFillColor' => $colors[2],
1078
+ 'tooltipFontColor' => "#eee",
1079
+ 'tooltipCornerRadius' => 0,
1080
+ 'tooltipYPadding' => 10,
1081
+ 'tooltipXPadding' => 10,
1082
+ 'barDatasetSpacing' => 10,
1083
+ 'barValueSpacing' => 200
1084
+
1085
+ );
1086
+ echo json_encode($config);
1087
  }
1088
 
1089
+ function set_post_order_in_admin($wp_query)
1090
+ {
1091
+ global $pagenow;
1092
+ if (isset($_GET['post_type'])) {
1093
+ $post_type = $_GET['post_type'];
1094
+ } else {
1095
+ $post_type = '';
1096
+ }
1097
+ if (is_admin() && 'edit.php' == $pagenow && $post_type == LP_COURSE_CPT && !isset($_GET['orderby'])) {
1098
+ $wp_query->set('orderby', 'date');
1099
+ $wp_query->set('order', 'DSC');
1100
+ }
1101
  }
1102
 
1103
+ add_filter('pre_get_posts', 'set_post_order_in_admin');
1104
  /**
1105
  * Add actions to the list of the course. e.g: Duplicate link
1106
  *
1108
  *
1109
  * @return mixed
1110
  */
1111
+ function learn_press_add_row_action_link($actions)
1112
+ {
1113
+ global $post;
1114
+ if (LP_COURSE_CPT == $post->post_type) {
1115
+ $duplicate_link = admin_url('edit.php?post_type=lp_course&action=lp-duplicate-course&post=' . $post->ID . '&nonce=' . wp_create_nonce('lp-duplicate-' . $post->ID));
1116
+ $duplicate_link = array(
1117
+ array(
1118
+ 'link' => $duplicate_link,
1119
+ 'title' => __('Duplicate this course', 'learnpress'),
1120
+ 'class' => 'lp-duplicate-course'
1121
+ )
1122
+ );
1123
+ $links = apply_filters('learn_press_row_action_links', $duplicate_link);
1124
+ if (count($links) > 1) {
1125
+ $drop_down = array('<ul class="lpr-row-action-dropdown">');
1126
+ foreach ($links as $link) {
1127
+ $drop_down[] = '<li>' . sprintf('<a href="%s" class="%s">%s</a>', $link['link'], $link['class'], $link['title']) . '</li>';
1128
+ };
1129
+ $drop_down[] = '</ul>';
1130
+ $link = sprintf('<div class="lpr-row-actions"><a href="%s">%s</a>%s</div>', 'javascript: void(0);', __('Course', 'learnpress'), join("\n", $drop_down));
1131
+ } else {
1132
+ $link = array_shift($links);
1133
+ $link = sprintf('<a href="%s" class="%s">%s</a>', $link['link'], $link['class'], $link['title']);
1134
+ }
1135
+ $actions['lpr-course-row-action'] = $link;
1136
+ } else if (LP_QUIZ_CPT === $post->post_type) {
1137
+ unset($actions['view']);
1138
+ $url = admin_url('edit.php?post_type=' . LP_QUIZ_CPT . '&lp-action=lp-duplicate-quiz&post=' . $post->ID . '&nonce=' . wp_create_nonce('lp-duplicate-' . $post->ID));
1139
+ $link = sprintf('<a href="%s" class="lp-duplicate-lesson">%s</a>', $url, __('Duplicate this quiz', 'learnpress'));
1140
+ $actions['lpr-course-row-action'] = $link;
1141
+ } else if (LP_QUESTION_CPT === $post->post_type) {
1142
+ unset($actions['view']);
1143
+ $url = admin_url('edit.php?post_type=' . LP_QUESTION_CPT . '&lp-action=lp-duplicate-question&post=' . $post->ID . '&nonce=' . wp_create_nonce('lp-duplicate-' . $post->ID));
1144
+ $link = sprintf('<a href="%s" class="lp-duplicate-lesson">%s</a>', $url, __('Duplicate this question', 'learnpress'));
1145
+ $actions['lpr-course-row-action'] = $link;
1146
+ } else if (LP_LESSON_CPT === $post->post_type) {
1147
+ unset($actions['view']);
1148
+ $url = admin_url('edit.php?post_type=' . LP_LESSON_CPT . '&lp-action=lp-duplicate-lesson&post=' . $post->ID . '&nonce=' . wp_create_nonce('lp-duplicate-' . $post->ID));
1149
+ $link = sprintf('<a href="%s" class="lp-duplicate-lesson">%s</a>', $url, __('Duplicate this lesson', 'learnpress'));
1150
+ $actions['lpr-course-row-action'] = $link;
1151
+ }
1152
+
1153
+ return $actions;
1154
  }
1155
 
1156
+ add_filter('post_row_actions', 'learn_press_add_row_action_link');
1157
+ add_filter('page_row_actions', 'learn_press_add_row_action_link');
1158
+
1159
+ function learn_press_copy_post_meta($from_id, $to_id)
1160
+ {
1161
+ global $wpdb;
1162
+ $course_meta = $wpdb->get_results(
1163
+ $wpdb->prepare("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d", $from_id)
1164
+ );
1165
+ if (count($course_meta) != 0) {
1166
+ $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
1167
+ $sql_query_sel = array();
1168
+
1169
+ foreach ($course_meta as $meta) {
1170
+ $meta_key = $meta->meta_key;
1171
+ $meta_value = addslashes($meta->meta_value);
1172
+
1173
+ $sql_query_sel[] = "SELECT {$to_id}, '$meta_key', '$meta_value'";
1174
+ }
1175
+
1176
+ $sql_query .= implode(" UNION ALL ", $sql_query_sel);
1177
+ $wpdb->query($sql_query);
1178
+ }
1179
  }
1180
 
1181
  /**
1183
  *
1184
  * @author TuNN
1185
  */
1186
+ function learn_press_process_duplicate_action()
1187
+ {
1188
+
1189
+ $wp_list_table = _get_list_table('WP_Posts_List_Table');
1190
+ $action = $wp_list_table->current_action();
1191
+
1192
+ if (isset($_REQUEST['action']) && $action == 'lp-duplicate-course') {
1193
+ // current is not usefully because this feature using ajax action
1194
+ $post_id = isset($_REQUEST['post']) ? $_REQUEST['post'] : 0;
1195
+ $nonce = !empty($_REQUEST['nonce']) ? $_REQUEST['nonce'] : '';
1196
+ if (!wp_verify_nonce($nonce, 'lp-duplicate-' . $post_id)) {
1197
+ wp_die(__('Error', 'learnpress'));
1198
+ }
1199
+ if ($post_id && is_array($post_id)) {
1200
+ $post_id = array_shift($post_id);
1201
+ }
1202
+ // check for post is exists
1203
+ if (!($post_id && $post = get_post($post_id))) {
1204
+ wp_die(__('Oops! The course does not exist.', 'learnpress'));
1205
+ }
1206
+ // ensure that user can create course
1207
+ if (!current_user_can('edit_posts')) {
1208
+ wp_die(__('Sorry! You have not permission to duplicate this course.', 'learnpress'));
1209
+ }
1210
+
1211
+ // assign course to current user
1212
+ $current_user = wp_get_current_user();
1213
+ $new_course_author = $current_user->ID;
1214
+
1215
+ // setup course data
1216
+ $new_course_title = $post->post_title . ' - Copy';
1217
+ $args = array(
1218
+ 'comment_status' => $post->comment_status,
1219
+ 'ping_status' => $post->ping_status,
1220
+ 'post_author' => $new_course_author,
1221
+ 'post_content' => $post->post_content,
1222
+ 'post_excerpt' => $post->post_excerpt,
1223
+ 'post_name' => $post->post_name,
1224
+ 'post_parent' => $post->post_parent,
1225
+ 'post_password' => $post->post_password,
1226
+ 'post_status' => 'draft',
1227
+ 'post_title' => $new_course_title,
1228
+ 'post_type' => $post->post_type,
1229
+ 'to_ping' => $post->to_ping,
1230
+ 'menu_order' => $post->menu_order
1231
+ );
1232
+ // insert new course and get it ID
1233
+ $new_post_id = wp_insert_post($args);
1234
+
1235
+ if (!$new_post_id) {
1236
+ LP_Admin_Notice::add_redirect(__('<p>Sorry! Duplicate course failed!</p>', 'learnpress'));
1237
+ wp_redirect(admin_url('edit.php?post_type=lp_course'));
1238
+ exit();
1239
+ }
1240
+ // assign related tags/categories to new course
1241
+ $taxonomies = get_object_taxonomies($post->post_type);
1242
+ foreach ($taxonomies as $taxonomy) {
1243
+ $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
1244
+ wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
1245
+ }
1246
+
1247
+ // duplicate course data
1248
+ global $wpdb;
1249
+ //learn_press_copy_post_meta( $post_id, $new_post_id );
1250
+
1251
+ $query = $wpdb->prepare("
1252
  SELECT *
1253
  FROM {$wpdb->prefix}learnpress_sections s
1254
  INNER JOIN {$wpdb->posts} c ON c.ID = s.section_course_id
1255
  WHERE c.ID = %d
1256
+ ", $post->ID);
1257
+ if ($sections = $wpdb->get_results($query)) {
1258
+ foreach ($sections as $section) {
1259
+ $new_section_id = $wpdb->insert(
1260
+ $wpdb->prefix . 'learnpress_sections',
1261
+ array(
1262
+ 'section_name' => $section->section_name,
1263
+ 'section_course_id' => $new_post_id,
1264
+ 'section_order' => $section->section_order,
1265
+ 'section_description' => $section->section_description
1266
+ ),
1267
+ array('%s', '%d', '%d', '%s')
1268
+ );
1269
+ if ($new_section_id) {
1270
+ $query = $wpdb->prepare("
1271
  SELECT i.*
1272
  FROM {$wpdb->posts} i
1273
  INNER JOIN {$wpdb->prefix}learnpress_sections s ON i.item_id = i.ID
1274
  WHERE s.section_id = %d
1275
+ ", $section->section_id);
1276
+ if ($items = $wpdb->get_results($query)) {
1277
+ foreach ($items as $item) {
1278
+ $item_args = (array)$item;
1279
+ unset(
1280
+ $item_args['ID'],
1281
+ $item_args['post_author'],
1282
+ $item_args['post_date'],
1283
+ $item_args['post_date_gmt'],
1284
+ $item_args['post_modified'],
1285
+ $item_args['post_modified_gmt'],
1286
+ $item_args['comment_count']
1287
+ );
1288
+ $new_item_id = $wpdb->insert(
1289
+ $wpdb->posts,
1290
+ $item_args
1291
+ );
1292
+ }
1293
+ }
1294
+ }
1295
+ }
1296
+ }
1297
+ LP_Admin_Notice::add_redirect(__('<p>Course duplicated.</p>', 'learnpress'));
1298
+ wp_redirect(admin_url("post.php?post={$new_post_id}&action=edit"));
1299
+ die();
1300
+ }
1301
+
1302
+ // duplicate action
1303
+ $action = !empty($_REQUEST['lp-action']) ? $_REQUEST['lp-action'] : '';
1304
+ $actions = array(
1305
+ 'lp-duplicate-question',
1306
+ 'lp-duplicate-lesson',
1307
+ 'lp-duplicate-quiz'
1308
+ );
1309
+ if (!in_array($action, $actions)) {
1310
+ return;
1311
+ }
1312
+
1313
+ $post_id = !empty ($_REQUEST['post']) ? $_REQUEST['post'] : 0;
1314
+ $nonce = !empty($_REQUEST['nonce']) ? $_REQUEST['nonce'] : '';
1315
+ if (!$post_id || !wp_verify_nonce($nonce, 'lp-duplicate-' . $post_id)) {
1316
+ return;
1317
+ }
1318
+ // only duplicate question. not assign any data
1319
+ $new_post_id = 0;
1320
+ if ($action === 'lp-duplicate-question') {
1321
+ $new_post_id = learn_press_duplicate_question($post_id);
1322
+ $post_type = LP_QUESTION_CPT;
1323
+ $error = __('Sorry! Duplicate question failed!', 'learnpress');
1324
+ $success = __('Question duplicated.', 'learnpress');
1325
+ } else if ($action === 'lp-duplicate-lesson') {
1326
+ $new_post_id = learn_press_duplicate_lesson($post_id);
1327
+ $post_type = LP_LESSON_CPT;
1328
+ $error = __('Sorry! Duplicate lesson failed!', 'learnpress');
1329
+ $success = __('Lesson duplicated.', 'learnpress');
1330
+ } else if ($action === 'lp-duplicate-quiz') {
1331
+ $new_post_id = learn_press_duplicate_quiz($post_id);
1332
+ $post_type = LP_QUIZ_CPT;
1333
+ $error = __('Sorry! Duplicate quiz failed!', 'learnpress');
1334
+ $success = __('Quiz duplicated.', 'learnpress');
1335
+ }
1336
+
1337
+ if (!$new_post_id) {
1338
+ return;
1339
+ }
1340
+ $redirect = 0;
1341
+ if (is_wp_error($new_post_id)) {
1342
+ LP_Admin_Notice::add_redirect($error, 'error');
1343
+ $redirect = admin_url('edit.php?post_type=' . $post_type);
1344
+ } else {
1345
+ LP_Admin_Notice::add_redirect($success, 'updated');
1346
+ $redirect = admin_url('post.php?post=' . $new_post_id . '&action=edit');
1347
+ }
1348
+
1349
+ if ($redirect) {
1350
+ wp_safe_redirect($redirect);
1351
+ exit();
1352
+ }
1353
  }
1354
 
1355
+ add_action('load-edit.php', 'learn_press_process_duplicate_action');
1356
 
1357
  /**
1358
  * Install a plugin
1361
  *
1362
  * @return array
1363
  */
1364
+ function learn_press_install_add_on($plugin_name)
1365
+ {
1366
+ require_once(LP_PLUGIN_PATH . '/inc/admin/class-lp-upgrader.php');
1367
+ $upgrader = new LP_Upgrader();
1368
+ global $wp_filesystem;
1369
+ $response = array();
1370
+
1371
+ $package = 'http://thimpress.com/lprepo/' . $plugin_name . '.zip';
1372
+
1373
+ $package = $upgrader->download_package($package);
1374
+ if (is_wp_error($package)) {
1375
+ $response['error'] = $package;
1376
+ } else {
1377
+ $working_dir = $upgrader->unpack_package($package, true, $plugin_name);
1378
+ if (is_wp_error($working_dir)) {
1379
+ $response['error'] = $working_dir;
1380
+ } else {
1381
+
1382
+ $wp_upgrader = new WP_Upgrader();
1383
+ $options = array(
1384
+ 'source' => $working_dir,
1385
+ 'destination' => WP_PLUGIN_DIR,
1386
+ 'clear_destination' => false, // Do not overwrite files.
1387
+ 'clear_working' => true,
1388
+ 'hook_extra' => array(
1389
+ 'type' => 'plugin',
1390
+ 'action' => 'install'
1391
+ )
1392
+ );
1393
+ //$response = array();
1394
+ $result = $wp_upgrader->install_package($options);
1395
+
1396
+ if (is_wp_error($result)) {
1397
+ $response['error'] = $result;
1398
+ } else {
1399
+ $response = $result;
1400
+ $response['text'] = __('Installed', 'learnpress');
1401
+ }
1402
+ }
1403
+ }
1404
+
1405
+ return $response;
1406
  }
1407
 
1408
+ function learn_press_accept_become_a_teacher()
1409
+ {
1410
+ $action = !empty($_REQUEST['action']) ? $_REQUEST['action'] : '';
1411
+ $user_id = !empty($_REQUEST['user_id']) ? $_REQUEST['user_id'] : '';
1412
+ if (!$action || !$user_id || ($action != 'accept-to-be-teacher')) {
1413
+ return;
1414
+ }
1415
+
1416
+ if (!learn_press_user_maybe_is_a_teacher($user_id)) {
1417
+ $be_teacher = new WP_User($user_id);
1418
+ $be_teacher->set_role(LP_TEACHER_ROLE);
1419
+ delete_transient('learn_press_become_teacher_sent_' . $user_id);
1420
+ do_action('learn_press_user_become_a_teacher', $user_id);
1421
+ $redirect = add_query_arg('become-a-teacher-accepted', 'yes');
1422
+ $redirect = remove_query_arg('action', $redirect);
1423
+ wp_redirect($redirect);
1424
+ }
1425
  }
1426
 
1427
+ add_action('plugins_loaded', 'learn_press_accept_become_a_teacher');
1428
+
1429
+ function learn_press_user_become_a_teacher_notice()
1430
+ {
1431
+ if ($user_id = learn_press_get_request('user_id') && learn_press_get_request('become-a-teacher-accepted') == 'yes') {
1432
+ $user = new WP_User($user_id);
1433
+ ?>
1434
+ <div class="updated">
1435
+ <p><?php printf(__('The user %s has become a teacher', 'learnpress'), $user->user_login); ?></p>
1436
+ </div>
1437
+ <?php
1438
+ }
1439
  }
1440
 
1441
+ add_action('admin_notices', 'learn_press_user_become_a_teacher_notice');
1442
 
1443
  /**
1444
  * Check to see if a plugin is already installed or not
1447
  *
1448
  * @return bool
1449
  */
1450
+ function learn_press_is_plugin_install($plugin)
1451
+ {
1452
+ $installed_plugins = get_plugins();
1453
+
1454
+ return isset($installed_plugins[$plugin]);
1455
  }
1456
 
1457
  /**
1461
  *
1462
  * @return mixed
1463
  */
1464
+ function learn_press_plugin_basename_from_slug($slug)
1465
+ {
1466
+ $keys = array_keys(get_plugins());
1467
+ foreach ($keys as $key) {
1468
+ if (preg_match('|^' . $slug . '/|', $key)) {
1469
+ return $key;
1470
+ }
1471
+ }
1472
+
1473
+ return $slug;
1474
  }
1475
 
1476
+ function learn_press_one_click_install_sample_data_notice()
1477
+ {
1478
+ $courses = get_posts(
1479
+ array(
1480
+ 'post_type' => LP_COURSE_CPT,
1481
+ 'post_status' => 'any'
1482
+ )
1483
+ );
1484
+ if ((0 == sizeof($courses)) && ('off' != get_transient('learn_press_install_sample_data'))) {
1485
+ printf(
1486
+ '<div class="updated" id="learn-press-install-sample-data-notice">
1487
  <div class="install-sample-data-notice">
1488
  <p>%s</p>
1489
  <p>%s <strong>%s</strong> %s
1493
  <p>Importing...</p>
1494
  </div>
1495
  </div>',
1496
+ __('You haven\'t got any courses yet! Would you like to import sample data?', 'learnpress'),
1497
+ __('If yes, it requires to install addon name', 'learnpress'),
1498
+ __('LearnPress Import/Export', 'learnpress'),
1499
+ __('but don\'t worry because it is completely automated.', 'learnpress'),
1500
+ __('Import now', 'learnpress'),
1501
+ __('No, thanks!', 'learnpress')
1502
+ );
1503
+ }
1504
  }
1505
 
1506
  //add_action( 'admin_notices', 'learn_press_one_click_install_sample_data_notice' );
1507
 
1508
+ function learn_press_request_query($vars = array())
1509
+ {
1510
+ global $typenow, $wp_query, $wp_post_statuses;
1511
+ if (LP_ORDER_CPT === $typenow) {
1512
+ // Status
1513
+ if (!isset($vars['post_status'])) {
1514
+ $post_statuses = learn_press_get_order_statuses();
1515
 
1516
+ foreach ($post_statuses as $status => $value) {
1517
+ if (isset($wp_post_statuses[$status]) && false === $wp_post_statuses[$status]->show_in_admin_all_list) {
1518
+ unset($post_statuses[$status]);
1519
+ }
1520
+ }
1521
 
1522
+ $vars['post_status'] = array_keys($post_statuses);
1523
 
1524
+ }
1525
+ }
1526
+
1527
+ return $vars;
1528
  }
1529
 
1530
+ add_filter('request', 'learn_press_request_query', 0);
1531
 
1532
+ function _learn_press_reset_course_data()
1533
+ {
1534
+ if (empty($_REQUEST['reset-course-data'])) {
1535
+ return false;
1536
+ }
1537
+ learn_press_reset_course_data(intval($_REQUEST['reset-course-data']));
1538
+ wp_redirect(remove_query_arg('reset-course-data'));
1539
  }
1540
 
1541
+ add_action('init', '_learn_press_reset_course_data');
1542
 
1543
  /***********************/
1544
+ function learn_press_admin_section_loop_item_class($item, $section)
1545
+ {
1546
+ $classes = array(
1547
+ 'lp-section-item'
1548
+ );
1549
+ $classes[] = 'lp-item-' . $item->post_type;
1550
+ if (!absint($item->ID)) {
1551
+ $classes[] = 'lp-item-empty lp-item-new focus';
1552
+ }
1553
+ $classes = apply_filters('learn_press_section_loop_item_class', $classes, $item, $section);
1554
+ if ($classes) {
1555
+ echo 'class="' . join(' ', $classes) . '"';
1556
+ }
1557
+
1558
+ return $classes;
1559
  }
1560
 
1561
+ function learn_press_disable_checked_ontop($args)
1562
+ {
1563
 
1564
+ if ('course_category' == $args['taxonomy']) {
1565
+ $args['checked_ontop'] = false;
1566
+ }
1567
 
1568
+ return $args;
1569
  }
1570
 
1571
+ add_filter('wp_terms_checklist_args', 'learn_press_disable_checked_ontop');
1572
 
1573
+ function learn_press_output_admin_template()
1574
+ {
1575
+ learn_press_admin_view('admin-template.php');
1576
  }
1577
 
1578
+ add_action('admin_print_scripts', 'learn_press_output_admin_template');
1579
 
1580
+ function learn_press_output_screen_id()
1581
+ {
1582
+ $screen = get_current_screen();
1583
+ if ($screen) {
1584
+ echo "<div style=\"position:fixed;top: 0; left:0; z-index: 99999999; background-color:#FFF;padding:4px;\">" . $screen->id . "</div>";
1585
+ }
1586
  }
1587
 
1588
  //add_action( 'admin_head', 'learn_press_output_screen_id' );
1589
 
1590
+ function learn_press_get_screens()
1591
+ {
1592
+ $screen_id = sanitize_title('LearnPress');
1593
+ $screens = array(
1594
+ 'toplevel_page_' . $screen_id,
1595
+ $screen_id . '_page_learn-press-statistics',
1596
+ $screen_id . '_page_learn-press-addons',
1597
+ $screen_id . '_page_learn-press-settings',
1598
+ $screen_id . '_page_learn-press-tools'
1599
+ );
1600
+ foreach (array(LP_COURSE_CPT, LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT, LP_ORDER_CPT) as $post_type) {
1601
+ $screens[] = 'edit-' . $post_type;
1602
+ $screens[] = $post_type;
1603
+ }
1604
+
1605
+ return apply_filters('learn_press_screen_ids', $screens);
1606
  }
1607
 
1608
+ function learn_press_get_admin_pages()
1609
+ {
1610
+ return apply_filters(
1611
+ 'learn_press_admin_pages',
1612
+ array(
1613
+ 'learn-press-settings',
1614
+ 'learn-press-settings'
1615
+ )
1616
+ );
1617
  }
1618
 
1619
+ function learn_press_is_post_type_screen($post_type, $union = 'OR')
1620
+ {
1621
+ if (is_array($post_type)) {
1622
+ $return = null;
1623
+ foreach ($post_type as $_post_type) {
1624
+ $check = learn_press_is_post_type_screen($_post_type);
1625
+ if ($union == 'OR' && $check) {
1626
+ return true;
1627
+ }
1628
+ if ($return == null) {
1629
+ $return = $check;
1630
+ } else {
1631
+ $return = $return && $check;
1632
+ }
1633
+ if ($union !== 'OR') {
1634
+ return $return;
1635
+ }
1636
+ }
1637
+
1638
+ return $return;
1639
+ }
1640
+ $screen = get_current_screen();
1641
+ if (!$screen) {
1642
+ return;
1643
+ }
1644
+ $screen_id = $screen->id;
1645
+
1646
+ return in_array($screen_id, array($post_type, "edit-{$post_type}"));
1647
  }
1648
 
1649
+ function learn_press_get_notice_dismiss($context, $type = 'transient')
1650
+ {
1651
+ if ($type == 'transient') {
1652
+ return get_transient('learn_press_dismiss_notice_' . $context);
1653
+ }
1654
+
1655
+ return get_option('learn_press_dismiss_notice_' . $context);
1656
  }
1657
 
1658
+ if (!function_exists('learn_press_course_insert_section')) {
1659
+
1660
+ function learn_press_course_insert_section($section = array())
1661
+ {
1662
+ global $wpdb;
1663
+ $section = wp_parse_args(
1664
+ $section,
1665
+ array(
1666
+ 'section_name' => '',
1667
+ 'section_course_id' => 0,
1668
+ 'section_order' => 0,
1669
+ 'section_description' => ''
1670
+ )
1671
+ );
1672
+ $section = stripslashes_deep($section);
1673
+ extract($section);
1674
+
1675
+ $insert_data = compact('section_name', 'section_course_id', 'section_order', 'section_description');
1676
+ $wpdb->insert(
1677
+ $wpdb->learnpress_sections,
1678
+ $insert_data,
1679
+ array('%s', '%d', '%d')
1680
+ );
1681
+
1682
+ return $wpdb->insert_id;
1683
+ }
1684
 
1685
  }
1686
 
1687
+ if (!function_exists('learn_press_course_insert_section_item')) {
1688
+
1689
+ function learn_press_course_insert_section_item($item_data = array())
1690
+ {
1691
+ global $wpdb;
1692
+ $wpdb->insert(
1693
+ $wpdb->learnpress_section_items,
1694
+ array(
1695
+ 'section_id' => $item_data['section_id'],
1696
+ 'item_id' => $item_data['item_id'],
1697
+ 'item_order' => $item_data['item_order'],
1698
+ 'item_type' => $item_data['item_type']
1699
+ ),
1700
+ array(
1701
+ '%d',
1702
+ '%d',
1703
+ '%d',
1704
+ '%s',
1705
+ )
1706
+ );
1707
+
1708
+ return $wpdb->insert_id;
1709
+ }
1710
 
1711
  }
1712
 
1713
+ if (!function_exists('learn_press_duplicate_post')) {
1714
+
1715
+ function learn_press_duplicate_post($post_id = null, $args = array(), $meta = true)
1716
+ {
1717
+ $post = get_post($post_id);
1718
+ if (!$post) {
1719
+ return;
1720
+ }
1721
+ $defalts = array(
1722
+ 'comment_status' => $post->comment_status,
1723
+ 'ping_status' => $post->ping_status,
1724
+ 'post_author' => get_current_user_id(),
1725
+ 'post_content' => $post->post_content,
1726
+ 'post_excerpt' => $post->post_excerpt,
1727
+ 'post_parent' => $post->post_parent,
1728
+ 'post_password' => $post->post_password,
1729
+ 'post_status' => 'draft',
1730
+ 'post_title' => $post->post_title . ' - Copy',
1731
+ 'post_type' => $post->post_type,
1732
+ 'to_ping' => $post->to_ping,
1733
+ 'menu_order' => $post->menu_order
1734
+ );
1735
+ $args = wp_parse_args($args, $defalts);
1736
+ $new_post_id = wp_insert_post($args);
1737
+ if (!is_wp_error($new_post_id) && $meta) {
1738
+ learn_press_duplicate_post_meta($post_id, $new_post_id);
1739
+ // assign related tags/categories to new course
1740
+ $taxonomies = get_object_taxonomies($post->post_type);
1741
+ foreach ($taxonomies as $taxonomy) {
1742
+ $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
1743
+ wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
1744
+ }
1745
+ }
1746
+
1747
+ return apply_filters('learn_press_duplicate_post', $new_post_id, $post_id);
1748
+ }
1749
  }
1750
 
1751
+ if (!function_exists('learn_press_duplicate_post_meta')) {
1752
+ /**
1753
+ * duplicate all post meta just in two SQL queries
1754
+ */
1755
+ function learn_press_duplicate_post_meta($old_post_id, $new_post_id, $excerpt = array())
1756
+ {
1757
+ global $wpdb;
1758
+ $post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$old_post_id");
1759
+ if (count($post_meta_infos) != 0) {
1760
+ $excerpt = array_merge(array('_edit_lock', '_edit_last'), $excerpt);
1761
+ $excerpt = apply_filters('learn_press_excerpt_duplicate_post_meta', $excerpt, $old_post_id, $new_post_id);
1762
+ $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
1763
+ $sql_query_sel = array();
1764
+ foreach ($post_meta_infos as $meta) {
1765
+ if (in_array($meta->meta_key, $excerpt)) {
1766
+ continue;
1767
+ }
1768
+ if ($meta->meta_key === '_lp_course_author') {
1769
+ $meta->meta_value = get_current_user_id();
1770
+ }
1771
+ $meta_key = $meta->meta_key;
1772
+ $meta_value = addslashes($meta->meta_value);
1773
+ $sql_query_sel[] = "SELECT $new_post_id, '$meta_key', '$meta_value'";
1774
+ }
1775
+ $sql_query .= implode(" UNION ALL ", $sql_query_sel);
1776
+ $wpdb->query($sql_query);
1777
+ }
1778
+ }
1779
 
1780
  }
1781
 
1782
+ add_filter('learn_press_question_types', 'learn_press_sort_questions', 99);
1783
+ if (!function_exists('learn_press_sort_questions')) {
1784
+ function learn_press_sort_questions($types)
1785
+ {
1786
+ $user_id = get_current_user_id();
1787
+ $question_types = get_user_meta($user_id, '_learn_press_memorize_question_types', true);
1788
+ if (!empty($question_types)) {
1789
+ $sort = array();
1790
+ // re-sort array descending
1791
+ arsort($question_types);
1792
+ $new_types = array();
1793
+ $ktypes = array_keys($types);
1794
+
1795
+ for ($i = 0; $i < count($ktypes) - 1; $i++) {
1796
+ $max = $i;
1797
+ if (!isset($question_types[$ktypes[$i]])) {
1798
+ $question_types[$ktypes[$i]] = 0;
1799
+ }
1800
+ for ($j = $i + 1; $j < count($ktypes); $j++) {
1801
+ if (isset($question_types[$ktypes[$j]], $question_types[$ktypes[$max]])
1802
+ && $question_types[$ktypes[$j]] > $question_types[$ktypes[$max]]
1803
+ ) {
1804
+ $max = $j;
1805
+ }
1806
+ }
1807
+ $tmp = $ktypes[$i];
1808
+ $ktypes[$i] = $ktypes[$max];
1809
+ $ktypes[$max] = $tmp;
1810
+ }
1811
+ $ktypes = array_flip($ktypes);
1812
+ $types = array_merge($ktypes, $types);
1813
+ }
1814
+
1815
+ return $types;
1816
+ }
1817
  }
1818
 
1819
+ if (!function_exists('learn_press_duplicate_course')) {
1820
+
1821
+ function learn_press_duplicate_course($course_id = null, $force = true)
1822
+ {
1823
+ if (!function_exists('_learn_press_get_course_curriculum')) {
1824
+ require_once LP_PLUGIN_PATH . 'inc/lp-init.php';
1825
+ }
1826
+ global $wpdb;
1827
+
1828
+ if ($course_id && is_array($course_id)) {
1829
+ $course_id = array_shift($course_id);
1830
+ }
1831
+ // check for post is exists
1832
+ if (!$course_id || !($post = get_post($course_id))) {
1833
+ return new WP_Error(__('<p>Op! The course does not exist</p>', 'learnpress'));
1834
+ } else {
1835
+ // ensure that user can create course
1836
+ if (!current_user_can('edit_posts')) {
1837
+ return new WP_Error(__('<p>Sorry! You have not permission to duplicate this course</p>', 'learnpress'));
1838
+ } else {
1839
+ // duplicate course
1840
+ $new_course_id = learn_press_duplicate_post($course_id);
1841
+ if (!$new_course_id || is_wp_error($new_course_id)) {
1842
+ return new WP_Error(__('<p>Sorry! Duplicate course failed!</p>', 'learnpress'));
1843
+ } else {
1844
+ $curriculums = _learn_press_get_course_curriculum($course_id);
1845
+ foreach ($curriculums as $section_id => $section) {
1846
+ $new_section_id = learn_press_course_insert_section(array(
1847
+ 'section_name' => $section->section_name,
1848
+ 'section_course_id' => $new_course_id,
1849
+ 'section_order' => $section->section_order,
1850
+ 'section_description' => $section->section_description
1851
+ ));
1852
+
1853
+ if ($section->items) {
1854
+ foreach ($section->items as $item) {
1855
+ // duplicate item
1856
+ if ($force && $item->post_type === LP_QUIZ_CPT) {
1857
+ $item_id = learn_press_duplicate_quiz($item->ID, array('post_status' => 'publish'));
1858
+ } else {
1859
+ $item_id = learn_press_duplicate_post($item->ID, array('post_status' => 'publish'));
1860
+ }
1861
+ if ($force) {
1862
+ $section_item_id = learn_press_course_insert_section_item(array(
1863
+ 'section_id' => $new_section_id,
1864
+ 'item_id' => $item_id,
1865
+ 'item_order' => $item->item_order,
1866
+ 'item_type' => $item->item_type
1867
+ ));
1868
+ }
1869
+ }
1870
+ }
1871
+ }
1872
+
1873
+ return $new_course_id;
1874
+ }
1875
+ }
1876
+ }
1877
+ }
1878
 
1879
  }
1880
 
1881
+ if (!function_exists('learn_press_duplicate_question')) {
1882
+
1883
+ function learn_press_duplicate_question($question_id = null, $quiz_id = null)
1884
+ {
1885
+ if (!$question_id || !get_post($question_id)) {
1886
+ return new WP_Error(sprintf(__('Question id %s is not exists.', 'learnpress'), $question_id));
1887
+ }
1888
+ if ($quiz_id && !get_post($quiz_id)) {
1889
+ return new WP_Error(sprintf(__('Quiz id %s is not exists.', 'learnpress'), $quiz_id));
1890
+ }
1891
+
1892
+ global $wpdb;
1893
+ $new_question_id = learn_press_duplicate_post($question_id);
1894
+ if ($quiz_id) {
1895
+ // learnpress_quiz_questions
1896
+ $sql = $wpdb->prepare("
1897
  SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d
1898
+ ", $quiz_id, $question_id);
1899
+ $quiz_question_data = $wpdb->get_row($sql);
1900
+ $max_order = $wpdb->get_var($wpdb->prepare("SELECT max(question_order) FROM {$wpdb->prefix}learnpress_quiz_questions WHERE quiz_id = %d", $quiz_id));
1901
+
1902
+ if ($quiz_question_data) {
1903
+ $wpdb->insert(
1904
+ $wpdb->learnpress_quiz_questions,
1905
+ array(
1906
+ 'quiz_id' => $quiz_id,
1907
+ 'question_id' => $new_question_id,
1908
+ 'question_order' => $max_order + 1,
1909
+ 'params' => $quiz_question_data->params
1910
+ ),
1911
+ array(
1912
+ '%d',
1913
+ '%d',
1914
+ '%d',
1915
+ '%s'
1916
+ )
1917
+ );
1918
+ }
1919
+ }
1920
+ // learnpress_question_answers
1921
+ $sql = $wpdb->prepare("
1922
  SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d
1923
+ ", $question_id);
1924
+ $question_answers = $wpdb->get_results($sql);
1925
+ if ($question_answers) {
1926
+ foreach ($question_answers as $q_a) {
1927
+ $wpdb->insert(
1928
+ $wpdb->learnpress_question_answers,
1929
+ array(
1930
+ 'question_id' => $new_question_id,
1931
+ 'answer_data' => $q_a->answer_data,
1932
+ 'answer_order' => $q_a->answer_order
1933
+ ),
1934
+ array(
1935
+ '%d',
1936
+ '%s',
1937
+ '%s'
1938
+ )
1939
+ );
1940
+ }
1941
+ }
1942
+
1943
+ return $new_question_id;
1944
+ }
1945
 
1946
  }
1947
 
1948
+ if (!function_exists('learn_press_duplicate_quiz')) {
1949
+
1950
+ function learn_press_duplicate_quiz($quiz_id = null, $args = array())
1951
+ {
1952
+ global $wpdb;
1953
+ $new_quiz_id = learn_press_duplicate_post($quiz_id, $args, true);
1954
+ $quiz = LP_Quiz::get_quiz($quiz_id);
1955
+ $questions = $quiz->get_questions();
1956
+ if ($questions) {
1957
+ $questions = array_keys($questions);
1958
+ foreach ($questions as $question_id) {
1959
+ $new_question_id = learn_press_duplicate_post($question_id);
1960
+ // learnpress_quiz_questions
1961
+ $sql = $wpdb->prepare("
1962
  SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d
1963
+ ", $quiz_id, $question_id);
1964
+ $quiz_question_data = $wpdb->get_row($sql);
1965
+ if ($quiz_question_data) {
1966
+ $wpdb->insert(
1967
+ $wpdb->learnpress_quiz_questions,
1968
+ array(
1969
+ 'quiz_id' => $new_quiz_id,
1970
+ 'question_id' => $new_question_id,
1971
+ 'question_order' => $quiz_question_data->question_order,
1972
+ 'params' => $quiz_question_data->params
1973
+ ),
1974
+ array(
1975
+ '%d',
1976
+ '%d',
1977
+ '%d',
1978
+ '%s'
1979
+ )
1980
+ );
1981
+ }
1982
+ // learnpress_question_answers
1983
+ $sql = $wpdb->prepare("
1984
  SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d
1985
+ ", $question_id);
1986
+ $question_answers = $wpdb->get_results($sql);
1987
+ if ($question_answers) {
1988
+ foreach ($question_answers as $q_a) {
1989
+ $wpdb->insert(
1990
+ $wpdb->learnpress_question_answers,
1991
+ array(
1992
+ 'question_id' => $new_question_id,
1993
+ 'answer_data' => $q_a->answer_data,
1994
+ 'answer_order' => $q_a->answer_order
1995
+ ),
1996
+ array(
1997
+ '%d',
1998
+ '%s',
1999
+ '%s'
2000
+ )
2001
+ );
2002
+ }
2003
+ }
2004
+ }
2005
+ }
2006
+
2007
+ return $new_quiz_id;
2008
+ }
2009
 
2010
  }
2011
 
2016
  *
2017
  * @return string
2018
  */
2019
+ function learn_press_get_file_version($file)
2020
+ {
2021
+ if (!file_exists($file)) {
2022
+ return '';
2023
+ }
2024
+ $fp = fopen($file, 'r');
2025
+ $file_data = fread($fp, 8192);
2026
+ fclose($fp);
2027
+ $file_data = str_replace("\r", "\n", $file_data);
2028
+ $version = '';
2029
+ if (preg_match('/^[ \t\/*#@]*' . preg_quote('@version', '/') . '(.*)$/mi', $file_data, $match) && $match[1]) {
2030
+ $version = _cleanup_header_comment($match[1]);
2031
+ }
2032
+
2033
+ return $version;
2034
  }
2035
 
2036
  /**
2040
  *
2041
  * @return array|bool
2042
  */
2043
+ function learn_press_get_theme_templates($check = false)
2044
+ {
2045
+ $template_folder = learn_press_template_path();
2046
+ $template_path = LP_PLUGIN_PATH . '/templates/';
2047
+ $template_dir = get_template_directory();
2048
+ $stylesheet_dir = get_stylesheet_directory();
2049
+ $t_folder = basename($template_dir);
2050
+ $s_folder = basename($stylesheet_dir);
2051
+
2052
+ $found_files = array($t_folder => array(), $s_folder => array());
2053
+ $outdated_templates = false;
2054
+
2055
+ $scanned_files = learn_press_scan_template_files($template_path);
2056
+ foreach ($scanned_files as $file) {
2057
+ $theme_folder = '';
2058
+
2059
+ if (file_exists($stylesheet_dir . '/' . $file)) {
2060
+ $theme_file = $stylesheet_dir . '/' . $file;
2061
+ $theme_folder = $s_folder;
2062
+ } elseif (file_exists($stylesheet_dir . '/' . $template_folder . '/' . $file)) {
2063
+ $theme_file = $stylesheet_dir . '/' . $template_folder . '/' . $file;
2064
+ $theme_folder = $s_folder;
2065
+ } elseif (file_exists($template_dir . '/' . $file)) {
2066
+ $theme_file = $template_dir . '/' . $file;
2067
+ $theme_folder = $t_folder;
2068
+ } elseif (file_exists($template_dir . '/' . $template_folder . '/' . $file)) {
2069
+ $theme_file = $template_dir . '/' . $template_folder . '/' . $file;
2070
+ $theme_folder = $t_folder;
2071
+ } else {
2072
+ $theme_file = false;
2073
+ }
2074
+
2075
+ if (!empty($theme_file)) {
2076
+ $core_version = learn_press_get_file_version($template_path . $file);
2077
+ $theme_version = learn_press_get_file_version($theme_file);
2078
+
2079
+ if ($core_version && (empty($theme_version) || version_compare($theme_version, $core_version, '<'))) {
2080
+ if (!$outdated_templates) {
2081
+ $outdated_templates = true;
2082
+ }
2083
+ $found_files[$theme_folder][] = array(
2084
+ str_replace(WP_CONTENT_DIR . '/themes/', '', $theme_file),
2085
+ $theme_version ? $theme_version : '-',
2086
+ $core_version,
2087
+ true
2088
+ );
2089
+ } else {
2090
+ $found_files[$theme_folder][] = array(
2091
+ str_replace(WP_CONTENT_DIR . '/themes/', '', $theme_file),
2092
+ $theme_version ? $theme_version : '?',
2093
+ $core_version ? $core_version : '?',
2094
+ null
2095
+ );
2096
+ }
2097
+ }
2098
+ if ($check && $outdated_templates) {
2099
+ return $outdated_templates;
2100
+ }
2101
+ }
2102
+ if (sizeof($found_files) > 1) {
2103
+ $found_files = array_merge($found_files[$t_folder], $found_files[$s_folder]);
2104
+ } else {
2105
+ $found_files = reset($found_files);
2106
+ }
2107
+
2108
+ return $check ? $outdated_templates : $found_files;
2109
  }
2110
 
2111
+ function learn_press_detect_outdated_template()
2112
+ {
2113
+ $template_folder = learn_press_template_path();
2114
+ $template_path = LP_PLUGIN_PATH . '/templates/';
2115
+ $template_dir = get_template_directory();
2116
+ $stylesheet_dir = get_stylesheet_directory();
2117
+ $scanned_files = learn_press_scan_template_files($template_path);
2118
+ $parent_item = 0;
2119
+ $child_item = 0;
2120
+
2121
+ foreach ($scanned_files as $file) {
2122
+ $theme_file = false;
2123
+ $cradle = '';
2124
+
2125
+ if ($stylesheet_dir == $template_dir) { // Parent theme
2126
+ if (file_exists($template_dir . '/' . $file)) {
2127
+ $theme_file = $template_dir . '/' . $file;
2128
+ $cradle = 'parent';
2129
+ } elseif (file_exists($template_dir . '/' . $template_folder . '/' . $file)) {
2130
+ $theme_file = $template_dir . '/' . $template_folder . '/' . $file;
2131
+ $cradle = 'parent';
2132
+ }
2133
+ } else { // Child Theme
2134
+ if (file_exists($stylesheet_dir . '/' . $file)) {
2135
+ $theme_file = $stylesheet_dir . '/' . $file;
2136
+ $cradle = 'child';
2137
+ } elseif (file_exists($stylesheet_dir . '/' . $template_folder . '/' . $file)) {
2138
+ $theme_file = $stylesheet_dir . '/' . $template_folder . '/' . $file;
2139
+ $cradle = 'child';
2140
+ } elseif (file_exists($template_dir . '/' . $file)) {
2141
+ $theme_file = $template_dir . '/' . $file;
2142
+ $cradle = 'parent';
2143
+ } elseif (file_exists($template_dir . '/' . $template_folder . '/' . $file)) {
2144
+ $theme_file = $template_dir . '/' . $template_folder . '/' . $file;
2145
+ $cradle = 'parent';
2146
+ }
2147
+ }
2148
+
2149
+ if (!empty($theme_file)) {
2150
+ $core_version = learn_press_get_file_version($template_path . $file);
2151
+ $theme_version = learn_press_get_file_version($theme_file);
2152
+
2153
+ if ($core_version && (empty($theme_version) || version_compare($theme_version, $core_version, '<'))) {
2154
+ if ($cradle == 'parent') {
2155
+ $parent_item++;
2156
+ } else {
2157
+ $child_item++;
2158
+ }
2159
+ }
2160
+ }
2161
+ }
2162
+ if (!empty($child_item) || !empty($parent_item)) {
2163
+
2164
+ return array(
2165
+ 'parent_item' => $parent_item,
2166
+ 'child_item' => $child_item
2167
+ );
2168
+ }
2169
+
2170
+ return false;
 
 
 
 
2171
  }
2172
 
2173
+ function learn_press_scan_template_files($template_path)
2174
+ {
2175
+
2176
+ $files = @scandir($template_path);
2177
+ $result = array();
2178
+
2179
+ if (!empty($files)) {
2180
+ foreach ($files as $key => $value) {
2181
+ if (!in_array($value, array(".", "..", 'index.php', 'index.html'))) {
2182
+ if (is_dir($template_path . '/' . $value)) {
2183
+ $sub_files = learn_press_scan_template_files($template_path . '/' . $value);
2184
+ foreach ($sub_files as $sub_file) {
2185
+ $result[] = $value . '/' . $sub_file;
2186
+ }
2187
+ } else {
2188
+ $result[] = $value;
2189
+ }
2190
+ }
2191
+ }
2192
+ }
2193
+
2194
+ return $result;
2195
  }
2196
 
2197
+ if (!function_exists('learn_press_duplicate_lesson')) {
2198
 
2199
+ function learn_press_duplicate_lesson($lesson_id = null)
2200
+ {
2201
+ return learn_press_duplicate_post($lesson_id);
2202
+ }
2203
 
2204
  }
2205
+
2206
+
2207
+ /**
2208
+ * Get general data to render in chart
2209
+ *
2210
+ * @param null $from
2211
+ * @param null $by
2212
+ * @param $time_ago
2213
+ *
2214
+ * @return array
2215
+ */
2216
+ function learn_press_get_chart_general($from = null, $by = null, $time_ago)
2217
+ {
2218
+ global $wpdb;
2219
+
2220
+ $labels = array();
2221
+ $datasets = array();
2222
+
2223
+ if (is_null($from)) {
2224
+ $from = current_time('mysql');
2225
+ }
2226
+
2227
+ if (is_null($by)) {
2228
+ $by = 'days';
2229
+ }
2230
+
2231
+ $results = array(
2232
+ 'all' => array(),
2233
+ 'public' => array(),
2234
+ 'pending' => array(),
2235
+ 'free' => array(),
2236
+ 'paid' => array()
2237
+ );
2238
+
2239
+ $results = array(
2240
+ 'course' => array(),
2241
+ 'lesson' => array(),
2242
+ 'quiz' => array(),
2243
+ 'student' => array(),
2244
+ 'teacher' => array(),
2245
+ 'revenue' => array()
2246
+ );
2247
+
2248
+ $from_time = is_numeric($from) ? $from : strtotime($from);
2249
+
2250
+ switch ($by) {
2251
+ case 'days':
2252
+ $date_format = 'M d Y';
2253
+ $_from = -$time_ago + 1;
2254
+ $_from = date('Y-m-d', strtotime("{$_from} {$by}", $from_time));
2255
+ $_to = date('Y-m-d', $from_time);
2256
+ $_sql_format = '%Y-%m-%d';
2257
+ $_key_format = 'Y-m-d';
2258
+ break;
2259
+
2260
+ case 'months':
2261
+ $date_format = 'M Y';
2262
+ $_from = -$time_ago + 1;
2263
+ $_from = date('Y-m-01', strtotime("{$_from} {$by}", $from_time));
2264
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
2265
+ $_to = date('Y-m-' . $days, $from_time);
2266
+ $_sql_format = '%Y-%m';
2267
+ $_key_format = 'Y-m';
2268
+ break;
2269
+
2270
+ case 'years':
2271
+ $date_format = 'Y';
2272
+ $_from = -$time_ago + 1;
2273
+ $_from = date('Y-01-01', strtotime("{$_from} {$by}", $from_time));
2274
+ $days = date('t', mktime(0, 0, 0, date('m', $from_time), 1, date('Y', $from_time)));
2275
+ $_to = date('Y-12-' . $days, $from_time);
2276
+ $_sql_format = '%Y';
2277
+ $_key_format = 'Y';
2278
+ break;
2279
+
2280
+ }
2281
+
2282
+ $query_where = '';
2283
+ if (current_user_can(LP_TEACHER_ROLE)) {
2284
+ $user_id = learn_press_get_current_user_id();
2285
+ $query_where .= $wpdb->prepare(" AND c.post_author=%d ", $user_id);
2286
+ }
2287
+
2288
+ $query = $wpdb->prepare("
2289
+ SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
2290
+ FROM {$wpdb->posts} c
2291
+ WHERE 1
2292
+ {$query_where}
2293
+ AND c.post_status IN('publish', 'pending') AND c.post_type = %s
2294
+ GROUP BY d
2295
+ HAVING d BETWEEN %s AND %s
2296
+ ORDER BY d ASC
2297
+ ", $_sql_format, 'lp_course', $_from, $_to);
2298
+ if ($_results = $wpdb->get_results($query)) {
2299
+ foreach ($_results as $k => $v) {
2300
+ $results['all'][$v->d] = $v;
2301
+ }
2302
+ }
2303
+ $query = $wpdb->prepare("
2304
+ SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
2305
+ FROM {$wpdb->posts} c
2306
+ WHERE 1
2307
+ {$query_where}
2308
+ AND c.post_status = %s AND c.post_type = %s
2309
+ GROUP BY d
2310
+ HAVING d BETWEEN %s AND %s
2311
+ ORDER BY d ASC
2312
+ ", $_sql_format, 'publish', 'lp_course', $_from, $_to);
2313
+ if ($_results = $wpdb->get_results($query)) {
2314
+ foreach ($_results as $k => $v) {
2315
+ $results['publish'][$v->d] = $v;
2316
+ }
2317
+ }
2318
+
2319
+ $query = $wpdb->prepare("
2320
+ SELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d
2321
+ FROM {$wpdb->posts} c
2322
+ INNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID AND cm.meta_key = %s AND cm.meta_value = %s
2323
+ WHERE 1
2324
+ {$query_where}
2325
+ AND c.post_status = %s AND c.post_type = %s
2326
+ GROUP BY d
2327
+ HAVING d BETWEEN %s AND %s
2328
+ ORDER BY d ASC
2329
+ ", $_sql_format, '_lp_payment', 'yes', 'publish', 'lp_course', $_from, $_to);
2330
+ if ($_results = $wpdb->get_results($query)) {
2331
+ foreach ($_results as $k => $v) {
2332
+ $results['paid'][$v->d] = $v;
2333
+ }
2334
+ }
2335
+
2336
+ for ($i = -$time_ago + 1; $i <= 0; $i++) {
2337
+ $date = strtotime("$i $by", $from_time);
2338
+ $labels[] = date($date_format, $date);
2339
+ $key = date($_key_format, $date);
2340
+
2341
+ $all = !empty($results['all'][$key]) ? $results['all'][$key]->c : 0;
2342
+ $publish = !empty($results['publish'][$key]) ? $results['publish'][$key]->c : 0;
2343
+ $paid = !empty($results['paid'][$key]) ? $results['paid'][$key]->c : 0;
2344
+
2345
+ $datasets[0]['data'][] = $all;
2346
+ $datasets[1]['data'][] = $publish;
2347
+ $datasets[2]['data'][] = $all - $publish;
2348
+ $datasets[3]['data'][] = $paid;
2349
+ $datasets[4]['data'][] = $all - $paid;
2350
+ }
2351
+
2352
+ $dataset_params = array(
2353
+ array(
2354
+ 'color1' => 'rgba(47, 167, 255, %s)',
2355
+ 'color2' => '#FFF',
2356
+ 'label' => __('All', 'learnpress')
2357
+ ),
2358
+ array(
2359
+ 'color1' => 'rgba(212, 208, 203, %s)',
2360
+ 'color2' => '#FFF',
2361
+ 'label' => __('Publish', 'learnpress')
2362
+ ),
2363
+ array(
2364
+ 'color1' => 'rgba(234, 199, 155, %s)',
2365
+ 'color2' => '#FFF',
2366
+ 'label' => __('Pending', 'learnpress')
2367
+ ),
2368
+ array(
2369
+ 'color1' => 'rgba(234, 199, 155, %s)',
2370
+ 'color2' => '#FFF',
2371
+ 'label' => __('Paid', 'learnpress')
2372
+ ),
2373
+ array(
2374
+ 'color1' => 'rgba(234, 199, 155, %s)',
2375
+ 'color2' => '#FFF',
2376
+ 'label' => __('Free', 'learnpress')
2377
+ )
2378
+ );
2379
+
2380
+ foreach ($dataset_params as $k => $v) {
2381
+ $datasets[$k]['fillColor'] = sprintf($v['color1'], '0.2');
2382
+ $datasets[$k]['strokeColor'] = sprintf($v['color1'], '1');
2383
+ $datasets[$k]['pointColor'] = sprintf($v['color1'], '1');
2384
+ $datasets[$k]['pointStrokeColor'] = $v['color2'];
2385
+ $datasets[$k]['pointHighlightFill'] = $v['color2'];
2386
+ $datasets[$k]['pointHighlightStroke'] = sprintf($v['color1'], '1');
2387
+ $datasets[$k]['label'] = $v['label'];
2388
+ }
2389
+
2390
+ return array(
2391
+ 'labels' => $labels,
2392
+ 'datasets' => $datasets,
2393
+ 'sql' => $query
2394
+ );
2395
+ }
2396
+
2397
+ function learn_press_get_default_section($section = null)
2398
+ {
2399
+ if (!$section) {
2400
+ $section = new stdClass();
2401
+ }
2402
+ foreach (array(
2403
+ 'section_id' => null,
2404
+ 'section_name' => '',
2405
+ 'section_course_id' => null,
2406
+ 'section_order' => null,
2407
+ 'section_description' => ''
2408
+ ) as $k => $v) {
2409
+ if (!property_exists($section, $k)) {
2410
+ $section->{$k} = $v;
2411
+ }
2412
+ }
2413
+ return $section;
2414
+ }
inc/admin/meta-boxes/class-course-tabs-field.php CHANGED
@@ -11,7 +11,7 @@ if ( !class_exists( 'RWMB_Course_Tabs_Field' ) ) {
11
  * @class RWMB_Course_lesson_Quiz_Field
12
  */
13
  class RWMB_Course_Tabs_Field extends RWMB_Field {
14
- public static function html() {
15
  ob_start();
16
  learn_press_admin_view( 'meta-boxes/course/tabs.php' );
17
  return ob_get_clean();
11
  * @class RWMB_Course_lesson_Quiz_Field
12
  */
13
  class RWMB_Course_Tabs_Field extends RWMB_Field {
14
+ public static function html( $meta, $field ) {
15
  ob_start();
16
  learn_press_admin_view( 'meta-boxes/course/tabs.php' );
17
  return ob_get_clean();
inc/admin/meta-boxes/class-curriculum-field.php DELETED
@@ -1,316 +0,0 @@
1
- <?php
2
- // Prevent loading this file directly
3
- defined( 'ABSPATH' ) || exit;
4
-
5
- if ( !class_exists( 'RWMB_Curriculum_Field' ) ) {
6
- /**
7
- * Thim Theme
8
- *
9
- * Manage Course, Lesson, Quiz
10
- *
11
- * @class RWMB_Course_lesson_Quiz_Field
12
- */
13
- class RWMB_Curriculum_Field extends RWMB_Field {
14
- /**
15
- * Enqueue scripts and styles
16
- *
17
- * @return void
18
- */
19
- public static function admin_enqueue_scripts() {
20
-
21
- LP_Assets::enqueue_script( 'learn-press-modal-search-items' );
22
- LP_Assets::add_localize(
23
- array(
24
- 'confirm_remove_section_lesson' => __( 'Do you want to remove this lesson permanently?', 'learnpress' ),
25
- 'confirm_remove_section_quiz' => __( 'Do you want to remove this quiz permanently?', 'learnpress' ),
26
- 'confirm_remove_section' => __( 'Do you want to remove this section permanently?', 'learnpress' ),
27
- 'add_new_quiz' => __( 'New quiz added', 'learnpress' ),
28
- 'add_new_lesson' => __( 'New lesson added', 'learnpress' ),
29
- 'add_new_section' => __( 'New section added', 'learnpress' ),
30
- 'remove_section_lesson' => __( 'The lesson removed', 'learnpress' ),
31
- 'remove_section_quiz' => __( 'The quiz removed', 'learnpress' ),
32
- 'remove_section' => __( 'The section removed', 'learnpress' ),
33
- 'section_ordered' => __( 'The ordering completed', 'learnpress' ),
34
- 'add_lesson_to_section' => __( 'Lesson added to section completed!', 'learnpress' ),
35
- 'add_quiz_to_section' => __( 'Quiz added to section completed!', 'learnpress' ),
36
- 'update_lesson_quiz' => __( '%s updated', 'learnpress' ),
37
- 'quick_edit_name' => __( 'Click to quick edit name', 'learnpress' ),
38
- 'save_course' => __( 'Save Course', 'learnpress' ),
39
- 'submit_course_review' => __( 'Submit for Review', 'learnpress' )
40
- ), null, 'learn-press-mb-course'
41
- );
42
- }
43
-
44
- /**
45
- * Get field HTML
46
- *
47
- * @param mixed $meta
48
- * @param array $field
49
- *
50
- * @return string
51
- */
52
- public static function html( $meta, $field ) {
53
- global $post;
54
- $course = LP_Course::get_course( $post );
55
- $view = learn_press_get_admin_view( 'meta-boxes/course/curriculum.php' );
56
- ob_start();
57
- include $view;
58
- return ob_get_clean();
59
- }
60
-
61
- /**
62
- * Normalize parameters for field
63
- *
64
- * @param array $field
65
- *
66
- * @return array
67
- */
68
- public static function normalize_field( $field ) {
69
- $field = wp_parse_args( $field, array(
70
- 'size' => 30,
71
- 'datalist' => false,
72
- 'placeholder' => '',
73
- ) );
74
-
75
- return $field;
76
- }
77
-
78
- /**
79
- * Create datalist, if any
80
- *
81
- * @param array $field
82
- *
83
- * @return array
84
- */
85
- public static function datalist_html( $field ) {
86
- if ( !$field['datalist'] ) {
87
- return '';
88
- }
89
-
90
- $datalist = $field['datalist'];
91
- $html = sprintf(
92
- '<datalist id="%s">',
93
- $datalist['id']
94
- );
95
-
96
- foreach ( $datalist['options'] as $option ) {
97
- $html .= sprintf( '<option value="%s"></option>', $option );
98
- }
99
-
100
- $html .= '</datalist>';
101
-
102
- return $html;
103
- }
104
-
105
- /**
106
- * Save meta value
107
- * If field is cloneable, value is saved as a single entry in DB
108
- * Otherwise value is saved as multiple entries (for backward compatibility)
109
- *
110
- * TODO: A good way to ALWAYS save values in single entry in DB, while maintaining backward compatibility
111
- *
112
- * @param $new
113
- * @param $old
114
- * @param $post_id
115
- * @param $field
116
- */
117
- public static function save( $new, $old, $post_id, $field ) {
118
-
119
- if ( empty( $new ) ) {
120
- delete_post_meta( $post_id, $field['id'] );
121
- } else {
122
- $new = array_values( $new );
123
- for ( $n = count( $new ), $i = $n - 1; $i >= 0; $i -- ) {
124
- if ( !$new[$i]['name'] ) unset( $new[$i] );
125
- }
126
- $new = array_values( $new );
127
- update_post_meta( $post_id, $field['id'], $new );
128
- }
129
- }
130
-
131
- public static function add_actions() {
132
- // Do same actions as file field
133
- parent::add_actions();
134
-
135
- /*add_action( 'wp_ajax_lpr_quick_add', array( __CLASS__, 'quick_add' ) );
136
- add_action( 'wp_ajax_lpr_update_course_curriculum', array( __CLASS__, 'update_course_curriculum' ) );
137
- add_action( 'wp_ajax_lpr_quick_edit_lesson_quiz_name', array( __CLASS__, 'quick_edit_lesson_quiz_name' ) );
138
- add_action( 'wp_ajax_lpr_update_section_state', array( __CLASS__, 'update_section_state' ) );
139
- add_action( 'wp_ajax_lpr_remove_lesson_quiz', array( __CLASS__, 'remove_lesson_quiz' ) );*/
140
-
141
- ///add_action( 'save_post', array( __CLASS__, 'update_course_curriculum' ) );
142
- add_filter( 'learn_press_loop_section_buttons', array( __CLASS__, 'add_section_buttons' ) );
143
- //add_filter( 'learn_press_after_section_content', array( __CLASS__, 'section_options' ) );
144
- }
145
-
146
- public static function add_section_buttons( $buttons ) {
147
- $buttons = array_merge(
148
- $buttons,
149
- array(
150
- array(
151
- 'id' => 'add-lesson',
152
- 'text' => __( 'Add Lesson', 'learnpress' ),
153
- 'attr' => 'data-action="add-lesson" data-type="lp_lesson"'
154
- ),
155
- array(
156
- 'id' => 'add-quiz',
157
- 'text' => __( 'Add Quiz', 'learnpress' ),
158
- 'attr' => 'data-action="add-quiz" data-type="lp_quiz"'
159
- )
160
- )
161
- );
162
- return $buttons;
163
- }
164
-
165
- public static function section_options() {
166
- ?>
167
- <table class="form-table">
168
- <tr>
169
- <th>
170
- <?php _e( 'Using final quiz', 'learnpress' ); ?>
171
- </th>
172
- <td>
173
- <input type="checkbox" />
174
-
175
- <p class="description"><?php _e( 'User must be complete the final quiz to finish a section.', 'learnpress' ); ?></p>
176
-
177
- </td>
178
- </tr>
179
- </table>
180
- <?php
181
- }
182
-
183
- public static function remove_lesson_quiz() {
184
- $lesson_quiz_id = $_POST['lesson_quiz_id'];
185
- delete_post_meta( $lesson_quiz_id, '_lpr_course' );
186
- update_post_meta( $lesson_quiz_id, '_lpr_course', 0 );
187
- }
188
-
189
- public static function update_section_state() {
190
- $post_id = $_POST['post_id'];
191
- $section = $_POST['section'];
192
- update_post_meta( $post_id, '_lpr_course_section_state', $section );
193
- die();
194
- }
195
-
196
- public static function quick_add() {
197
- //ob_end_flush();
198
- echo '__LP_JSON__';
199
- $name = isset( $_POST['name'] ) ? $_POST['name'] : null;
200
- $type = isset( $_POST['type'] ) ? $_POST['type'] : null;
201
- $course_id = isset( $_POST['course_id'] ) ? $_POST['course_id'] : null;
202
- $post = false;
203
- if ( $name && $type ) {
204
- $post_id = wp_insert_post(
205
- array(
206
- 'post_title' => $name,
207
- 'post_type' => $type == 'lesson' ? LP_LESSON_CPT : LP_QUIZ_CPT,
208
- 'post_status' => 'publish'
209
- )
210
- );
211
- if ( $post_id ) {
212
- $post = get_post( $post_id );
213
- if ( $course_id ) {
214
- update_post_meta( $post_id, '_lpr_course', $course_id );
215
- }
216
- }
217
- }
218
- wp_send_json( $post );
219
- die();
220
- }
221
-
222
- public static function quick_edit_lesson_quiz_name() {
223
- $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : 0;
224
- echo '__LP_JSON__';
225
- if ( $id ) {
226
- $name = $_POST['name'];
227
- $slug = sanitize_title( $name );
228
- $post_id = wp_update_post(
229
- array(
230
- 'ID' => $id,
231
- 'post_title' => $name,
232
- 'post_name' => $slug
233
- )
234
- );
235
- if ( $post_id ) {
236
- wp_send_json( get_post( $post_id ) );
237
- }
238
- }
239
-
240
- }
241
-
242
- public static function update_course_curriculum() {
243
-
244
- $is_ajax = false;
245
- if ( !empty( $_REQUEST['action'] ) && 'lpr_update_course_curriculum' == $_REQUEST['action'] ) {
246
- $course_id = isset( $_POST['course_id'] ) ? intval( $_POST['course_id'] ) : 0;
247
- $is_ajax = true;
248
- } else {
249
- if ( LP_COURSE_CPT != get_post_type() ) return;
250
- global $post;
251
- $course_id = $post->ID;
252
- }
253
- $meta_key = isset( $_POST['meta_key'] ) ? $_POST['meta_key'] : '_lpr_course_lesson_quiz';
254
- $metadata = isset( $_POST['_lpr_course_lesson_quiz'] ) ? $_POST['_lpr_course_lesson_quiz'] : false;
255
- if ( !$course_id ) {
256
- echo '__LP_JSON__';
257
- wp_send_json(
258
- array(
259
- 'message' => __( 'The course is empty', 'learnpress' )
260
- )
261
- );
262
- }
263
-
264
- $metadata = apply_filters( 'learn_press_course_curriculum', $metadata, $course_id );
265
- update_post_meta( $course_id, $meta_key, $metadata );
266
- do_action( 'learn_press_update_course_curriculum', $course_id, $metadata );
267
-
268
- //
269
- global $wpdb;
270
- if ( $metadata ) foreach ( $metadata as $section ) {
271
- if ( !empty( $section['lesson_quiz'] ) && $lesson_quiz = $section['lesson_quiz'] ) {
272
- $query = $wpdb->prepare( "
273
- DELETE FROM {$wpdb->postmeta}
274
- WHERE meta_key = %s
275
- AND ( meta_value = %d OR meta_value = %d OR meta_value = %s )
276
- AND post_id IN(" . join( ',', $lesson_quiz ) . ")
277
- ", '_lpr_course', $course_id, 0, '' );
278
-
279
- $wpdb->query( $query );
280
-
281
- $query = "INSERT INTO {$wpdb->postmeta}(`post_id`, `meta_key`, `meta_value`) VALUES";
282
- $query_values = array();
283
- foreach ( $lesson_quiz as $id ) {
284
- $query_values[] = $wpdb->prepare( "(%d, %s, %d)", $id, '_lpr_course', $course_id );
285
- }
286
- $query .= join( ",", $query_values );
287
- $wpdb->query( $query );
288
- }
289
- }
290
- if ( !$is_ajax ) return;
291
- wp_send_json(
292
- array(
293
- 'message' => __( 'Success', 'learnpress' )
294
- )
295
- );
296
- }
297
-
298
- public static function meta( $post_id, $saved, $field ) {
299
- $meta = get_post_meta( $post_id, $field['id'], true );
300
-
301
- // Use $field['std'] only when the meta box hasn't been saved (i.e. the first time we run)
302
- $meta = ( !$saved && '' === $meta || array() === $meta ) ? $field['std'] : $meta;
303
-
304
- // Escape attributes for non-wysiwyg fields
305
- if ( 'wysiwyg' !== $field['type'] ) {
306
- //$meta = is_array( $meta ) ? array_map( 'esc_attr', $meta ) : esc_attr( $meta );
307
- }
308
-
309
- return $meta;
310
- }
311
-
312
- public static function cleanHeader() {
313
-
314
- }
315
- }
316
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/admin/meta-boxes/class-meta-box-tabs.php DELETED
@@ -1,18 +0,0 @@
1
- <?php
2
- // Prevent loading this file directly
3
- defined( 'ABSPATH' ) || exit;
4
-
5
- if ( !class_exists( 'RWMB_Meta_Box_Tabs_Field' ) ) {
6
- /**
7
- * Thim Theme
8
- *
9
- * Manage Course, Lesson, Quiz
10
- *
11
- * @class RWMB_Course_lesson_Quiz_Field
12
- */
13
- class RWMB_Meta_Box_Tabs_Field extends RWMB_Field {
14
- public static function html() {
15
- echo 'xxxxxxxxxxxxxx';
16
- }
17
- }
18
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/{libraries/meta-box/inc/fields → admin/meta-boxes}/duration.php RENAMED
@@ -1,67 +1,80 @@
1
- <?php
2
- // Prevent loading this file directly
3
- defined( 'ABSPATH' ) || exit;
4
-
5
- if ( !class_exists( 'RWMB_Duration_Field' ) ) {
6
- class RWMB_Duration_Field extends RWMB_Field {
7
- /**
8
- * Get field HTML
9
- *
10
- * @param mixed $meta
11
- * @param array $field
12
- *
13
- * @return string
14
- */
15
- static function html( $meta, $field ) {
16
- $duration = learn_press_get_course_duration_support();
17
- $duration_keys = array_keys( $duration );
18
- $default_time = !empty( $field['default_time'] ) ? $field['default_time'] : end( $duration_keys );
19
- if ( preg_match_all( '!([0-9]+)\s*(' . join( '|', $duration_keys ) . ')?!', $meta, $matches ) ) {
20
- $a1 = $matches[1][0];
21
- $a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : $default_time;
22
- } else {
23
- $a1 = absint( $meta );
24
- $a2 = $default_time;
25
- }
26
- $html_option = '';
27
- foreach ( $duration as $k => $v ) {
28
- $html_option .= sprintf( '<option value="%s" %s>%s</option>', $k, selected( $k, $a2, false ), $v );
29
- }
30
-
31
- return sprintf(
32
- '<input type="number" class="rwmb-number" name="%s[]" id="%s" value="%s" step="%s" min="%s" placeholder="%s"/>',
33
- $field['field_name'],
34
- empty( $field['clone'] ) ? $field['id'] : '',
35
- $a1,
36
- $field['step'],
37
- $field['min'],
38
- $field['placeholder']
39
- ) . sprintf(
40
- '<select name="%s[]" id="%s">%s</select>',
41
- $field['field_name'],
42
- empty( $field['clone'] ) ? $field['id'].'_select' : '',
43
- $html_option
44
- );
45
- }
46
-
47
- /**
48
- * Normalize parameters for field
49
- *
50
- * @param array $field
51
- *
52
- * @return array
53
- */
54
- static function normalize_field( $field ) {
55
- $field = wp_parse_args( $field, array(
56
- 'step' => 1,
57
- 'min' => 0,
58
- ) );
59
-
60
- return $field;
61
- }
62
-
63
- static function value( $new, $old, $post_id, $field ) {
64
- return join( ' ', $new );
65
- }
66
- }
67
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Prevent loading this file directly
3
+ defined( 'ABSPATH' ) || exit;
4
+
5
+ if ( !class_exists( 'RWMB_Duration_Field' ) ) {
6
+ class RWMB_Duration_Field extends RWMB_Field {
7
+ /**
8
+ * Get field HTML
9
+ *
10
+ * @param mixed $meta
11
+ * @param array $field
12
+ *
13
+ * @return string
14
+ */
15
+ static function html( $meta, $field ) {
16
+ $duration = learn_press_get_course_duration_support();
17
+ $duration_keys = array_keys( $duration );
18
+ $default_time = !empty( $field['default_time'] ) ? $field['default_time'] : end( $duration_keys );
19
+ if ( preg_match_all( '!([0-9]+)\s*(' . join( '|', $duration_keys ) . ')?!', $meta, $matches ) ) {
20
+ $a1 = $matches[1][0];
21
+ $a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : $default_time;
22
+ } else {
23
+ $a1 = absint( $meta );
24
+ $a2 = $default_time;
25
+ }
26
+ $html_option = '';
27
+ foreach ( $duration as $k => $v ) {
28
+ $html_option .= sprintf( '<option value="%s" %s>%s</option>', $k, selected( $k, $a2, false ), $v );
29
+ }
30
+
31
+ return sprintf(
32
+ '<input type="number" class="rwmb-number" name="%s[]" id="%s" value="%s" step="%s" min="%s" placeholder="%s"/>',
33
+ $field['field_name'],
34
+ empty( $field['clone'] ) ? $field['id'] : '',
35
+ $a1,
36
+ $field['step'],
37
+ $field['min'],
38
+ $field['placeholder']
39
+ ) . sprintf(
40
+ '<select name="%s[]" id="%s">%s</select>',
41
+ $field['field_name'],
42
+ empty( $field['clone'] ) ? $field['id'] . '_select' : '',
43
+ $html_option
44
+ );
45
+ }
46
+
47
+ /**
48
+ * Normalize parameters for field
49
+ *
50
+ * @param array $field
51
+ *
52
+ * @return array
53
+ */
54
+ static function normalize_field( $field ) {
55
+ return self::normalize( $field );
56
+ }
57
+
58
+ /**
59
+ * Normalize parameters for field
60
+ *
61
+ * @param array $field
62
+ *
63
+ * @return array
64
+ */
65
+ static function normalize( $field ) {
66
+ if ( is_callable( 'parent::normalize' ) ) {
67
+ $field = parent::normalize( $field );
68
+ }
69
+ $field = wp_parse_args( $field, array(
70
+ 'step' => 1,
71
+ 'min' => 0,
72
+ ) );
73
+ return $field;
74
+ }
75
+
76
+ static function value( $new, $old, $post_id, $field ) {
77
+ return join( ' ', $new );
78
+ }
79
+ }
80
+ }
inc/admin/settings/class-lp-settings-courses.php CHANGED
@@ -18,13 +18,13 @@ class LP_Settings_Courses extends LP_Settings_Base {
18
  'title' => __( 'General', 'learnpress' )
19
  )
20
  );
 
21
  return $sections = apply_filters( 'learn_press_settings_sections_' . $this->id, $sections );
22
  }
23
 
24
  public function save() {
25
  parent::save();
26
  $course_permalink = $_POST['learn_press_course_base'];
27
- update_option( 'learn_press_course_base_type', $course_permalink );
28
  if ( $course_permalink == 'custom' ) {
29
  $course_permalink = trim( $_POST['course_permalink_structure'], '/' );
30
 
@@ -33,8 +33,10 @@ class LP_Settings_Courses extends LP_Settings_Base {
33
  }
34
 
35
  $course_permalink = '/' . $course_permalink;
36
- } elseif ( empty( $course_permalink ) ) {
37
- $course_permalink = false;
 
 
38
  }
39
 
40
  $course_base = untrailingslashit( $course_permalink );
@@ -95,13 +97,39 @@ class LP_Settings_Courses extends LP_Settings_Base {
95
  'default' => 'yes',
96
  'type' => 'checkbox'
97
  ),
98
- array(
 
99
  'title' => __( 'Show list of question in quiz', 'learnpress' ),
100
  'desc' => __( 'Show/Hide list questions in quiz.', 'learnpress' ),
101
  'id' => $this->get_field_name( 'disable_question_in_quiz' ),
102
  'default' => 'yes',
103
  'type' => 'checkbox'
 
 
 
 
 
 
 
 
104
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  array(
106
  'title' => __( 'Archive', 'learnpress' ),
107
  'type' => 'title'
18
  'title' => __( 'General', 'learnpress' )
19
  )
20
  );
21
+
22
  return $sections = apply_filters( 'learn_press_settings_sections_' . $this->id, $sections );
23
  }
24
 
25
  public function save() {
26
  parent::save();
27
  $course_permalink = $_POST['learn_press_course_base'];
 
28
  if ( $course_permalink == 'custom' ) {
29
  $course_permalink = trim( $_POST['course_permalink_structure'], '/' );
30
 
33
  }
34
 
35
  $course_permalink = '/' . $course_permalink;
36
+ update_option( 'learn_press_course_base_type', 'custom' );
37
+
38
+ } else {
39
+ delete_option( 'learn_press_course_base_type' );
40
  }
41
 
42
  $course_base = untrailingslashit( $course_permalink );
97
  'default' => 'yes',
98
  'type' => 'checkbox'
99
  ),
100
+ // Removed from 2.1.4
101
+ /*array(
102
  'title' => __( 'Show list of question in quiz', 'learnpress' ),
103
  'desc' => __( 'Show/Hide list questions in quiz.', 'learnpress' ),
104
  'id' => $this->get_field_name( 'disable_question_in_quiz' ),
105
  'default' => 'yes',
106
  'type' => 'checkbox'
107
+ ),*/
108
+ /* Temporary remove from 2.1.4
109
+ array(
110
+ 'title' => __( 'Auto redirect next lesson', 'learnpress' ),
111
+ 'desc' => __( 'Redirect to the next lesson after completed the lesson', 'learnpress' ),
112
+ 'id' => $this->get_field_name( 'auto_redirect_next_lesson' ),
113
+ 'default' => 'no',
114
+ 'type' => 'checkbox'
115
  ),
116
+ array(
117
+ 'title' => __( 'Time delay redirect', 'learnpress' ),
118
+ 'desc' => __( 'The item will be redirected after certain amount of time, unit: seconds (s)', 'learnpress' ),
119
+ 'id' => $this->get_field_name( 'auto_redirect_time' ),
120
+ 'default' => '3',
121
+ 'type' => 'number',
122
+ 'custom_attributes' => array(
123
+ 'min' => '0'
124
+ )
125
+ ),
126
+ array(
127
+ 'title' => __( 'Auto redirect message ', 'learnpress' ),
128
+ 'desc' => '',
129
+ 'id' => $this->get_field_name( 'auto_redirect_message' ),
130
+ 'default' => 'Redirecting to the next item ... ',
131
+ 'type' => 'text'
132
+ ),*/
133
  array(
134
  'title' => __( 'Archive', 'learnpress' ),
135
  'type' => 'title'
inc/admin/settings/class-lp-settings-emails.php CHANGED
@@ -7,7 +7,7 @@
7
  * @package LearnPress/Classes
8
  * @version 1.0
9
  */
10
- if ( !defined( 'ABSPATH' ) ) {
11
  exit; // Exit if accessed directly
12
  }
13
 
@@ -20,7 +20,7 @@ class LP_Settings_Emails extends LP_Settings_Base {
20
  /**
21
  * Constructor
22
  */
23
- public function __construct() {
24
  $this->id = 'emails';
25
  $this->text = __( 'Emails', 'learnpress' );
26
  parent::__construct();
@@ -31,7 +31,7 @@ class LP_Settings_Emails extends LP_Settings_Base {
31
  *
32
  * @return mixed
33
  */
34
- public function get_sections() {
35
 
36
  $emails = LP_Emails::instance()->emails;
37
 
@@ -39,13 +39,14 @@ class LP_Settings_Emails extends LP_Settings_Base {
39
  'general' => array( 'id' => 'general', 'title' => __( 'General options', 'learnpress' ) )
40
  );
41
 
42
- if ( $emails )
43
  foreach ( $emails as $email ) {
44
- $sections[$email->id] = array(
45
  'id' => $email->id,
46
  'title' => $email->title
47
  );
48
  }
 
49
 
50
  /* $sections = array(
51
  'general' => __( 'General options', 'learnpress' ),
@@ -55,13 +56,14 @@ class LP_Settings_Emails extends LP_Settings_Base {
55
  'enrolled_course' => __( 'Enrolled course', 'learnpress' ),
56
  'passed_course' => __( 'Passed course', 'learnpress' ),
57
  ); */
 
58
  return $sections = apply_filters( 'learn_press_settings_sections_' . $this->id, $sections );
59
  }
60
 
61
  /**
62
  * @param $default_message
63
  */
64
- public function message_editor( $default_message ) {
65
  $settings = LP()->settings;
66
  $content = stripslashes( $settings->get( $this->section['id'] . '.message', $default_message ) );
67
  $editor_id = 'email_message';
@@ -74,80 +76,100 @@ class LP_Settings_Emails extends LP_Settings_Base {
74
  );
75
  }
76
 
77
- public function get_email_class( $id ) {
78
  $emails = LP_Emails::instance()->emails;
79
- if ( $emails )
80
  foreach ( $emails as $email ) {
81
  if ( $email->id == $id ) {
82
  return $email;
83
  }
84
  }
 
 
85
  return false;
86
  }
87
 
88
  /**
89
  *
90
  */
91
- public function output_section_general() {
92
  $view = learn_press_get_admin_view( 'settings/emails/general.php' );
93
  include_once $view;
94
  }
95
 
96
- public function output_section_new_course() {
97
  if ( $email = $this->get_email_class( 'new_course' ) ) {
98
  $email->admin_options( $this );
99
  }
100
  }
101
 
102
- public function output_section_user_order_completed() {
103
  if ( $email = $this->get_email_class( 'user_order_completed' ) ) {
104
  $email->admin_options( $this );
105
  }
106
  }
107
 
108
- public function output_section_rejected_course() {
 
 
 
 
 
 
109
  if ( $email = $this->get_email_class( 'rejected_course' ) ) {
110
  $email->admin_options( $this );
111
  }
112
  }
113
 
114
- public function output_section_new_order() {
115
  if ( $email = $this->get_email_class( 'new_order' ) ) {
116
  $email->admin_options( $this );
117
  }
118
  }
119
 
120
- public function output_section_new_order_customer() {
121
  if ( $email = $this->get_email_class( 'new_order_customer' ) ) {
122
  $email->admin_options( $this );
123
  }
124
  }
125
 
126
- public function output_section_published_course() {
127
  if ( $email = $this->get_email_class( 'published_course' ) ) {
128
  $email->admin_options( $this );
129
  }
130
  }
131
 
132
- public function output_section_enrolled_course() {
133
  if ( $email = $this->get_email_class( 'enrolled_course' ) ) {
134
  $email->admin_options( $this );
135
  }
136
  }
137
 
138
- public function output_section_finished_course() {
 
 
 
 
 
 
139
  if ( $email = $this->get_email_class( 'finished_course' ) ) {
140
  $email->admin_options( $this );
141
  }
142
  }
143
 
144
- public function output_section_become_an_instructor() {
 
 
 
 
 
 
145
  if ( $email = $this->get_email_class( 'become_an_instructor' ) ) {
146
  $email->admin_options( $this );
147
  }
148
  }
149
 
150
- public function get_settings() {
151
  return apply_filters(
152
  'learn_press_email_settings', array(
153
  array(
@@ -161,10 +183,11 @@ class LP_Settings_Emails extends LP_Settings_Base {
161
  );
162
  }
163
 
164
- public static function instance() {
165
- if ( !self::$_instance ) {
166
  self::$_instance = new self();
167
  }
 
168
  return self::$_instance;
169
  }
170
  }
7
  * @package LearnPress/Classes
8
  * @version 1.0
9
  */
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
  exit; // Exit if accessed directly
12
  }
13
 
20
  /**
21
  * Constructor
22
  */
23
+ public function __construct () {
24
  $this->id = 'emails';
25
  $this->text = __( 'Emails', 'learnpress' );
26
  parent::__construct();
31
  *
32
  * @return mixed
33
  */
34
+ public function get_sections () {
35
 
36
  $emails = LP_Emails::instance()->emails;
37
 
39
  'general' => array( 'id' => 'general', 'title' => __( 'General options', 'learnpress' ) )
40
  );
41
 
42
+ if ( $emails ) {
43
  foreach ( $emails as $email ) {
44
+ $sections[ $email->id ] = array(
45
  'id' => $email->id,
46
  'title' => $email->title
47
  );
48
  }
49
+ }
50
 
51
  /* $sections = array(
52
  'general' => __( 'General options', 'learnpress' ),
56
  'enrolled_course' => __( 'Enrolled course', 'learnpress' ),
57
  'passed_course' => __( 'Passed course', 'learnpress' ),
58
  ); */
59
+
60
  return $sections = apply_filters( 'learn_press_settings_sections_' . $this->id, $sections );
61
  }
62
 
63
  /**
64
  * @param $default_message
65
  */
66
+ public function message_editor ( $default_message ) {
67
  $settings = LP()->settings;
68
  $content = stripslashes( $settings->get( $this->section['id'] . '.message', $default_message ) );
69
  $editor_id = 'email_message';
76
  );
77
  }
78
 
79
+ public function get_email_class ( $id ) {
80
  $emails = LP_Emails::instance()->emails;
81
+ if ( $emails ) {
82
  foreach ( $emails as $email ) {
83
  if ( $email->id == $id ) {
84
  return $email;
85
  }
86
  }
87
+ }
88
+
89
  return false;
90
  }
91
 
92
  /**
93
  *
94
  */
95
+ public function output_section_general () {
96
  $view = learn_press_get_admin_view( 'settings/emails/general.php' );
97
  include_once $view;
98
  }
99
 
100
+ public function output_section_new_course () {
101
  if ( $email = $this->get_email_class( 'new_course' ) ) {
102
  $email->admin_options( $this );
103
  }
104
  }
105
 
106
+ public function output_section_user_order_completed () {
107
  if ( $email = $this->get_email_class( 'user_order_completed' ) ) {
108
  $email->admin_options( $this );
109
  }
110
  }
111
 
112
+ public function output_section_user_order_changed_status () {
113
+ if ( $email = $this->get_email_class( 'user_order_changed_status' ) ) {
114
+ $email->admin_options( $this );
115
+ }
116
+ }
117
+
118
+ public function output_section_rejected_course () {
119
  if ( $email = $this->get_email_class( 'rejected_course' ) ) {
120
  $email->admin_options( $this );
121
  }
122
  }
123
 
124
+ public function output_section_new_order () {
125
  if ( $email = $this->get_email_class( 'new_order' ) ) {
126
  $email->admin_options( $this );
127
  }
128
  }
129
 
130
+ public function output_section_new_order_customer () {
131
  if ( $email = $this->get_email_class( 'new_order_customer' ) ) {
132
  $email->admin_options( $this );
133
  }
134
  }
135
 
136
+ public function output_section_published_course () {
137
  if ( $email = $this->get_email_class( 'published_course' ) ) {
138
  $email->admin_options( $this );
139
  }
140
  }
141
 
142
+ public function output_section_enrolled_course () {
143
  if ( $email = $this->get_email_class( 'enrolled_course' ) ) {
144
  $email->admin_options( $this );
145
  }
146
  }
147
 
148
+ public function output_section_enrolled_course_admin () {
149
+ if ( $email = $this->get_email_class( 'enrolled_course_admin' ) ) {
150
+ $email->admin_options( $this );
151
+ }
152
+ }
153
+
154
+ public function output_section_finished_course () {
155
  if ( $email = $this->get_email_class( 'finished_course' ) ) {
156
  $email->admin_options( $this );
157
  }
158
  }
159
 
160
+ public function output_section_update_course () {
161
+ if ( $email = $this->get_email_class( 'update_course' ) ) {
162
+ $email->admin_options( $this );
163
+ }
164
+ }
165
+
166
+ public function output_section_become_an_instructor () {
167
  if ( $email = $this->get_email_class( 'become_an_instructor' ) ) {
168
  $email->admin_options( $this );
169
  }
170
  }
171
 
172
+ public function get_settings () {
173
  return apply_filters(
174
  'learn_press_email_settings', array(
175
  array(
183
  );
184
  }
185
 
186
+ public static function instance () {
187
+ if ( ! self::$_instance ) {
188
  self::$_instance = new self();
189
  }
190
+
191
  return self::$_instance;
192
  }
193
  }
inc/admin/settings/class-lp-settings-general.php CHANGED
@@ -83,7 +83,17 @@ class LP_Settings_General extends LP_Settings_Base {
83
  'default' => 'yes',
84
  'type' => 'checkbox',
85
  'desc' => __( 'Turn on/off debug mode for developer', 'learnpress' )
86
- )
 
 
 
 
 
 
 
 
 
 
87
  )
88
  );
89
  }
83
  'default' => 'yes',
84
  'type' => 'checkbox',
85
  'desc' => __( 'Turn on/off debug mode for developer', 'learnpress' )
86
+ ),
87
+ array(
88
+ 'title' => __( 'Logout', 'learnpress' ),
89
+ 'type' => 'title'
90
+ ),
91
+ array(
92
+ 'title' => __( 'Redirect to page', 'learnpress' ),
93
+ 'id' => $this->get_field_name( 'logout_redirect_page_id' ),
94
+ 'default' => '',
95
+ 'type' => 'pages-dropdown'
96
+ ),
97
  )
98
  );
99
  }
inc/admin/settings/class-lp-settings-pages.php CHANGED
@@ -169,7 +169,7 @@ class LP_Settings_Pages extends LP_Settings_Base {
169
  'default' => '',
170
  'type' => 'pages-dropdown'
171
  )
172
- )
173
  );
174
  }
175
 
169
  'default' => '',
170
  'type' => 'pages-dropdown'
171
  )
172
+ ), $this
173
  );
174
  }
175
 
inc/admin/sub-menus/settings.php CHANGED
@@ -54,6 +54,7 @@ function learn_press_settings_page() {
54
  <?php do_action( 'learn_press_settings_' . $current_tab ); ?>
55
  <p>
56
  <button class="button button-primary"><?php _e( 'Save settings', 'learnpress' ); ?></button>
 
57
  </p>
58
  <?php wp_nonce_field( 'learn_press_settings', 'learn_press_settings_nonce' ); ?>
59
  </div>
@@ -85,6 +86,16 @@ function learn_press_admin_update_settings() {
85
  }
86
  }
87
 
 
 
 
 
 
 
 
 
 
 
88
  if ( !empty( $_POST ) ) {
89
  // Check if our nonce is set.
90
  if ( !isset( $_POST['learn_press_settings_nonce'] ) ) {
54
  <?php do_action( 'learn_press_settings_' . $current_tab ); ?>
55
  <p>
56
  <button class="button button-primary"><?php _e( 'Save settings', 'learnpress' ); ?></button>
57
+ <a class="button" href="<?php echo wp_nonce_url( add_query_arg( 'reset', 'yes' ), 'learn-press-reset-settings' ); ?>" id="learn-press-reset-settings" data-text="<?php esc_attr_e( 'Do you want to restore all settings to default?', 'learnpress' ); ?>"><?php _e( 'Reset', 'learnpress' ); ?></a>
58
  </p>
59
  <?php wp_nonce_field( 'learn_press_settings', 'learn_press_settings_nonce' ); ?>
60
  </div>
86
  }
87
  }
88
 
89
+ if ( learn_press_get_request( 'reset' ) == 'yes' && wp_verify_nonce( learn_press_get_request( '_wpnonce' ), 'learn-press-reset-settings' ) ) {
90
+ global $wpdb;
91
+ $sql = "
92
+ DELETE FROM {$wpdb->options} WHERE option_name LIKE %s
93
+ ";
94
+ $wpdb->query( $wpdb->prepare( $sql, $wpdb->esc_like( 'learn_press_' ) . '%' ) );
95
+ wp_redirect( remove_query_arg( array( 'reset', '_wpnonce' ) ) );
96
+ exit();
97
+ }
98
+
99
  if ( !empty( $_POST ) ) {
100
  // Check if our nonce is set.
101
  if ( !isset( $_POST['learn_press_settings_nonce'] ) ) {
inc/admin/sub-menus/statistics.php CHANGED
@@ -30,6 +30,7 @@ class LP_Admin_Submenu_Statistic {
30
  * LP_Admin_Submenu_Statistic constructor.
31
  */
32
  public function __construct() {
 
33
  add_action( 'learn_press_get_stats_users', array( $this, 'get_stats_users' ) );
34
  add_action( 'learn_press_get_stats_courses', array( $this, 'get_stats_courses' ) );
35
  add_action( 'learn_press_get_stats_orders', array( $this, 'get_stats_orders' ) );
@@ -41,7 +42,7 @@ class LP_Admin_Submenu_Statistic {
41
  * Statistic page
42
  */
43
  public function display() {
44
- $this->tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'users';
45
  $this->section = isset( $_GET['section'] ) ? $_GET['section'] : '';
46
  $tabs = array();
47
  if( current_user_can(LP_TEACHER_ROLE) ) {
@@ -52,6 +53,7 @@ class LP_Admin_Submenu_Statistic {
52
  ) );
53
  } else {
54
  $tabs = apply_filters( 'learn_press_statistics_tabs', array(
 
55
  'users' => __( 'Users', 'learnpress' ),
56
  'courses' => __( 'Courses', 'learnpress' ),
57
  'orders' => __( 'Orders', 'learnpress' ),
@@ -68,6 +70,13 @@ class LP_Admin_Submenu_Statistic {
68
  echo '</div>';
69
  }
70
 
 
 
 
 
 
 
 
71
  /**
72
  *
73
  */
30
  * LP_Admin_Submenu_Statistic constructor.
31
  */
32
  public function __construct() {
33
+ add_action( 'learn_press_get_stats_general', array( $this, 'get_stats_general' ) );
34
  add_action( 'learn_press_get_stats_users', array( $this, 'get_stats_users' ) );
35
  add_action( 'learn_press_get_stats_courses', array( $this, 'get_stats_courses' ) );
36
  add_action( 'learn_press_get_stats_orders', array( $this, 'get_stats_orders' ) );
42
  * Statistic page
43
  */
44
  public function display() {
45
+ $this->tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'general';
46
  $this->section = isset( $_GET['section'] ) ? $_GET['section'] : '';
47
  $tabs = array();
48
  if( current_user_can(LP_TEACHER_ROLE) ) {
53
  ) );
54
  } else {
55
  $tabs = apply_filters( 'learn_press_statistics_tabs', array(
56
+ 'general' => __( 'General', 'learnpress' ),
57
  'users' => __( 'Users', 'learnpress' ),
58
  'courses' => __( 'Courses', 'learnpress' ),
59
  'orders' => __( 'Orders', 'learnpress' ),
70
  echo '</div>';
71
  }
72
 
73
+ public function get_stats_general() {
74
+ if( current_user_can(LP_TEACHER_ROLE) ) {
75
+ return;
76
+ }
77
+ require_once learn_press_get_admin_view( 'statistics/general.php' );
78
+ }
79
+
80
  /**
81
  *
82
  */
inc/admin/sub-menus/tools.php CHANGED
@@ -130,7 +130,7 @@ if ( !function_exists( 'learn_press_remove_data' ) ) {
130
  delete_option( 'learnpress_version' );
131
 
132
  LP_Admin_Notice::add( __( 'All courses, lessons, quizzes and questions have been removed', 'learnpress' ), 'updated', '', true );
133
- wp_redirect( admin_url( 'admin.php?page=learn_press_tools&learn-press-remove-data=1' ) );
134
  exit();
135
  }
136
  }
@@ -197,8 +197,8 @@ if ( !function_exists( 'learn_press_remove_old_data' ) ) {
197
 
198
  LP_Admin_Notice::add( __( 'Outdated data from version less than 1.0 have been removed', 'learnpress' ), 'updated', '', true );
199
  //flush_rewrite_rules();
200
- // header('Location: '.admin_url( 'admin.php?page=learn_press_tools' ));
201
- wp_redirect( admin_url( 'admin.php?page=learn_press_tools' ) );
202
  exit();
203
  }
204
  }
@@ -213,48 +213,56 @@ function learn_press_tools_subtabs() {
213
 
214
  function learn_press_tools_page_database() {
215
  ?>
 
216
  <div class="card">
217
- <h2><?php _e( 'Upgrade courses', 'learnpress' ); ?></h2>
 
 
 
 
 
 
 
218
  <p><?php _e( 'Upgrade courses, lessons, quizzes and questions from version less than 1.0.', 'learnpress' ); ?></p>
219
  <div class="learn-press-message">
220
- <?php _e( 'Use this action to force system to upgrade outdated data to latest version.', 'learnpress' ); ?>
221
  </div>
222
- <div class="learn-press-error">
223
- <?php _e( 'All courses will be upgraded whether you have done this action in the past. So please remove all courses before you upgrade to prevent duplicated courses.', 'learnpress' ); ?>
224
  </div>
225
- <p>
226
  <a class="button" href="<?php echo wp_nonce_url( admin_url( 'options-general.php?page=learn_press_upgrade_from_09&force=true' ), 'learn-press-upgrade-09' ); ?>"><?php esc_html_e( 'Upgrade', 'learnpress' ); ?></a>
227
  </p>
228
  </div>
229
  <div class="card">
230
- <h2><?php _e( 'Remove current data', 'learnpress' ); ?></h2>
231
  <p><?php _e( 'Remove all courses, lessons, quizzes and questions', 'learnpress' ); ?></p>
232
  <form method="post" name="learn-press-form-remove-data">
233
- <div class="learn-press-message learn-press-error">
234
- <?php _e( 'Be careful before using this action!', 'learnpress' ); ?>
235
  </div>
236
  <label class="hide-if-js">
237
  <input type="checkbox" name="action" value="learn-press-remove-data" />
238
  <?php _e( 'Check this box and click this button again to confirm.', 'learnpress' ); ?>
239
  </label>
240
- <p>
241
  <button class="button button-fade"><?php esc_html_e( 'Remove', 'learnpress' ); ?></button>
242
  </p>
243
  <?php wp_nonce_field( 'learn-press-remove-data', 'remove-data-nonce' ); ?>
244
  </form>
245
  </div>
246
  <div class="card">
247
- <h2><?php _e( 'Remove outdated data', 'learnpress' ); ?></h2>
248
  <p><?php _e( 'Remove all courses, lessons, quizzes and questions from version less than 1.0.', 'learnpress' ); ?></p>
249
  <form method="post" name="learn-press-form-remove-data">
250
- <div class="learn-press-message learn-press-error">
251
- <?php _e( 'Be careful before using this action! Only use this action in case all outdated data has been upgraded.', 'learnpress' ); ?>
252
  </div>
253
  <label class="hide-if-js">
254
  <input type="checkbox" name="action" value="learn-press-remove-old-data" />
255
  <?php _e( 'Check this box and click this button again to confirm.', 'learnpress' ); ?>
256
  </label>
257
- <p>
258
  <button class="button button-fade"><?php esc_html_e( 'Remove', 'learnpress' ); ?></button>
259
  </p>
260
  <?php wp_nonce_field( 'learn-press-remove-old-data', 'remove-old-data-nonce' ); ?>
130
  delete_option( 'learnpress_version' );
131
 
132
  LP_Admin_Notice::add( __( 'All courses, lessons, quizzes and questions have been removed', 'learnpress' ), 'updated', '', true );
133
+ wp_redirect( admin_url( 'admin.php?page=learn-press-tools&learn-press-remove-data=1' ) );
134
  exit();
135
  }
136
  }
197
 
198
  LP_Admin_Notice::add( __( 'Outdated data from version less than 1.0 have been removed', 'learnpress' ), 'updated', '', true );
199
  //flush_rewrite_rules();
200
+ // header('Location: '.admin_url( 'admin.php?page=learn-press-tools' ));
201
+ wp_redirect( admin_url( 'admin.php?page=learn-press-tools' ) );
202
  exit();
203
  }
204
  }
213
 
214
  function learn_press_tools_page_database() {
215
  ?>
216
+ <!--
217
  <div class="card">
218
+ <h2><?php _e( 'Repair Database', 'learnpress' ); ?></h2>
219
+ <p><?php _e( 'Remove unused rows from database tables. Be carefully backup your database before doing this action.', 'learnpress' ); ?></p>
220
+ <p class="tools-button">
221
+ <button type="button" class="button"><?php esc_html_e( 'Repair', 'learnpress' ); ?></button>
222
+ </p>
223
+ </div>-->
224
+ <div class="card">
225
+ <h2><?php _e( 'Upgrade Courses', 'learnpress' ); ?></h2>
226
  <p><?php _e( 'Upgrade courses, lessons, quizzes and questions from version less than 1.0.', 'learnpress' ); ?></p>
227
  <div class="learn-press-message">
228
+ <p><?php _e( 'Use this action to force system to upgrade outdated data to latest version.', 'learnpress' ); ?></p>
229
  </div>
230
+ <div class="learn-press-message lp-error">
231
+ <p><?php _e( 'All courses will be upgraded whether you have done this action in the past. So please remove all courses before you upgrade to prevent duplicated courses.', 'learnpress' ); ?></p>
232
  </div>
233
+ <p class="tools-button">
234
  <a class="button" href="<?php echo wp_nonce_url( admin_url( 'options-general.php?page=learn_press_upgrade_from_09&force=true' ), 'learn-press-upgrade-09' ); ?>"><?php esc_html_e( 'Upgrade', 'learnpress' ); ?></a>
235
  </p>
236
  </div>
237
  <div class="card">
238
+ <h2><?php _e( 'Remove current Data', 'learnpress' ); ?></h2>
239
  <p><?php _e( 'Remove all courses, lessons, quizzes and questions', 'learnpress' ); ?></p>
240
  <form method="post" name="learn-press-form-remove-data">
241
+ <div class="learn-press-message lp-error">
242
+ <p><?php _e( 'Be careful before using this action!', 'learnpress' ); ?></p>
243
  </div>
244
  <label class="hide-if-js">
245
  <input type="checkbox" name="action" value="learn-press-remove-data" />
246
  <?php _e( 'Check this box and click this button again to confirm.', 'learnpress' ); ?>
247
  </label>
248
+ <p class="tools-button">
249
  <button class="button button-fade"><?php esc_html_e( 'Remove', 'learnpress' ); ?></button>
250
  </p>
251
  <?php wp_nonce_field( 'learn-press-remove-data', 'remove-data-nonce' ); ?>
252
  </form>
253
  </div>
254
  <div class="card">
255
+ <h2><?php _e( 'Remove outdated Data', 'learnpress' ); ?></h2>
256
  <p><?php _e( 'Remove all courses, lessons, quizzes and questions from version less than 1.0.', 'learnpress' ); ?></p>
257
  <form method="post" name="learn-press-form-remove-data">
258
+ <div class="learn-press-message lp-error">
259
+ <p><?php _e( 'Be careful before using this action! Only use this action in case all outdated data has been upgraded.', 'learnpress' ); ?></p>
260
  </div>
261
  <label class="hide-if-js">
262
  <input type="checkbox" name="action" value="learn-press-remove-old-data" />
263
  <?php _e( 'Check this box and click this button again to confirm.', 'learnpress' ); ?>
264
  </label>
265
+ <p class="tools-button">
266
  <button class="button button-fade"><?php esc_html_e( 'Remove', 'learnpress' ); ?></button>
267
  </p>
268
  <?php wp_nonce_field( 'learn-press-remove-old-data', 'remove-old-data-nonce' ); ?>
inc/admin/views/html-admin-notice-templates.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- if ( !defined( 'ABSPATH' ) ) {
4
  exit;
5
  }
6
 
@@ -28,12 +28,16 @@ $theme_name = implode( ' & ', $theme_name );
28
 
29
  ?>
30
  <div id="message" class="learn-press-message notice notice-warning">
31
- <p>
32
- <?php printf( __( 'Your theme <strong>(%s)</strong> contains outdated copies of some LearnPress template files.', 'learnpress' ), esc_html( $theme_name ) ); ?></p>
33
- <p>
34
- <?php _e( 'These files may need updating to ensure they are compatible with the current version of LearnPress. You can see which files are affected from the system status page. If in doubt, check with the author of the theme.', 'learnpress' ); ?></p>
35
- <p>
36
- <a class="button" href="<?php echo esc_url( admin_url( 'admin.php?page=learn-press-tools&tab=templates' ) ); ?>"><?php _e( 'View list of outdated templates', 'learnpress' ); ?></a>
37
- </p>
38
- <a href="<?php echo esc_url( add_query_arg( 'lp-hide-notice', 'template-files', learn_press_get_current_url() ) ); ?>" class="learn-press-admin-notice-dismiss"></a>
 
 
 
 
39
  </div>
1
  <?php
2
 
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
  exit;
5
  }
6
 
28
 
29
  ?>
30
  <div id="message" class="learn-press-message notice notice-warning">
31
+ <p>
32
+ <?php printf( __( 'There is a new update of LearnPress. You may need to update your theme <strong>(%s)</strong> to avoid outdated template files.', 'learnpress' ), esc_html( $theme_name ) ); ?>
33
+ </p>
34
+ <p class="outdated-readmore-link">
35
+ <?php printf( __( 'This is not a bug, don\'t worry. Read more about Outdated template files notice <a href="%s" target="_blank">here</a>.', 'learnpress' ), 'https://thimpress.com/knowledge-base/outdated-template-fix/' ); ?>
36
+ </p>
37
+ <p>
38
+ <a class="button"
39
+ href="<?php echo esc_url( admin_url( 'admin.php?page=learn-press-tools&tab=templates' ) ); ?>"><?php _e( 'View list of outdated templates', 'learnpress' ); ?></a>
40
+ </p>
41
+ <a href="<?php echo esc_url( add_query_arg( 'lp-hide-notice', 'template-files', learn_press_get_current_url() ) ); ?>"
42
+ class="learn-press-admin-notice-dismiss"></a>
43
  </div>
inc/admin/views/meta-boxes/course/attributes.php CHANGED
@@ -33,13 +33,6 @@ $postId = $post ? $post->ID : 0;
33
  </ul>
34
 
35
  <button class="button button-primary" type="button" id="save-attributes"><?php _e( 'Save attributes', 'learnpres' ); ?></button>
36
- <script type="text/javascript">
37
- jQuery(function($){
38
- $.fn.select2.locales.en.formatNoMatches = function(){
39
- return "xya";
40
- }
41
- })
42
- </script>
43
  <?php
44
  } else {
45
  printf( '<p class="description">%s <a class="button button-primary" href="%s">%s</a></p>',
33
  </ul>
34
 
35
  <button class="button button-primary" type="button" id="save-attributes"><?php _e( 'Save attributes', 'learnpres' ); ?></button>
 
 
 
 
 
 
 
36
  <?php
37
  } else {
38
  printf( '<p class="description">%s <a class="button button-primary" href="%s">%s</a></p>',
inc/admin/views/meta-boxes/course/curriculum.php CHANGED
@@ -4,41 +4,41 @@ $course_sections = $course->get_curriculum();
4
  $hidden_sections = (array) get_post_meta( $post->ID, '_admin_hidden_sections', true );
5
  ?>
6
  <div id="lp-course-curriculum" class="lp-course-curriculum">
7
- <h3 class="curriculum-heading">
8
- <?php _e( 'Curriculum', 'learnpress' ); ?>
9
- <span class="description"><?php _e( 'Outline your course and add content with sections, lessons and quizzes.', 'learnpress' ); ?></span>
10
 
11
- <p align="right" class="items-toggle">
12
- <a href="" data-action="expand" class="dashicons dashicons-arrow-down<?php echo!sizeof( $hidden_sections ) ? ' hide-if-js' : ''; ?>" title="<?php _e( 'Expand All', 'learnpress' ); ?>"></a>
13
- <a href="" data-action="collapse" class="dashicons dashicons-arrow-up<?php echo sizeof( $hidden_sections ) ? ' hide-if-js' : ''; ?>" title="<?php _e( 'Collapse All', 'learnpress' ); ?>"></a>
14
- </p>
15
- </h3>
16
- <!---->
17
- <ul class="curriculum-sections">
18
- <?php
19
- if ( $course_sections ):
20
- foreach ( $course_sections as $k => $section ):
21
 
22
- $content_items = '';
23
 
24
- if ( $section->items ):
25
- foreach ( $section->items as $item ):
26
- $loop_item_view = learn_press_get_admin_view( 'meta-boxes/course/loop-item.php' );
27
- ob_start();
28
- include $loop_item_view;
29
- $content_items .= "\n" . ob_get_clean();
30
- endforeach;
31
- endif;
32
 
33
- include learn_press_get_admin_view( 'meta-boxes/course/loop-section.php' );
34
- endforeach;
35
- unset( $content_items );
36
- endif;
37
- if ( !empty( $section ) )
38
- foreach ( get_object_vars( $section ) as $k => $v ) {
39
- $section->{$k} = null;
40
- }
41
- include learn_press_get_admin_view( 'meta-boxes/course/loop-section.php' );
42
- ?>
43
- </ul>
44
  </div>
4
  $hidden_sections = (array) get_post_meta( $post->ID, '_admin_hidden_sections', true );
5
  ?>
6
  <div id="lp-course-curriculum" class="lp-course-curriculum">
7
+ <h3 class="curriculum-heading">
8
+ <?php _e( 'Curriculum', 'learnpress' ); ?>
9
+ <span class="description"><?php _e( 'Outline your course and add content with sections, lessons and quizzes.', 'learnpress' ); ?></span>
10
 
11
+ <p align="right" class="items-toggle">
12
+ <a href="" data-action="expand" class="dashicons dashicons-arrow-down<?php echo !sizeof( $hidden_sections ) ? ' hide-if-js' : ''; ?>" title="<?php _e( 'Expand All', 'learnpress' ); ?>"></a>
13
+ <a href="" data-action="collapse" class="dashicons dashicons-arrow-up<?php echo sizeof( $hidden_sections ) ? ' hide-if-js' : ''; ?>" title="<?php _e( 'Collapse All', 'learnpress' ); ?>"></a>
14
+ </p>
15
+ </h3>
16
+ <!---->
17
+ <ul class="curriculum-sections">
18
+ <?php
19
+ if ( $course_sections ):
20
+ foreach ( $course_sections as $k => $section ):
21
 
22
+ $content_items = '';
23
 
24
+ if ( $section->items ):
25
+ foreach ( $section->items as $item ):
26
+ $loop_item_view = learn_press_get_admin_view( 'meta-boxes/course/loop-item.php' );
27
+ ob_start();
28
+ include $loop_item_view;
29
+ $content_items .= "\n" . ob_get_clean();
30
+ endforeach;
31
+ endif;
32
 
33
+ include learn_press_get_admin_view( 'meta-boxes/course/loop-section.php' );
34
+ endforeach;
35
+ unset( $content_items );
36
+ endif;
37
+ if ( !empty( $section ) )
38
+ foreach ( get_object_vars( $section ) as $k => $v ) {
39
+ $section->{$k} = null;
40
+ }
41
+ include learn_press_get_admin_view( 'meta-boxes/course/loop-section.php' );
42
+ ?>
43
+ </ul>
44
  </div>
inc/admin/views/meta-boxes/course/loop-item.php CHANGED
@@ -5,54 +5,74 @@
5
  * @package Admin/Views
6
  */
7
  if ( !isset( $section ) ) {
8
- $section = null;
9
  }
10
  $section_item_id = !empty( $item->section_item_id ) ? $item->section_item_id : null;
11
- $item_id = !empty( $item->item_id ) ? $item->item_id : null;
12
- $group_name = '_lp_curriculum[__SECTION__][items][' . ( $section_item_id ? $section_item_id : '__ITEM__' ) . ']';
 
13
 
14
- $support_types = learn_press_course_get_support_item_types();
 
 
 
 
 
15
  if ( !empty( $support_types[$item->post_type] ) ) {
16
- $item_selected = $item->post_type;
17
  } else {
18
- $item_selected = key( $support_types );
19
  }
20
  ?>
21
 
22
  <?php do_action( 'learn_press_admin_before_section_loop_item', $item, $section ); ?>
23
 
24
- <tr <?php learn_press_admin_section_loop_item_class( $item, $section ); ?> data-text="<?php echo esc_attr( $item->post_title ); ?>" data-item_id="<?php echo $item_id; ?>" data-section_item_id="<?php echo $section_item_id; ?>" data-type="<?php echo $item->post_type; ?>">
25
- <?php do_action( 'learn_press_admin_begin_section_item', $item, $section ); ?>
26
- <td class="section-item-icon">
27
- <div class="learn-press-dropdown-item-types">
28
- <span class="learn-press-icon item-<?php echo $item->post_type; ?>" data-type="<?php echo $item->post_type; ?>"></span>
29
- <ul>
30
- <?php foreach ( $support_types as $_type => $text ) { ?>
31
- <li>
32
- <span class="learn-press-icon<?php echo $_type == $item_selected ? ' item-selected' : ''; ?> item-<?php echo $_type; ?>" data-content="<?php echo sprintf( __( 'Switch to %s', 'learnpress' ), $text ); ?>" data-type="<?php echo $_type; ?>"></span>
33
- </li>
34
- <?php } ?>
35
- </ul>
36
- </div>
37
- </td>
38
- <td class="section-item-input">
39
- <input type="text" autocomplete="off" name="<?php echo $group_name; ?>[name]" class="lp-item-name no-submit" data-field="item-name" value="<?php echo esc_attr( $item->post_title ); ?>" placeholder="<?php _e( 'Add new item here and press Enter', 'learnpress' ); ?>" />
40
- <input type="hidden" name="<?php echo $group_name; ?>[old_name]" value="<?php echo esc_attr( $item->post_title ); ?>" />
41
- <input type="hidden" name="<?php echo $group_name; ?>[item_id]" value="<?php echo $item_id; ?>" />
42
- <input type="hidden" name="<?php echo $group_name; ?>[section_item_id]" value="<?php echo $section_item_id; ?>" />
43
- <input type="hidden" class="lp-item-type" name="<?php echo $group_name; ?>[post_type]" value="<?php echo $item->post_type; ?>" />
44
- </td>
45
- <td class="section-item-actions">
46
- <p class="lp-item-actions lp-button-actions">
47
- <?php do_action( 'learn_press_admin_begin_section_item_actions', $item, $section ); ?>
48
- <a href="<?php echo absint( $item_id ) ? get_edit_post_link( $item_id ) : '{{data.edit_link}}'; ?>" class="lp-item-action lp-edit dashicons dashicons-edit" target="_blank"><?php _e( '', 'learnpress' ); ?></a>
49
- <a href="" class="lp-item-action lp-remove dashicons dashicons-trash" data-confirm-remove="<?php _e( 'Are you sure you want to remove this item?', 'learnpress' ); ?>"><?php _e( '', 'learnpress' ); ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  <span class="item-checkbox">
51
  <input type="checkbox" value="<?php echo $section_item_id; ?>" />
52
  <a class="dashicons dashicons-menu"></a>
53
  </span>
54
- <?php do_action( 'learn_press_admin_end_section_item_actions', $item, $section ); ?>
55
- </p>
56
- </td>
57
- <?php do_action( 'learn_press_admin_end_section_item', $item, $section ); ?>
58
  </tr>
5
  * @package Admin/Views
6
  */
7
  if ( !isset( $section ) ) {
8
+ $section = null;
9
  }
10
  $section_item_id = !empty( $item->section_item_id ) ? $item->section_item_id : null;
11
+ $item_id = !empty( $item->item_id ) ? $item->item_id : null;
12
+ $group_name = '_lp_curriculum[__SECTION__][items][' . ( $section_item_id ? $section_item_id : '__ITEM__' ) . ']';
13
+ $support_types = learn_press_course_get_support_item_types();
14
 
15
+ //$post_item = $item_id ? get_post( $item_id ) : learn_press_post_object( array( 'post_type' => LP_LESSON_CPT ) );
16
+ //if($post_item) {
17
+ // foreach ( get_object_vars( $post_item ) as $prop => $value ) {
18
+ // $item->{$prop} = $value;
19
+ // }
20
+ //}
21
  if ( !empty( $support_types[$item->post_type] ) ) {
22
+ $item_selected = $item->post_type;
23
  } else {
24
+ $item_selected = key( $support_types );
25
  }
26
  ?>
27
 
28
  <?php do_action( 'learn_press_admin_before_section_loop_item', $item, $section ); ?>
29
 
30
+ <tr <?php learn_press_admin_section_loop_item_class( $item, $section ); ?>
31
+ data-text="<?php echo esc_attr( $item->post_title ); ?>"
32
+ data-item_id="<?php echo $item_id; ?>"
33
+ data-section_item_id="<?php echo $section_item_id; ?>"
34
+ data-type="<?php echo $item->post_type; ?>">
35
+ <?php do_action( 'learn_press_admin_begin_section_item', $item, $section ); ?>
36
+ <td class="section-item-icon">
37
+ <div class="learn-press-dropdown-item-types">
38
+ <span class="learn-press-icon item-<?php echo $item->post_type; ?>" data-type="<?php echo $item->post_type; ?>"></span>
39
+ <ul>
40
+ <?php foreach ( $support_types as $_type => $text ) { ?>
41
+ <li>
42
+ <span
43
+ class="learn-press-icon<?php echo $_type == $item_selected ? ' item-selected' : ''; ?> item-<?php echo $_type; ?>"
44
+ data-content="<?php echo sprintf( __( 'Switch to %s', 'learnpress' ), $text ); ?>"
45
+ data-type="<?php echo $_type; ?>">
46
+ </span>
47
+ </li>
48
+ <?php } ?>
49
+ </ul>
50
+ </div>
51
+ </td>
52
+ <td class="section-item-input">
53
+ <input type="text"
54
+ autocomplete="off"
55
+ name="<?php echo $group_name; ?>[name]"
56
+ class="lp-item-name no-submit"
57
+ data-field="item-name"
58
+ value="<?php echo esc_attr( $item->post_title ); ?>"
59
+ placeholder="<?php _e( 'Add new item here and press Enter', 'learnpress' ); ?>" />
60
+ <input type="hidden" name="<?php echo $group_name; ?>[old_name]" value="<?php echo esc_attr( $item->post_title ); ?>" />
61
+ <input type="hidden" name="<?php echo $group_name; ?>[item_id]" value="<?php echo $item_id; ?>" />
62
+ <input type="hidden" name="<?php echo $group_name; ?>[section_item_id]" value="<?php echo $section_item_id; ?>" />
63
+ <input type="hidden" class="lp-item-type" name="<?php echo $group_name; ?>[post_type]" value="<?php echo $item->post_type; ?>" />
64
+ </td>
65
+ <td class="section-item-actions">
66
+ <p class="lp-item-actions lp-button-actions">
67
+ <?php do_action( 'learn_press_admin_begin_section_item_actions', $item, $section ); ?>
68
+ <a href="<?php echo absint( $item_id ) ? get_edit_post_link( $item_id ) : '{{data.edit_link}}'; ?>" class="lp-item-action lp-edit dashicons dashicons-edit" target="_blank"></a>
69
+ <a href="" class="lp-item-action lp-remove dashicons dashicons-trash" data-confirm-remove="<?php _e( 'Are you sure you want to remove this item?', 'learnpress' ); ?>"></a>
70
  <span class="item-checkbox">
71
  <input type="checkbox" value="<?php echo $section_item_id; ?>" />
72
  <a class="dashicons dashicons-menu"></a>
73
  </span>
74
+ <?php do_action( 'learn_press_admin_end_section_item_actions', $item, $section ); ?>
75
+ </p>
76
+ </td>
77
+ <?php do_action( 'learn_press_admin_end_section_item', $item, $section ); ?>
78
  </tr>
inc/admin/views/meta-boxes/course/loop-section.php CHANGED
@@ -7,15 +7,8 @@
7
  * @param $section_name
8
  * @param $content_items
9
  */
10
- if ( empty( $section ) ) {
11
- $section = (object) array(
12
- 'section_id' => null,
13
- 'section_name' => '',
14
- 'section_course_id' => null,
15
- 'section_order' => null,
16
- 'section_description' => ''
17
- );
18
- }
19
  $is_hidden = $section->section_id && is_array( $hidden_sections ) && in_array( $section->section_id, $hidden_sections );
20
 
21
  $class = array(
@@ -29,68 +22,46 @@ if ( $is_hidden ) {
29
  }
30
  ?>
31
  <li class="<?php echo join( ' ', $class ); ?>" data-id="<?php echo $section ? $section->section_id : ''; ?>">
32
- <h3 class="curriculum-section-head">
33
- <input name="_lp_curriculum[__SECTION__][name]" type="text" data-field="section-name" placeholder="<?php _e( 'Enter section name and hit enter', 'learnpress' ); ?>" class="lp-section-name no-submit" value="<?php echo esc_attr( $section->section_name ); ?>" />
34
- <p class="lp-section-actions lp-button-actions">
35
- <a href="" data-action="expand" class="dashicons dashicons-arrow-down<?php echo $is_hidden ? '' : ' hide-if-js'; ?>" title="<?php _e( 'Expand', 'learnpress' ); ?>"></a>
36
- <a href="" data-action="collapse" class="dashicons dashicons-arrow-up<?php echo !$is_hidden ? '' : ' hide-if-js'; ?>" title="<?php _e( 'Collapse', 'learnpress' ); ?>"></a>
37
- <a href="" data-action="remove" class="dashicons dashicons-trash" data-confirm-remove="<?php _e( 'Are you sure you want to remove this section?', 'learnpress' ); ?>"><?php _e( '', 'learnpress' ); ?></a>
38
- <a href="" class="move"></a>
39
- </p>
40
- </h3>
41
- <div class="curriculum-section-content<?php echo $is_hidden ? ' hide-if-js' : ''; ?>">
42
- <div class="item-bulk-actions">
43
- <input name="_lp_curriculum[__SECTION__][description]" class="lp-section-describe" type="text" value="<?php echo esc_attr( $section->section_description ); ?>" placeholder="<?php _e( 'Describe about this section', 'learnpress' ); ?>" />
44
- <button class="button hide-if-js" type="button" data-action="delete" data-title="<?php _e( 'Remove', 'learnpress' ); ?>" data-confirm-remove="<?php _e( 'Are you sure you want to remove these items from section?', 'learnpress' ); ?>"><?php _e( 'Remove', 'learnpress' ); ?></button>
45
- <!--
46
- <button class="button" type="button" data-action="delete-forever" disabled="disabled" data-title="<?php _e( 'Delete Forever', 'learnpress' ); ?>"><?php _e( 'Delete Forever', 'learnpress' ); ?></button>
47
-
48
- <button class="button hide-if-js" type="button" data-action="cancel"><?php _e( 'Cancel', 'learnpress' ); ?></button>-->
49
- <!--<div class="button lp-check-all-items">
50
- <input type="checkbox" class="" />
51
- <span>&dtrif;</span>
52
- </div>-->
53
  <span class="button lp-check-items">
54
  <input class="lp-check-all-items" data-action="check-all" type="checkbox" />
55
  </span>
56
- </div>
57
- <table class="curriculum-section-items">
58
  <?php echo isset( $content_items ) ? $content_items : ''; ?>
59
  <?php
60
  $item = learn_press_post_object( array( 'post_type' => LP_LESSON_CPT ) );
61
  ?>
62
  <?php learn_press_admin_view( 'meta-boxes/course/loop-item.php', array( 'item' => $item ) ); ?>
63
 
64
- </table>
65
  <?php do_action( 'learn_press_after_section_items', $section ); ?>
66
  <?php if ( $buttons = apply_filters( 'learn_press_loop_section_buttons', array() ) ): ?>
67
- <br />
68
- <div class="lp-add-buttons">
69
- <!--<input type="text" class="regular-text no-submit" name="lp-new-item-name" placeholder="<?php _e( 'Add new lesson or quiz and press Enter', 'learnpress' ); ?>" />
70
- <div class="button lp-button-dropdown lp-button-add-item disabled">
71
- <span class="lp-dropdown-label lp-add-new-item"><?php _e( 'Add New', 'learnpress' ); ?></span>
72
- <span class="lp-dropdown-arrow">+</span>
73
- <ul class="lp-dropdown-items">
74
- <?php foreach ( learn_press_section_item_types() as $slug => $name ) { ?>
75
- <li>
76
- <a href="" data-type="<?php echo $slug; ?>"><?php echo $name; ?></a>
77
- </li>
78
- <?php } ?>
79
- </ul>
80
- </div>
81
- <?php _e( '-OR-', 'learnpress' ); ?>-->
82
  <?php foreach ( learn_press_section_item_types() as $slug => $name ) { ?>
83
  <?php if ( apply_filters( 'learn_press_button_type_select_items', true, $slug ) ) { ?>
84
- <button class="button" type="button" data-action="add-<?php echo $slug; ?>" data-type="<?php echo $slug; ?>">
85
  <?php echo sprintf( __( 'Select %s', 'learnpress' ), $name ); ?>
86
- </button>
87
  <?php } ?>
88
  <?php } ?>
89
- <!--<button class="button " id="add-quiz" type="button" data-action="add-quiz" data-type="lp_quiz">
90
- <?php _e( 'Select Quizzes', 'learnpress' ); ?>
91
- </button>-->
92
- </div>
93
  <?php endif; ?>
94
  <?php do_action( 'learn_press_after_section_content', $section ); ?>
95
- </div>
96
  </li>
7
  * @param $section_name
8
  * @param $content_items
9
  */
10
+
11
+ $section = learn_press_get_default_section( isset( $section ) ? $section : null );
 
 
 
 
 
 
 
12
  $is_hidden = $section->section_id && is_array( $hidden_sections ) && in_array( $section->section_id, $hidden_sections );
13
 
14
  $class = array(
22
  }
23
  ?>
24
  <li class="<?php echo join( ' ', $class ); ?>" data-id="<?php echo $section ? $section->section_id : ''; ?>">
25
+ <h3 class="curriculum-section-head">
26
+ <input name="_lp_curriculum[__SECTION__][name]" type="text" data-field="section-name" placeholder="<?php _e( 'Enter section name and hit enter', 'learnpress' ); ?>" class="lp-section-name no-submit" value="<?php echo esc_attr( $section->section_name ); ?>" />
27
+ <p class="lp-section-actions lp-button-actions">
28
+ <a href="" data-action="expand" class="dashicons dashicons-arrow-down<?php echo $is_hidden ? '' : ' hide-if-js'; ?>" title="<?php _e( 'Expand', 'learnpress' ); ?>"></a>
29
+ <a href="" data-action="collapse" class="dashicons dashicons-arrow-up<?php echo !$is_hidden ? '' : ' hide-if-js'; ?>" title="<?php _e( 'Collapse', 'learnpress' ); ?>"></a>
30
+ <a href="" data-action="remove" class="dashicons dashicons-trash" data-confirm-remove="<?php _e( 'Are you sure you want to remove this section?', 'learnpress' ); ?>"></a>
31
+ <a href="" class="move"></a>
32
+ </p>
33
+ </h3>
34
+ <div class="curriculum-section-content<?php echo $is_hidden ? ' hide-if-js' : ''; ?>">
35
+ <div class="item-bulk-actions">
36
+ <input name="_lp_curriculum[__SECTION__][description]" class="lp-section-describe" type="text" value="<?php echo esc_attr( $section->section_description ); ?>" placeholder="<?php _e( 'Describe about this section', 'learnpress' ); ?>" />
37
+ <button class="button hide-if-js" type="button" data-action="delete" data-title="<?php _e( 'Remove', 'learnpress' ); ?>" data-confirm-remove="<?php _e( 'Are you sure you want to remove these items from section?', 'learnpress' ); ?>"><?php _e( 'Remove', 'learnpress' ); ?></button>
 
 
 
 
 
 
 
 
38
  <span class="button lp-check-items">
39
  <input class="lp-check-all-items" data-action="check-all" type="checkbox" />
40
  </span>
41
+ </div>
42
+ <table class="curriculum-section-items">
43
  <?php echo isset( $content_items ) ? $content_items : ''; ?>
44
  <?php
45
  $item = learn_press_post_object( array( 'post_type' => LP_LESSON_CPT ) );
46
  ?>
47
  <?php learn_press_admin_view( 'meta-boxes/course/loop-item.php', array( 'item' => $item ) ); ?>
48
 
49
+ </table>
50
  <?php do_action( 'learn_press_after_section_items', $section ); ?>
51
  <?php if ( $buttons = apply_filters( 'learn_press_loop_section_buttons', array() ) ): ?>
52
+ <br />
53
+ <div class="lp-add-buttons">
54
+
 
 
 
 
 
 
 
 
 
 
 
 
55
  <?php foreach ( learn_press_section_item_types() as $slug => $name ) { ?>
56
  <?php if ( apply_filters( 'learn_press_button_type_select_items', true, $slug ) ) { ?>
57
+ <button class="button" type="button" data-action="add-<?php echo $slug; ?>" data-type="<?php echo $slug; ?>">
58
  <?php echo sprintf( __( 'Select %s', 'learnpress' ), $name ); ?>
59
+ </button>
60
  <?php } ?>
61
  <?php } ?>
62
+
63
+ </div>
 
 
64
  <?php endif; ?>
65
  <?php do_action( 'learn_press_after_section_content', $section ); ?>
66
+ </div>
67
  </li>
inc/admin/views/meta-boxes/course/review-logs.php CHANGED
@@ -12,11 +12,11 @@ $index = $total_reviews;
12
  <?php if ( $total_reviews ) { ?>
13
  <ul class="learn-press-review-logs clearfix">
14
  <?php foreach ( $reviews as $review ) { ?>
15
- <?php $user = get_userdata( $review->user_id ); ?>
16
  <li>
17
  <div class="review-index">#<?php echo $index --; ?></div>
18
  <div class="review-user">
19
- <span class="user-avatar"><?php echo get_avatar( $review->user_id ); ?></span>
20
  </div>
21
  <div class="review-content">
22
  <strong class="user-nicename"><?php echo learn_press_get_profile_display_name( $user ); ?></strong>
12
  <?php if ( $total_reviews ) { ?>
13
  <ul class="learn-press-review-logs clearfix">
14
  <?php foreach ( $reviews as $review ) { ?>
15
+ <?php $user = LP_User_Factory::get_user( $review->user_id ); ?>
16
  <li>
17
  <div class="review-index">#<?php echo $index --; ?></div>
18
  <div class="review-user">
19
+ <span class="user-avatar"><?php echo $user->get_profile_picture(); ?></span>
20
  </div>
21
  <div class="review-content">
22
  <strong class="user-nicename"><?php echo learn_press_get_profile_display_name( $user ); ?></strong>
inc/admin/views/meta-boxes/order/actions.php CHANGED
@@ -3,6 +3,7 @@ global $post, $action;
3
  $post_type = $post->post_type;
4
  $post_type_object = get_post_type_object( $post_type );
5
  $can_publish = current_user_can( $post_type_object->cap->publish_posts );
 
6
 
7
  $datef = __( 'M j, Y @ H:i' );
8
  if ( 0 != $post->ID ) {
@@ -33,7 +34,7 @@ if ( 0 != $post->ID ) {
33
  <label>
34
  <?php _e( 'Order status', 'learnpress' ); ?>
35
  </label>
36
- <select name="order-status">
37
  <?php
38
  $statuses = learn_press_get_order_statuses();
39
  foreach ( $statuses as $status => $status_name ) {
@@ -41,6 +42,7 @@ if ( 0 != $post->ID ) {
41
  }
42
  ?>
43
  </select>
 
44
  <div class="description order-status-description">
45
  <?php if ( $order->get_status() == 'auto-draft' ) {
46
  echo _learn_press_get_order_status_description( 'lp-pending' );
@@ -48,6 +50,13 @@ if ( 0 != $post->ID ) {
48
  <?php echo _learn_press_get_order_status_description( 'lp-' . $order->get_status() ); ?>
49
  </div>
50
  </div>
 
 
 
 
 
 
 
51
 
52
  <div class="misc-pub-section">
53
  <label>
@@ -57,15 +66,29 @@ if ( 0 != $post->ID ) {
57
  <input name="order-customer" type="text" class="wp-suggest-user ui-autocomplete-input" id="admin-email" data-autocomplete-type="search" data-autocomplete-field="user_email" autocomplete="off">
58
  -->
59
  <?php
60
- // if($order->get_status() =='' || $order->has_status('pending') ) {
61
- wp_dropdown_users(
62
- array(
63
- 'show_option_none' => __( '[Guest]', 'learnpress' ),
64
- 'name' => 'order-customer',
65
- 'id' => null,
66
- 'selected' => $order->get_user( 'ID' )
67
- )
68
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  // }else{
70
  // echo $order->get_customer_name();
71
  // }
3
  $post_type = $post->post_type;
4
  $post_type_object = get_post_type_object( $post_type );
5
  $can_publish = current_user_can( $post_type_object->cap->publish_posts );
6
+ $is_multiple =
7
 
8
  $datef = __( 'M j, Y @ H:i' );
9
  if ( 0 != $post->ID ) {
34
  <label>
35
  <?php _e( 'Order status', 'learnpress' ); ?>
36
  </label>
37
+ <select name="order-status" data-status="<?php echo 'lp-' . $order->get_status(); ?>">
38
  <?php
39
  $statuses = learn_press_get_order_statuses();
40
  foreach ( $statuses as $status => $status_name ) {
42
  }
43
  ?>
44
  </select>
45
+
46
  <div class="description order-status-description">
47
  <?php if ( $order->get_status() == 'auto-draft' ) {
48
  echo _learn_press_get_order_status_description( 'lp-pending' );
50
  <?php echo _learn_press_get_order_status_description( 'lp-' . $order->get_status() ); ?>
51
  </div>
52
  </div>
53
+ <div class="misc-pub-section hide-if-js order-action-section">
54
+ <label for="trigger-order-action">
55
+ <input type="checkbox" name="trigger-order-action" id="trigger-order-action" value="yes" />
56
+ <?php _e( 'Trigger order status action', 'learnpress' ); ?>
57
+ </label>
58
+ <p class="description"><?php esc_attr_e( 'Check this option to force an action to be triggered. Normally, an action only is triggered after changing to an another action.', 'learnpress' ); ?></p>
59
+ </div>
60
 
61
  <div class="misc-pub-section">
62
  <label>
66
  <input name="order-customer" type="text" class="wp-suggest-user ui-autocomplete-input" id="admin-email" data-autocomplete-type="search" data-autocomplete-field="user_email" autocomplete="off">
67
  -->
68
  <?php
69
+ if ( $order->is_multi_users() ) {
70
+ $order->dropdown_users();
71
+ ?>
72
+ <input type="hidden" name="multi-users" value="yes" />
73
+ <?php
74
+ wp_enqueue_style( 'select2', RWMB_CSS_URL . 'select2/select2.css' );
75
+ wp_enqueue_script( 'select2', RWMB_JS_URL . 'select2/select2.min.js' );
76
+ } else {
77
+ wp_dropdown_users(
78
+ array(
79
+ 'show_option_none' => __( '[Guest]', 'learnpress' ),
80
+ 'name' => 'order-customer',
81
+ 'id' => null,
82
+ 'selected' => $order->get_user( 'ID' )
83
+ )
84
+ );
85
+ }
86
+ if ( $order->get_status() == 'auto-draft' && !$order->is_multi_users() ) {
87
+ ?>
88
+ --
89
+ <a href="<?php echo add_query_arg( 'multi-users', 'yes' ); ?>"><?php _e( 'Multiple users', 'learnpress' ); ?></a>
90
+ <?php
91
+ }
92
  // }else{
93
  // echo $order->get_customer_name();
94
  // }
inc/admin/views/meta-boxes/order/details.php CHANGED
@@ -18,19 +18,32 @@ global $post;
18
  </div>
19
  <div class="order-user-data clearfix">
20
  <div class="order-user-avatar">
21
- <?php echo get_avatar( $order->get_user( 'ID' ), 120 ); ?>
 
 
 
 
 
 
22
  </div>
23
  <div class="order-user-meta">
24
- <div class="user-display-name">
25
- <?php echo $order->get_customer_name(); ?>
26
- </div>
27
- <div class="user-email">
28
- <?php $user_email = $order->get_user( 'user_email' );
29
- echo empty( $user_email ) ? '' : $user_email; ?>
30
- </div>
31
- <div class="user-ip-address">
32
- <?php echo $order->user_ip_address; ?>
33
- </div>
 
 
 
 
 
 
 
34
  <?php if ( $title = $order->get_payment_method_title() ) { ?>
35
  <div class="payment-method-title">
36
  <?php echo $order->order_total == 0 ? $title : sprintf( __( 'Pay via <strong>%s</strong>', 'learnpress' ), $title ); ?>
@@ -90,7 +103,7 @@ global $post;
90
  <?php if ( $note = get_the_excerpt() ) { ?>
91
  <br />
92
  <h3><?php _e( 'Customer Note', 'learnpress' ); ?></h3>
93
- <p class="order-note description"><?php echo $note;?></p>
94
  <?php } ?>
95
  </div>
96
  <script type="text/html" id="tmpl-learn-press-modal-add-order-courses">
18
  </div>
19
  <div class="order-user-data clearfix">
20
  <div class="order-user-avatar">
21
+ <?php if ( $order->is_multi_users() ) { ?>
22
+ <div class="avatar-multiple-users">
23
+ <span></span>
24
+ </div>
25
+ <?php } else { ?>
26
+ <?php echo get_avatar( $order->get_user( 'ID' ), 120 ); ?>
27
+ <?php } ?>
28
  </div>
29
  <div class="order-user-meta">
30
+ <?php if ( $order->is_multi_users() ) { ?>
31
+ <div class="order-users">
32
+ <strong><?php _e( 'Customers', 'learnpress' ); ?></strong>
33
+ <p><?php $order->print_users(); ?></p>
34
+ </div>
35
+ <?php } else { ?>
36
+ <div class="user-display-name">
37
+ <?php echo $order->get_customer_name(); ?>
38
+ </div>
39
+ <div class="user-email">
40
+ <?php $user_email = $order->get_user( 'user_email' );
41
+ echo empty( $user_email ) ? '' : $user_email; ?>
42
+ </div>
43
+ <div class="user-ip-address">
44
+ <?php echo $order->user_ip_address; ?>
45
+ </div>
46
+ <?php } ?>
47
  <?php if ( $title = $order->get_payment_method_title() ) { ?>
48
  <div class="payment-method-title">
49
  <?php echo $order->order_total == 0 ? $title : sprintf( __( 'Pay via <strong>%s</strong>', 'learnpress' ), $title ); ?>
103
  <?php if ( $note = get_the_excerpt() ) { ?>
104
  <br />
105
  <h3><?php _e( 'Customer Note', 'learnpress' ); ?></h3>
106
+ <p class="order-note description"><?php echo $note; ?></p>
107
  <?php } ?>
108
  </div>
109
  <script type="text/html" id="tmpl-learn-press-modal-add-order-courses">
inc/admin/views/meta-boxes/order/order-item.php CHANGED
@@ -5,9 +5,14 @@
5
  ?>
6
  <tr data-item_id="<?php echo $item['id']; ?>" data-remove_nonce="<?php echo wp_create_nonce( 'remove_order_item' ); ?>">
7
  <td>
 
 
8
  <a href="" class="remove-order-item">&times;</a>
9
  <a href="<?php echo get_the_permalink( $item['course_id'] ); ?>"><?php echo $item['name']; ?></a>
 
10
  </td>
 
 
11
  <td class="align-right">
12
  <?php echo learn_press_format_price( $item['total'], $currency_symbol ); ?>
13
  </td>
5
  ?>
6
  <tr data-item_id="<?php echo $item['id']; ?>" data-remove_nonce="<?php echo wp_create_nonce( 'remove_order_item' ); ?>">
7
  <td>
8
+ <?php do_action('learn_press_before_order_details_item_title', $item);?>
9
+ <?php do_action('learn_press/before_order_details_item_title', $item);?>
10
  <a href="" class="remove-order-item">&times;</a>
11
  <a href="<?php echo get_the_permalink( $item['course_id'] ); ?>"><?php echo $item['name']; ?></a>
12
+ <?php do_action('learn_press_after_order_details_item_title', $item);?>
13
  </td>
14
+ <?php do_action('learn_press/after_order_details_item_title', $item);?>
15
+ </td>
16
  <td class="align-right">
17
  <?php echo learn_press_format_price( $item['total'], $currency_symbol ); ?>
18
  </td>
inc/admin/views/meta-boxes/question/multi-choice-options.php CHANGED
@@ -1,28 +1,53 @@
1
- <div class="learn-press-question" id="learn-press-question-<?php echo $this->id;?>" data-type="multi-choice" data-id="<?php echo $this->id;?>">
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  <p class="question-bottom-actions">
4
  <?php
5
  $top_buttons = apply_filters(
6
  'learn_press_question_top_buttons',
7
  array(
8
- 'change_type' => learn_press_dropdown_question_types(array('echo' => false, 'id' => 'learn-press-dropdown-question-types-' . $this->id, 'selected' => $this->type ))
9
  ),
10
  $this
11
  );
12
  echo join( "\n", $top_buttons );
13
  ?>
14
  </p>
15
- <table class="lp-sortable lp-list-options" id="learn-press-list-options-<?php echo $this->id;?>">
16
  <thead>
17
-
 
 
 
 
 
 
 
 
 
 
 
 
18
  <th><?php _e( 'Answer Text', 'learnpress' ); ?></th>
19
  <th><?php _e( 'Is Correct?', 'learnpress' ); ?></th>
20
  <th width="20"></th>
21
  <th width="20"></th>
 
22
  </thead>
23
  <tbody>
24
 
25
- <?php $answers = $this->answers; if ( $answers ): ?>
 
26
  <?php foreach ( $answers as $answer ): ?>
27
  <?php
28
  $value = $this->_get_option_value( $answer['value'] );
@@ -30,8 +55,50 @@
30
 
31
  <?php do_action( 'learn_press_before_question_answer_option', $this ); ?>
32
 
33
- <tr class="lp-list-option lp-list-option-<?php echo $value;?>" data-id="<?php echo $value;?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  <td>
36
  <input class="lp-answer-text no-submit key-nav" type="text" name="learn_press_question[<?php echo $this->id; ?>][answer][text][]" value="<?php echo esc_attr( $answer['text'] ); ?>" />
37
  </td>
@@ -45,6 +112,7 @@
45
  <td class="lp-list-option-actions lp-move-list-option open-hand">
46
  <i class="dashicons dashicons-sort"></i>
47
  </td>
 
48
  </tr>
49
 
50
  <?php do_action( 'learn_press_after_question_answer_option', $this ); ?>
@@ -69,7 +137,7 @@
69
  echo join( "\n", $bottom_buttons );
70
  ?>
71
  </p>
72
- </div>
73
  <script type="text/javascript">
74
  jQuery(function ($) {
75
  LP.sortableQuestionAnswers($('#learn-press-question-<?php echo $this->id;?>'));
1
+ <?php
2
+ $option_headings = array(
3
+ 'answer_text' => __( 'Answer Text', 'learnpress' ),
4
+ 'answer_correct' => __( 'Is Correct?', 'learnpress' ),
5
+ 'actions' => '',
6
+ 'sort' => ''
7
+ );
8
+
9
+ $option_headings = apply_filters( 'learn-press/question/multi-choices/admin-option-headings', $option_headings, $this->id );
10
+ ?>
11
+
12
+ <div class="learn-press-question" id="learn-press-question-<?php echo $this->id; ?>" data-type="multi-choice" data-id="<?php echo $this->id; ?>">
13
 
14
  <p class="question-bottom-actions">
15
  <?php
16
  $top_buttons = apply_filters(
17
  'learn_press_question_top_buttons',
18
  array(
19
+ 'change_type' => learn_press_dropdown_question_types( array( 'echo' => false, 'id' => 'learn-press-dropdown-question-types-' . $this->id, 'selected' => $this->type ) )
20
  ),
21
  $this
22
  );
23
  echo join( "\n", $top_buttons );
24
  ?>
25
  </p>
26
+ <table class="lp-sortable lp-list-options" id="learn-press-list-options-<?php echo $this->id; ?>">
27
  <thead>
28
+ <tr>
29
+ <?php foreach ( $option_headings as $key => $text ) { ?>
30
+ <?php
31
+ $classes = apply_filters( 'learn-press/question/multi-choices/admin-option-column-heading-class', array( 'column-heading', 'column-heading-' . $key ) );
32
+ ?>
33
+ <th class="<?php echo join( ' ', $classes ); ?>">
34
+ <?php do_action( 'learn-press/question/multi-choices/admin-option-column-heading-before-title', $key, $this->id ); ?>
35
+ <?php echo apply_filters( 'learn-press/question/multi-choices/admin-option-column-heading-title', $text ); ?>
36
+ <?php do_action( 'learn-press/question/multi-choices/admin-option-column-heading-after-title', $key, $this->id ); ?>
37
+ </th>
38
+ <?php } ?>
39
+ </tr>
40
+ <!--
41
  <th><?php _e( 'Answer Text', 'learnpress' ); ?></th>
42
  <th><?php _e( 'Is Correct?', 'learnpress' ); ?></th>
43
  <th width="20"></th>
44
  <th width="20"></th>
45
+ -->
46
  </thead>
47
  <tbody>
48
 
49
+ <?php $answers = $this->answers;
50
+ if ( $answers ): ?>
51
  <?php foreach ( $answers as $answer ): ?>
52
  <?php
53
  $value = $this->_get_option_value( $answer['value'] );
55
 
56
  <?php do_action( 'learn_press_before_question_answer_option', $this ); ?>
57
 
58
+ <tr class="lp-list-option lp-list-option-<?php echo $value; ?>" data-id="<?php echo $value; ?>">
59
+ <?php foreach ( $option_headings as $heading => $title ) { ?>
60
+ <?php
61
+ $classes = array( 'column-content', 'column-content-' . $heading );
62
+ ob_start();
63
+ switch ( $heading ) {
64
+ case 'answer_text':
65
+ ?>
66
+ <input class="lp-answer-text no-submit key-nav" type="text" name="learn_press_question[<?php echo $this->id; ?>][answer][text][]" value="<?php echo esc_attr( $answer['text'] ); ?>" />
67
+ <?php
68
+ break;
69
+ case 'answer_correct':
70
+ $classes[] = 'lp-answer-check';
71
+ ?>
72
+ <input type="hidden" name="learn_press_question[<?php echo $this->id; ?>][answer][value][]" value="<?php echo $value; ?>" />
73
+ <input type="checkbox" name="learn_press_question[<?php echo $this->id; ?>][checked][]" <?php checked( $answer['is_true'] == 'yes', true ); ?> value="<?php echo $value; ?>" />
74
+ <?php
75
+ break;
76
+ case 'actions':
77
+ $classes[] = 'lp-list-option-actions lp-remove-list-option';
78
+ ?>
79
+ <i class="dashicons dashicons-trash"></i>
80
+ <?php
81
+ break;
82
+ case 'sort':
83
+ $classes[] = 'lp-list-option-actions lp-move-list-option open-hand';
84
+ ?>
85
+ <i class="dashicons dashicons-sort"></i>
86
+ <?php
87
+ break;
88
 
89
+ }
90
+ $classes = apply_filters( 'learn-press/question/multi-choices/admin-option-column-class', $classes, $heading, $answer, $this->id );
91
+ $classes = array_filter( $classes );
92
+ $classes = array_unique( $classes );
93
+ ?>
94
+ <?php do_action( 'learn-press/question/multi-choices/admin-option-column-' . $heading . '-content', $answer, $this->id ); ?>
95
+ <?php do_action( 'learn-press/question/multi-choices/admin-option-columns-content', $heading, $answer, $this->id ); ?>
96
+ <?php $html = ob_get_clean(); ?>
97
+ <th class="<?php echo join( ' ', $classes ); ?>">
98
+ <?php echo $html; ?>
99
+ </th>
100
+ <?php } ?>
101
+ <!--
102
  <td>
103
  <input class="lp-answer-text no-submit key-nav" type="text" name="learn_press_question[<?php echo $this->id; ?>][answer][text][]" value="<?php echo esc_attr( $answer['text'] ); ?>" />
104
  </td>
112
  <td class="lp-list-option-actions lp-move-list-option open-hand">
113
  <i class="dashicons dashicons-sort"></i>
114
  </td>
115
+ -->
116
  </tr>
117
 
118
  <?php do_action( 'learn_press_after_question_answer_option', $this ); ?>
137
  echo join( "\n", $bottom_buttons );
138
  ?>
139
  </p>
140
+ </div>
141
  <script type="text/javascript">
142
  jQuery(function ($) {
143
  LP.sortableQuestionAnswers($('#learn-press-question-<?php echo $this->id;?>'));
inc/admin/views/meta-boxes/tabs.php CHANGED
@@ -55,6 +55,9 @@ $current_tab = !empty( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : '';
55
  );
56
  $remove_meta_boxes[] = $metabox;
57
  }
 
 
 
58
  if ( empty( $tab['id'] ) ) {
59
  $tab['id'] = sanitize_title( $tab['title'] );
60
  }
@@ -73,6 +76,9 @@ $current_tab = !empty( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : '';
73
  <ul class="learn-press-tab-content" data-text="<?php esc_attr_e( 'Initializing...', 'learnpress' ); ?>">
74
  <?php
75
  foreach ( $tabs as $tab ) {
 
 
 
76
  echo '<li id="meta-box-tab-' . $tab['id'] . '" class="' . $tab['id'] . ( is_array( $current_tab ) && $current_tab['id'] == $tab['id'] ? ' active' : '' ) . '">';
77
  if ( !empty( $tab['content'] ) ) {
78
  echo $tab['content'];
@@ -84,12 +90,17 @@ $current_tab = !empty( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : '';
84
  echo '</li>';
85
  }
86
  if ( !empty( $remove_meta_boxes ) ) {
 
87
  foreach ( $remove_meta_boxes as $meta_box ) {
88
  if ( $meta_box instanceof RW_Meta_Box ) {
89
  $mbox = $meta_box->meta_box;
90
  foreach ( $mbox['post_types'] as $page ) {
91
- remove_meta_box( $mbox['id'], $page, $mbox['context'] );
92
- $wp_meta_boxes[$page][$mbox['context']]['sorted'][$mbox['id']] = false;
 
 
 
 
93
  }
94
  } else {
95
 
55
  );
56
  $remove_meta_boxes[] = $metabox;
57
  }
58
+ if ( empty( $tab['title'] ) ) {
59
+ continue;
60
+ }
61
  if ( empty( $tab['id'] ) ) {
62
  $tab['id'] = sanitize_title( $tab['title'] );
63
  }
76
  <ul class="learn-press-tab-content" data-text="<?php esc_attr_e( 'Initializing...', 'learnpress' ); ?>">
77
  <?php
78
  foreach ( $tabs as $tab ) {
79
+ if ( empty( $tab['title'] ) ) {
80
+ continue;
81
+ }
82
  echo '<li id="meta-box-tab-' . $tab['id'] . '" class="' . $tab['id'] . ( is_array( $current_tab ) && $current_tab['id'] == $tab['id'] ? ' active' : '' ) . '">';
83
  if ( !empty( $tab['content'] ) ) {
84
  echo $tab['content'];
90
  echo '</li>';
91
  }
92
  if ( !empty( $remove_meta_boxes ) ) {
93
+ $contexts = array( 'normal', 'side', 'advanced' );
94
  foreach ( $remove_meta_boxes as $meta_box ) {
95
  if ( $meta_box instanceof RW_Meta_Box ) {
96
  $mbox = $meta_box->meta_box;
97
  foreach ( $mbox['post_types'] as $page ) {
98
+ foreach ( $contexts as $context ) {
99
+ remove_meta_box( $mbox['id'], $page, $context );
100
+ if ( !empty( $wp_meta_boxes[$page][$context]['sorted'][$mbox['id']] ) ) {
101
+ $wp_meta_boxes[$page][$context]['sorted'][$mbox['id']] = false;
102
+ }
103
+ }
104
  }
105
  } else {
106
 
inc/admin/views/question/html-base-option.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin template for displaying multi choice option
4
+ *
5
+ * @package LearnPress/Templates/Admin
6
+ */
7
+ defined( 'ABSPATH' ) or exit();
8
+ if ( ! isset( $question ) ) {
9
+ $question = learn_press_get_question( get_the_ID() );
10
+ }
11
+
12
+ if ( ! $question ) {
13
+ }
14
+ $default_answer = array( 'value' => '', 'text' => '', 'is_true' => false );
15
+
16
+ if ( isset( $answer ) ) {
17
+ $answer = wp_parse_args( $answer, $default_answer );
18
+ } else {
19
+ $answer = $default_answer;
20
+ }
21
+
22
+ $type = $question->get_type();
23
+ $option_headings = $question->get_admin_option_headings();
24
+ $value = $question->get_option_value( $answer['value'] );
25
+ $id = $question->get_id();
26
+ $input_type = $type == 'multi_choice' ? 'checkbox' : 'radio';
27
+
28
+ do_action( 'learn_press_before_question_answer_option', $id );
29
+
30
+ $template_data = array_merge(
31
+ array(
32
+ 'id' => $question->get_id(),
33
+ 'answer_option' => array(
34
+ 'value' => $value,
35
+ 'text' => $answer['text'],
36
+ 'is_true' => $answer['is_true']
37
+ )
38
+ ),
39
+ $question->get_option_template_data()
40
+ );
41
+
42
+ ?>
43
+ <tr class="lp-list-option lp-row lp-list-option-<?php echo $template_data['answer_option']['value']; ?>"
44
+ data-id="<?php echo $template_data['answer_option']['value']; ?>">
45
+ <?php foreach ( $option_headings as $heading => $title ) { ?>
46
+ <?php
47
+ $classes = array( 'lp-column', 'lp-column-' . $heading );
48
+ $tooltip = '';
49
+ ob_start();
50
+ switch ( $heading ) {
51
+ case 'sort':
52
+ echo '<i class="fa fa-bars"></i>';
53
+ break;
54
+ case 'order':
55
+ echo '<span answer-option-order></span>';
56
+ break;
57
+ case 'answer_text':
58
+ ?>
59
+ <input class="lp-answer-text no-submit key-nav" type="text"
60
+ name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][text][]"
61
+ value="<?php echo esc_attr( $template_data['answer_option']['text'] ); ?>"
62
+ placeholder="<?php esc_attr_e( 'Type name of option', 'learnpress' ); ?>"
63
+ autocomplete="off"
64
+ ng-keypress="onOptionKeyEvent($event)"
65
+ ng-keyup="onOptionKeyEvent($event)"
66
+ ng-keydown="onOptionKeyEvent($event)"
67
+ />
68
+ <?php
69
+ break;
70
+ case 'answer_correct':
71
+ $classes[] = 'lp-answer-check';
72
+ ?>
73
+ <input type="hidden"
74
+ name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][value][]"
75
+ value="<?php echo $template_data['answer_option']['value']; ?>"
76
+ class="lp-answer-value"/>
77
+ <input type="hidden"
78
+ name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][checked][]"
79
+ value=""
80
+ class="<?php echo $template_data['answer_option']['is_true'] == 'yes' ? 'abc-xyz' : ''; ?>"
81
+ />
82
+ <input type="<?php echo $input_type; ?>"
83
+ name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][checked][]"
84
+ <?php checked( $template_data['answer_option']['is_true'] == 'yes', true ); ?>
85
+ value="<?php echo $template_data['answer_option']['value']; ?>"
86
+ onchange=""
87
+ class="def-123 <?php echo $template_data['answer_option']['is_true'] == 'yes' ? '' : 'abc-xyz'; ?>"
88
+ />
89
+ <?php
90
+ break;
91
+ case 'actions':
92
+ $classes[] = 'lp-toolbar-buttons';
93
+ ?>
94
+ <div class="lp-toolbar-btn lp-btn-remove lp-toolbar-btn-dropdown">
95
+ <a data-tooltip="<?php esc_attr_e( 'Remove this option', 'learnpress' ); ?>"
96
+ class="lp-btn-icon dashicons dashicons-trash learn-press-tooltip" ng-click="removeOption($event)"></a>
97
+ <ul>
98
+ <li><a class="learn-press-tooltip"
99
+ data-tooltip="<?php esc_attr__( 'Delete permanently this option', 'learnpress' ); ?>"
100
+ ng-click="removeOption($event)" data-delete-permanently="yes">
101
+ <?php esc_html_e( 'Delete permanently', 'learnpress' ); ?>
102
+ </a>
103
+ </li>
104
+ </ul>
105
+ </div>
106
+ <!--
107
+ <span class="learn-press-tooltip lp-toolbar-btn lp-btn-remove"
108
+ data-tooltip="<?php esc_attr_e( 'Remove this option', 'learnpress' ); ?>"
109
+ ng-click="removeOption($event)">
110
+ <a class="lp-btn-icon dashicons dashicons-trash">
111
+
112
+ </a>
113
+ </span><!--
114
+ --><span class="learn-press-tooltip lp-toolbar-btn lp-btn-move"
115
+ data-tooltip="<?php esc_attr_e( 'Drag and drop to change answer\'s position', 'learnpress' ); ?>">
116
+ <a class="lp-btn-icon dashicons dashicons-sort"></a>
117
+ </span><?php
118
+ break;
119
+ }
120
+ if ( $tooltip ) {
121
+ $classes[] = 'learn-press-tooltip';
122
+ }
123
+ $classes = apply_filters( "learn-press/question/{$type}/admin-option-column-class", $classes, $heading, $answer, $template_data, $id );
124
+ $classes = array_filter( $classes );
125
+ $classes = array_unique( $classes );
126
+ ?>
127
+ <?php do_action( "learn-press/question/{$type}/admin-option-column-" . $heading . '-content', $answer, $template_data, $id ); ?>
128
+ <?php do_action( "learn-press/question/{$type}/admin-option-columns-content", $heading, $answer, $template_data, $id ); ?>
129
+ <?php $html = ob_get_clean(); ?>
130
+ <td class="<?php echo join( ' ', $classes ); ?>"<?php if ( $tooltip ) {
131
+ echo ' data-tooltip="' . $tooltip . '"';
132
+ } ?>>
133
+ <?php echo $html; ?>
134
+ </td>
135
+ <?php } ?>
136
+ </tr>
137
+ <?php do_action( 'learn_press_after_question_answer_option', $id ); ?>
inc/admin/views/settings/emails/enrolled-course-admin.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Display general settings for emails
4
+ *
5
+ * @author ThimPress
6
+ * @package LearnPress/Admin/Views/Emails
7
+ * @version 1.0
8
+ */
9
+ if ( !defined( 'ABSPATH' ) ) {
10
+ exit; // Exit if accessed directly
11
+ }
12
+
13
+ $settings = LP()->settings;
14
+ ?>
15
+ <h3><?php _e( 'Send mail for admins & instructors ', 'learnpress' ); ?></h3>
16
+ <p class="description">
17
+ <?php _e( 'Send this email to admins & instructor when the course is enrolled.', 'learnpress' ); ?>
18
+ </p>
19
+ <table class="form-table">
20
+ <tbody>
21
+ <?php do_action( 'learn_press_before_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings ); ?>
22
+ <tr>
23
+ <th scope="row">
24
+ <label for="learn-press-emails-enrolled-course-enable"><?php _e( 'Enable', 'learnpress' ); ?></label></th>
25
+ <td>
26
+ <input type="hidden" name="<?php echo $settings_class->get_field_name( 'emails_enrolled_course_admin[enable]' ); ?>" value="no" />
27
+ <input id="learn-press-emails-enrolled-course-enable" type="checkbox" name="<?php echo $settings_class->get_field_name( 'emails_enrolled_course_admin[enable]' ); ?>" value="yes" <?php checked( $settings->get( 'emails_enrolled_course_admin.enable' ) == 'yes' ); ?> />
28
+ </td>
29
+ </tr>
30
+ <tr>
31
+ <th scope="row">
32
+ <label for="learn-press-emails-enrolled-course-send-admins"><?php _e( 'Send Admins', 'learnpress' ); ?></label></th>
33
+ <td>
34
+ <input type="hidden" name="<?php echo $settings_class->get_field_name( 'emails_enrolled_course_admin[send_admins]' ); ?>" value="no" />
35
+ <input id="learn-press-emails-enrolled-course-send-admins" type="checkbox" name="<?php echo $settings_class->get_field_name( 'emails_enrolled_course_admin[send_admins]' ); ?>" value="yes" <?php checked( $settings->get( 'emails_enrolled_course_admin.send_admins' ) == 'yes' ); ?> />
36
+ </td>
37
+ </tr>
38
+ <?php do_action( 'learn_press_before_subject_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings, $settings_class ); ?>
39
+ <tr>
40
+ <th scope="row">
41
+ <label for="learn-press-emails-enrolled-course-subject"><?php _e( 'Subject', 'learnpress' ); ?></label></th>
42
+ <td>
43
+ <input id="learn-press-emails-enrolled-course-subject" class="regular-text" type="text" name="<?php echo $settings_class->get_field_name( 'emails_enrolled_course_admin[subject]' ); ?>" value="<?php echo $settings->get( 'emails_enrolled_course_admin.subject', $this->default_subject ); ?>" />
44
+
45
+ <p class="description">
46
+ <?php printf( __( 'Email subject , default: <code>%s</code>', 'learnpress' ), $this->default_subject ); ?>
47
+ </p>
48
+ </td>
49
+ </tr>
50
+ <tr>
51
+ <th scope="row">
52
+ <label for="learn-press-emails-enrolled-course-heading"><?php _e( 'Heading', 'learnpress' ); ?></label></th>
53
+ <td>
54
+ <input id="learn-press-emails-enrolled-course-heading" class="regular-text" type="text" name="<?php echo $settings_class->get_field_name( 'emails_enrolled_course_admin[heading]' ); ?>" value="<?php echo $settings->get( 'emails_enrolled_course_admin.heading', $this->default_heading ); ?>" />
55
+
56
+ <p class="description">
57
+ <?php printf( __( 'Email heading, default: <code>%s</code>', 'learnpress' ), $this->default_heading ); ?>
58
+ </p>
59
+ </td>
60
+ </tr>
61
+ <!--
62
+ <tr>
63
+ <th scope="row">
64
+ <label for="learn-press-emails-enrolled-course-email-format"><?php _e( 'Email format', 'learnpress' ); ?></label>
65
+ </th>
66
+ <td>
67
+ <?php learn_press_email_formats_dropdown( array( 'name' => $settings_class->get_field_name( 'emails_enrolled_course_admin[email_format]' ), 'id' => 'learn_press_email_formats', 'selected' => $settings->get( 'emails_enrolled_course_admin.email_format' ) ) ); ?>
68
+ </td>
69
+ </tr>-->
70
+ <?php
71
+ $view = learn_press_get_admin_view( 'settings/emails/email-template.php' );
72
+ include_once $view;
73
+ ?>
74
+ <?php do_action( 'learn_press_after_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings ); ?>
75
+ </tbody>
76
+ </table>
inc/admin/views/settings/emails/update-course.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Display general settings for emails
4
+ *
5
+ * @author ThimPress
6
+ * @package LearnPress/Admin/Views/Emails
7
+ * @version 1.0
8
+ */
9
+ if ( !defined( 'ABSPATH' ) ) {
10
+ exit; // Exit if accessed directly
11
+ }
12
+
13
+ $settings = LP()->settings;
14
+ ?>
15
+ <h3><?php _e( 'Update course', 'learnpress' ); ?></h3>
16
+ <p class="description">
17
+ <?php _e( 'Send this email to users have purchased when the course is updated.', 'learnpress' ); ?>
18
+ </p>
19
+ <table class="form-table">
20
+ <tbody>
21
+ <?php do_action( 'learn_press_before_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings ); ?>
22
+ <tr>
23
+ <th scope="row">
24
+ <label for="learn-press-emails-updated-course-subject"><?php _e( 'Subject', 'learnpress' ); ?></label></th>
25
+ <td>
26
+ <input id="learn-press-emails-updated-course-subject" class="regular-text" type="text" name="<?php echo $settings_class->get_field_name( 'emails_update_course[subject]' ); ?>" value="<?php echo $settings->get( 'emails_update_course.subject', $this->default_subject ); ?>" />
27
+
28
+ <p class="description">
29
+ <?php printf( __( 'Email subject , default: <code>%s</code>', 'learnpress' ), $this->default_subject ); ?>
30
+ </p>
31
+ </td>
32
+ </tr>
33
+ <tr>
34
+ <th scope="row">
35
+ <label for="learn-press-emails-updated-course-heading"><?php _e( 'Heading', 'learnpress' ); ?></label></th>
36
+ <td>
37
+ <input id="learn-press-emails-updated-course-heading" class="regular-text" type="text" name="<?php echo $settings_class->get_field_name( 'emails_update_course[heading]' ); ?>" value="<?php echo $settings->get( 'emails_update_course.heading', $this->default_heading ); ?>" />
38
+
39
+ <p class="description">
40
+ <?php printf( __( 'Email heading, default: <code>%s</code>', 'learnpress' ), $this->default_heading ); ?>
41
+ </p>
42
+ </td>
43
+ </tr>
44
+ <?php
45
+ $view = learn_press_get_admin_view( 'settings/emails/email-template.php' );
46
+ include_once $view;
47
+ ?>
48
+ <?php do_action( 'learn_press_after_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings ); ?>
49
+ </tbody>
50
+ </table>
inc/admin/views/settings/emails/user-order-changed-status.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Display general settings for emails
4
+ *
5
+ * @author ThimPress
6
+ * @package LearnPress/Admin/Views/Emails
7
+ * @version 1.0
8
+ */
9
+ if ( !defined( 'ABSPATH' ) ) {
10
+ exit; // Exit if accessed directly
11
+ }
12
+
13
+ $settings = LP()->settings;
14
+ ?>
15
+ <h3><?php _e( 'User order changed status', 'learnpress' ); ?></h3>
16
+ <p class="description">
17
+ <?php _e( 'Send email to user when the order is changed status.', 'learnpress' ); ?>
18
+ </p>
19
+ <table class="form-table">
20
+ <tbody>
21
+ <?php do_action( 'learn_press_before_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings ); ?>
22
+ <tr>
23
+ <th scope="row">
24
+ <label for="learn-press-emails-new-order-enable"><?php _e( 'Enable', 'learnpress' ); ?></label></th>
25
+ <td>
26
+ <input type="hidden" name="<?php echo $settings_class->get_field_name( 'emails_user_order_changed_status[enable]' ); ?>" value="no" />
27
+ <input id="learn-press-emails-new-order-enable" type="checkbox" name="<?php echo $settings_class->get_field_name( 'emails_user_order_changed_status[enable]' ); ?>" value="yes" <?php checked( $settings->get( 'emails_user_order_changed_status.enable' ) == 'yes' ); ?>" />
28
+ </td>
29
+ </tr>
30
+ <tr>
31
+ <th scope="row">
32
+ <label for="learn-press-emails-new-order-subject"><?php _e( 'Subject', 'learnpress' ); ?></label></th>
33
+ <td>
34
+ <?php $default = $this->default_subject; ?>
35
+ <input id="learn-press-emails-new-order-subject" class="regular-text" type="text" name="<?php echo $settings_class->get_field_name( 'emails_user_order_changed_status[subject]' ); ?>" value="<?php echo $settings->get( 'emails_user_order_changed_status.subject', $default ); ?>" />
36
+
37
+ <p class="description">
38
+ <?php printf( __( 'Email subject, default: <code>%s</code>', 'learnpress' ), $default ); ?>
39
+ </p>
40
+ </td>
41
+ </tr>
42
+ <tr>
43
+ <th scope="row">
44
+ <label for="learn-press-emails-new-order-heading"><?php _e( 'Heading', 'learnpress' ); ?></label></th>
45
+ <td>
46
+ <?php $default = $this->default_heading; ?>
47
+ <input id="learn-press-emails-new-order-heading" class="regular-text" type="text" name="<?php echo $settings_class->get_field_name( 'emails_user_order_changed_status[heading]' ); ?>" value="<?php echo $settings->get( 'emails_user_order_changed_status.heading', $default ); ?>" />
48
+
49
+ <p class="description">
50
+ <?php printf( __( 'Email heading, default: <code>%s</code>', 'learnpress' ), $default ); ?>
51
+ </p>
52
+ </td>
53
+ </tr>
54
+ <!--<tr>
55
+ <th scope="row">
56
+ <label for="learn-press-emails-new-order-email-format"><?php _e( 'Email format', 'learnpress' ); ?></label>
57
+ </th>
58
+ <td>
59
+ <?php learn_press_email_formats_dropdown( array( 'name' => $settings_class->get_field_name( 'emails_user_order_changed_status[email_format]' ), 'id' => 'learn_press_email_formats', 'selected' => $settings->get( 'emails_user_order_changed_status.email_format', $default ) ) ); ?>
60
+ </td>
61
+ </tr>-->
62
+ <?php
63
+ $view = learn_press_get_admin_view( 'settings/emails/email-template.php' );
64
+ include_once $view;
65
+ ?>
66
+ <?php do_action( 'learn_press_after_' . $this->id . '_' . $this->section['id'] . '_settings_fields', $settings ); ?>
67
+ </tbody>
68
+ </table>
inc/admin/views/settings/fields/course-permalink.php CHANGED
@@ -14,12 +14,12 @@ $courses_page_id = learn_press_get_page_id( 'courses' );
14
  $base_slug = urldecode( ( $courses_page_id > 0 && get_post( $courses_page_id ) ) ? get_page_uri( $courses_page_id ) : _x( 'courses', 'default-slug', 'learnpress' ) );
15
  $course_base = _x( 'course', 'default-slug', 'learnpress' );
16
 
17
- if( !$course_permalink ){
18
  global $wpdb;
19
- if( $wpdb->get_results( $wpdb->prepare( "SELECT count(option_id) FROM {$wpdb->options} WHERE option_name = %s", 'learn_press_course_base' ) ) == 0 ){
20
  //$course_permalink = '/courses';
21
  }
22
- }
23
  $structures = array(
24
  0 => array(
25
  'value' => '',
@@ -43,17 +43,19 @@ $structures = array(
43
  )
44
  );
45
 
46
- $is_custom = true;
47
  $base_type = get_option( 'learn_press_course_base_type' );
 
 
48
  ?>
49
  <?php foreach ( $structures as $k => $structure ): ?>
50
- <tr<?php if ( $k == 2 || $k == 3 ) {
51
- echo ' class="learn-press-courses-page-id';
52
- echo !$courses_page_id ? ' hide-if-js"' : '""';
53
- }; ?> >
54
  <th>
55
  <?php
56
- $is_checked = checked( ( $course_permalink == '' && $structure['value'] == '' ) || ( $structure['value'] == trailingslashit( $course_permalink ) ), true, false );
 
57
  if ( $is_custom && $is_checked ) {
58
  $is_custom = false;
59
  }
@@ -68,16 +70,17 @@ $base_type = get_option( 'learn_press_course_base_type' );
68
  </td>
69
  </tr>
70
  <?php endforeach; ?>
71
- <tr>
72
  <th>
73
  <label>
74
- <input name="<?php echo $this->get_field_name( "course_base" ); ?>" id="learn_press_custom_permalink" type="radio" value="custom" <?php checked( $is_custom || ( $base_type == 'custom' ), true ); ?> />
75
  <?php _e( 'Custom Base', 'learnpress' ); ?>
76
  </label>
77
  </th>
78
  <td>
79
- <input name="course_permalink_structure" id="course_permalink_structure" type="text" value="<?php echo esc_attr( $course_permalink ); ?>" class="regular-text code" />
80
-
 
81
  <p class="description"><?php _e( 'Enter a custom base to use. A base <strong>must</strong> be set or WordPress will use default values instead.', 'learnpress' ); ?></p>
82
  </td>
83
  </tr>
14
  $base_slug = urldecode( ( $courses_page_id > 0 && get_post( $courses_page_id ) ) ? get_page_uri( $courses_page_id ) : _x( 'courses', 'default-slug', 'learnpress' ) );
15
  $course_base = _x( 'course', 'default-slug', 'learnpress' );
16
 
17
+ /*if ( !$course_permalink ) {
18
  global $wpdb;
19
+ if ( $wpdb->get_results( $wpdb->prepare( "SELECT count(option_id) FROM {$wpdb->options} WHERE option_name = %s", 'learn_press_course_base' ) ) == 0 ) {
20
  //$course_permalink = '/courses';
21
  }
22
+ }*/
23
  $structures = array(
24
  0 => array(
25
  'value' => '',
43
  )
44
  );
45
 
 
46
  $base_type = get_option( 'learn_press_course_base_type' );
47
+ $is_custom = ( $base_type == 'custom' && $course_permalink != '' );
48
+
49
  ?>
50
  <?php foreach ( $structures as $k => $structure ): ?>
51
+ <tr class="learn-press-single-course-permalink<?php if ( $k == 2 || $k == 3 ) {
52
+ echo ' learn-press-courses-page-id';
53
+ echo !$courses_page_id ? ' hide-if-js' : '';
54
+ }; ?>">
55
  <th>
56
  <?php
57
+ $is_checked = ( $course_permalink == '' && $structure['value'] == '' ) || ( $structure['value'] == trailingslashit( $course_permalink ) );
58
+ $is_checked = checked( $is_checked, true, false );
59
  if ( $is_custom && $is_checked ) {
60
  $is_custom = false;
61
  }
70
  </td>
71
  </tr>
72
  <?php endforeach; ?>
73
+ <tr class="learn-press-single-course-permalink custom-base">
74
  <th>
75
  <label>
76
+ <input name="<?php echo $this->get_field_name( "course_base" ); ?>" id="learn_press_custom_permalink" type="radio" value="custom" <?php checked( $is_custom, true ); ?> />
77
  <?php _e( 'Custom Base', 'learnpress' ); ?>
78
  </label>
79
  </th>
80
  <td>
81
+ <input name="course_permalink_structure" id="course_permalink_structure" <?php if ( !$is_custom ) {
82
+ echo 'readonly="readonly"';
83
+ } ?> type="text" value="<?php if($course_permalink) echo esc_attr( trailingslashit( $course_permalink ) ); ?>" class="regular-text code" />
84
  <p class="description"><?php _e( 'Enter a custom base to use. A base <strong>must</strong> be set or WordPress will use default values instead.', 'learnpress' ); ?></p>
85
  </td>
86
  </tr>
inc/admin/views/statistics/general.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit; // Exit if accessed directly
5
+ }
6
+
7
+ $sections = array(
8
+ 'students' => __( 'Students', 'learnpress' ),
9
+ 'instructors' => __( 'Instructors', 'learnpress' ),
10
+ );
11
+
12
+ $section = $this->section ? $this->section : 'students';
13
+ $sections_count = sizeof( $sections );
14
+ $count = 0;
15
+
16
+ gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) );
17
+ $now = current_time( 'timestamp' );
18
+ $now_mysql = current_time( 'mysql' );
19
+ $last_sunday = strtotime('Last Sunday', $now );
20
+
21
+ $last_sunday_sql = gmdate( 'Y-m-d H:i:s', $last_sunday );
22
+
23
+ $pre_sunday = strtotime('-7 day',$last_sunday);
24
+ $pre_sunday_sql = gmdate( 'Y-m-d H:i:s', $pre_sunday );
25
+
26
+ learn_press_get_chart_general( null, 'days', 7 );
27
+
28
+ ?>
29
+ <div id="learn-press-statistic" class="learn-press-statistic-courses">
30
+ <ul class="subsubsub chart-buttons">
31
+ <li>
32
+ <button class="button" data-type="course-last-7-days" disabled="disabled"><?php _e( 'Last 7 Days', 'learnpress' ); ?></button>
33
+ </li>
34
+ <li>
35
+ <button class="button" data-type="course-last-30-days"><?php _e( 'Last 30 Days', 'learnpress' ); ?></button>
36
+ </li>
37
+ <li>
38
+ <button class="button" data-type="course-last-12-months"><?php _e( 'Last 12 Months', 'learnpress' ); ?></button>
39
+ </li>
40
+ <li>
41
+ <button class="button" data-type="course-all"><?php _e( 'All', 'learnpress' ); ?></button>
42
+ </li>
43
+ <li>
44
+ <form id="course-custom-time">
45
+ <span><?php _e( 'From', 'learnpress' ) ?></span>
46
+ <input type="text" placeholder="Y/m/d" name="from" class="date-picker" readonly="readonly">
47
+ <span><?php _e( 'To', 'learnpress' ) ?></span>
48
+ <input type="text" placeholder="Y/m/d" name="to" class="date-picker" readonly="readonly">
49
+ <input type="hidden" name="action" value="learnpress_custom_stats">
50
+ <button class="button button-primary" data-type="course-custom-time" type="submit" disabled="disabled"><?php _e( 'Go', 'learnpress' ); ?></button>
51
+ </form>
52
+ </li>
53
+ </ul>
54
+ <div class="clear"></div>
55
+ <ul class="chart-description">
56
+ <li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
57
+ <li class="free"><span><?php _e( 'Public', 'learnpress' ); ?></span></li>
58
+ <li class="paid"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
59
+ <li class="all"><span><?php _e( 'Paid', 'learnpress' ); ?></span></li>
60
+ <li class="free"><span><?php _e( 'Free', 'learnpress' ); ?></span></li>
61
+ </ul>
62
+ <div id="learn-press-chart" class="learn-press-chart">
63
+ </div>
64
+
65
+ <script type="text/javascript">
66
+ var LP_Chart_Config = <?php learn_press_config_chart();?>;
67
+ jQuery(document).ready(function ($) {
68
+ $('#learn-press-chart').LP_Chart_Line(<?php echo json_encode( learn_press_get_chart_general( null, 'days', 7 ) );?>, LP_Chart_Config);
69
+ });
70
+ </script>
71
+ </div>
72
+
inc/api/class-lp-api.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ class LP_API{
3
+
4
+ }
inc/attributes/lp-attributes-functions.php CHANGED
@@ -19,10 +19,20 @@ function learn_press_get_attributes() {
19
  * @return array|int|WP_Error
20
  */
21
  function learn_press_get_attribute_terms( $attribute ) {
22
- if ( is_numeric( $attribute ) && !is_wp_error( $term = get_term( $attribute, LP_COURSE_ATTRIBUTE ) ) ) {
23
- $attribute = $term->slug;
 
 
 
 
 
 
 
 
 
 
 
24
  }
25
- $terms = get_terms( sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute ), array( 'hide_empty' => false ) );
26
  return $terms;
27
  }
28
 
@@ -45,10 +55,21 @@ function learn_press_delete_attribute_terms( $attribute ) {
45
  return $deleted_terms;
46
  }
47
 
 
 
 
 
 
48
  function learn_press_get_course_attributes( $course_id ) {
49
  return get_post_meta( $course_id, '_lp_attributes', true );
50
  }
51
 
 
 
 
 
 
 
52
  function learn_press_add_course_attribute_value( $name, $taxonomy ) {
53
 
54
  if ( !$name || term_exists( $name, $taxonomy ) ) {
@@ -62,6 +83,11 @@ function learn_press_add_course_attribute_value( $name, $taxonomy ) {
62
  return $new_value;
63
  }
64
 
 
 
 
 
 
65
  function learn_press_add_course_attribute( $name ) {
66
 
67
  if ( !$name || term_exists( $name, LP_COURSE_ATTRIBUTE ) ) {
@@ -72,6 +98,12 @@ function learn_press_add_course_attribute( $name ) {
72
  return $new_value;
73
  }
74
 
 
 
 
 
 
 
75
  function learn_press_add_attribute_to_course( $course_id, $taxonomy ) {
76
  if ( !$term = get_term_by( 'slug', $taxonomy, LP_COURSE_ATTRIBUTE ) ) {
77
  return false;
@@ -91,8 +123,53 @@ function learn_press_add_attribute_to_course( $course_id, $taxonomy ) {
91
  return $attribute;
92
  }
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  /**
95
  * Register widgets
96
  */
97
- LP_Widget::register( 'course-attributes' );
98
- LP_Widget::register( 'course-filters' );
19
  * @return array|int|WP_Error
20
  */
21
  function learn_press_get_attribute_terms( $attribute ) {
22
+ $terms = array();
23
+ if ( is_array( $attribute ) ) {
24
+ foreach ( $attribute as $attr ) {
25
+ $_terms = learn_press_get_attribute_terms( $attr );
26
+ if ( is_array( $terms ) ) {
27
+ $terms = array_merge( $terms, $_terms );
28
+ }
29
+ }
30
+ } else {
31
+ if ( is_numeric( $attribute ) && !is_wp_error( $term = get_term( $attribute, LP_COURSE_ATTRIBUTE ) ) ) {
32
+ $attribute = $term->slug;
33
+ }
34
+ $terms = get_terms( sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute ), array( 'hide_empty' => false ) );
35
  }
 
36
  return $terms;
37
  }
38
 
55
  return $deleted_terms;
56
  }
57
 
58
+ /**
59
+ * @param $course_id
60
+ *
61
+ * @return mixed
62
+ */
63
  function learn_press_get_course_attributes( $course_id ) {
64
  return get_post_meta( $course_id, '_lp_attributes', true );
65
  }
66
 
67
+ /**
68
+ * @param $name
69
+ * @param $taxonomy
70
+ *
71
+ * @return array|bool|WP_Error
72
+ */
73
  function learn_press_add_course_attribute_value( $name, $taxonomy ) {
74
 
75
  if ( !$name || term_exists( $name, $taxonomy ) ) {
83
  return $new_value;
84
  }
85
 
86
+ /**
87
+ * @param $name
88
+ *
89
+ * @return array|bool|WP_Error
90
+ */
91
  function learn_press_add_course_attribute( $name ) {
92
 
93
  if ( !$name || term_exists( $name, LP_COURSE_ATTRIBUTE ) ) {
98
  return $new_value;
99
  }
100
 
101
+ /**
102
+ * @param $course_id
103
+ * @param $taxonomy
104
+ *
105
+ * @return bool|mixed|void
106
+ */
107
  function learn_press_add_attribute_to_course( $course_id, $taxonomy ) {
108
  if ( !$term = get_term_by( 'slug', $taxonomy, LP_COURSE_ATTRIBUTE ) ) {
109
  return false;
123
  return $attribute;
124
  }
125
 
126
+ /**
127
+ * @param WP_Query $q
128
+ */
129
+ add_filter( 'pre_get_posts', function ( $q ) {
130
+ global $lp_tax_query;
131
+ if ( empty( $_REQUEST['course-filter'] ) ) {
132
+ return;
133
+ }
134
+
135
+ if ( !$q->is_main_query() ) {
136
+ return;
137
+ }
138
+ if ( LP_COURSE_CPT != $q->get( 'post_type' ) ) {
139
+ return $q;
140
+ }
141
+
142
+ if ( $attribute_taxonomies = learn_press_get_attributes() ) {
143
+ $attribute_operator = 'and' === strtolower( learn_press_get_request( 'attribute_operator' ) ) ? 'AND' : 'OR';
144
+ $value_operator = 'and' === strtolower( learn_press_get_request( 'value_operator' ) ) ? 'AND' : 'IN';
145
+ $tax_query = array(
146
+ 'relation' => $attribute_operator
147
+ );
148
+ foreach ( $attribute_taxonomies as $tax ) {
149
+ $attribute = $tax->slug;
150
+ $taxonomy = LP_COURSE_ATTRIBUTE . '-' . $attribute;
151
+ $filter_terms = !empty( $_GET['filter_' . $attribute] ) ? explode( ',', $_GET['filter_' . $attribute] ) : array();
152
+
153
+
154
+ if ( empty( $filter_terms ) || !taxonomy_exists( $taxonomy ) ) {
155
+ continue;
156
+ }
157
+
158
+ $tax_query[] = array(
159
+ 'taxonomy' => $taxonomy,
160
+ 'field' => 'slug',
161
+ 'terms' => $filter_terms,
162
+ 'operator' => $value_operator,
163
+ 'include_children' => false,
164
+ );
165
+ }
166
+ $lp_tax_query = $tax_query;
167
+ $q->set( 'tax_query', $tax_query );
168
+ }
169
+ return $q;
170
+ }, 1000 );
171
+
172
  /**
173
  * Register widgets
174
  */
175
+ LP_Widget::register( array( 'course-attributes', 'course-filters' ) );
 
inc/class-lp-ajax.php CHANGED
@@ -1,10 +1,10 @@
1
  <?php
2
 
3
- if ( !defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly
5
  }
6
 
7
- if ( !class_exists( 'LP_AJAX' ) ) {
8
  /**
9
  * Class LP_AJAX
10
  */
@@ -12,7 +12,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
12
  /**
13
  * Init common ajax events
14
  */
15
- public static function init() {
16
  $ajaxEvents = array(
17
  'load_quiz_question' => true,
18
  'load_prev_question' => false,
@@ -48,8 +48,8 @@ if ( !class_exists( 'LP_AJAX' ) ) {
48
  *
49
  * @param $var
50
  */
51
- public static function do_ajax( $var ) {
52
- if ( !defined( 'LP_DOING_AJAX' ) ) {
53
  define( 'LP_DOING_AJAX', true );
54
  }
55
  LP_Gateways::instance()->get_available_payment_gateways();
@@ -60,6 +60,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
60
  $result = call_user_func( $callback );
61
  } elseif ( has_action( 'learn_press_ajax_handler_' . $var ) ) {
62
  do_action( 'learn_press_ajax_handler_' . $var );
 
63
  return;
64
  }
65
  if ( learn_press_get_request( 'format' ) == 'html' ) {
@@ -68,13 +69,13 @@ if ( !class_exists( 'LP_AJAX' ) ) {
68
  learn_press_send_json( $result );
69
  }
70
 
71
- public static function upload_user_avatar() {
72
- $file = $_FILES['lp-upload-avatar'];
73
  $upload_dir = learn_press_user_profile_picture_upload_dir();
74
 
75
  add_filter( 'upload_dir', array( __CLASS__, '_user_avatar_upload_dir' ), 10000 );
76
 
77
- $result = wp_handle_upload( $file,
78
  array(
79
  'test_form' => false
80
  )
@@ -92,15 +93,16 @@ if ( !class_exists( 'LP_AJAX' ) ) {
92
  learn_press_send_json( $result );
93
  }
94
 
95
- public static function _user_avatar_upload_dir( $dir ) {
96
  $dir = learn_press_user_profile_picture_upload_dir();
 
97
  return $dir;
98
  }
99
 
100
  /**
101
  * Become a teacher
102
  */
103
- public static function _request_become_a_teacher() {
104
  $response = learn_press_process_become_a_teacher_form(
105
  array(
106
  'name' => learn_press_get_request( 'bat_name' ),
@@ -116,7 +118,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
116
  *
117
  * @return array|mixed|void
118
  */
119
- public static function _request_checkout() {
120
  return LP()->checkout->process_checkout_handler();
121
  }
122
 
@@ -126,9 +128,9 @@ if ( !class_exists( 'LP_AJAX' ) ) {
126
  * @return bool
127
  * @throws Exception
128
  */
129
- public static function _request_enroll_course() {
130
  $course_id = learn_press_get_request( 'enroll-course' );
131
- if ( !$course_id ) {
132
  throw new Exception( __( 'Invalid course', 'learnpress' ) );
133
  }
134
  $insert_id = LP()->user->enroll( $course_id );
@@ -155,6 +157,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
155
  wp_redirect( $response['redirect'] );
156
  exit();
157
  }
 
158
  return false;
159
  }
160
 
@@ -163,7 +166,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
163
  *
164
  * @return array
165
  */
166
- public static function _request_checkout_login() {
167
  $result = array(
168
  'result' => 'success'
169
  );
@@ -194,13 +197,14 @@ if ( !class_exists( 'LP_AJAX' ) ) {
194
  if ( $result['result'] == 'fail' ) {
195
  $result['messages'] = $messages;
196
  }
 
197
  return $result;
198
  }
199
 
200
  /**
201
  * Request login in profile
202
  */
203
- public static function _request_login() {
204
  $data_str = learn_press_get_request( 'data' );
205
  $data = null;
206
  if ( $data_str ) {
@@ -219,7 +223,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
219
  $error = is_wp_error( $user );
220
  $return = array(
221
  'result' => $error ? 'error' : 'success',
222
- 'redirect' => ( !$error && !empty( $data['redirect_to'] ) ) ? $data['redirect_to'] : ''
223
  );
224
  if ( $error ) {
225
  $return['message'] = learn_press_get_message( $user->get_error_message() ? $user->get_error_message() : __( 'Please enter your username and/or password', 'learnpress' ) );
@@ -250,6 +254,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
250
  $checkout = LP()->checkout()->process_checkout();
251
  } else {
252
  }
 
253
  return;
254
  }
255
  $return['message'] = learn_press_get_message( sprintf( __( 'Welcome back, %s! Redirecting...', 'learnpress' ), learn_press_get_profile_display_name( $user ) ) );
@@ -260,7 +265,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
260
  /**
261
  * Request add-to-cart a course
262
  */
263
- public static function _request_add_to_cart() {
264
  $cart = learn_press_get_cart();
265
  $course_id = learn_press_get_request( 'purchase-course' );
266
 
@@ -279,7 +284,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
279
  /**
280
  * Request finish course
281
  */
282
- public static function _request_finish_course() {
283
  $nonce = learn_press_get_request( 'security' );
284
  $course_id = absint( learn_press_get_request( 'id' ) );
285
  $user = learn_press_get_current_user();
@@ -287,7 +292,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
287
  $course = LP_Course::get_course( $course_id );
288
 
289
  $nonce_action = sprintf( 'learn-press-finish-course-%d-%d', $course_id, $user->id );
290
- if ( !$user->id || !$course || !wp_verify_nonce( $nonce, $nonce_action ) ) {
291
  wp_die( __( 'Access denied!', 'learnpress' ) );
292
  }
293
 
@@ -311,24 +316,94 @@ if ( !class_exists( 'LP_AJAX' ) ) {
311
  /**
312
  * Request complete an item
313
  */
314
- public static function _request_complete_item() {
315
  $user = learn_press_get_current_user();
316
  $id = learn_press_get_request( 'id' );
317
- $course_id = !empty( $_REQUEST['course_id'] ) ? $_REQUEST['course_id'] : get_the_ID();
318
  $type = learn_press_get_request( 'type' );
319
  $security = learn_press_get_request( 'security' );
320
  $response = array();
321
- if ( !wp_verify_nonce( $security, sprintf( 'complete-item-%d-%d-%d', $user->id, $course_id, $id ) ) ) {
322
  $response['result'] = 'fail';
323
  $response['message'] = __( 'Bad request!', 'learnpress' );
324
  } else {
325
  if ( $type == 'lp_lesson' ) {
326
  $results = $user->complete_lesson( $id, $course_id );
 
327
  if ( is_wp_error( $results ) ) {
328
  learn_press_add_message( __( 'Error while completing lesson.', 'learnpress' ) );
329
  } elseif ( $results !== false ) {
330
- learn_press_add_message( __( 'You have completed lesson.', 'learnpress' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
331
  }
 
332
  } else {
333
  do_action( 'learn_press_user_request_complete_item', $_REQUEST );
334
  }
@@ -340,7 +415,7 @@ if ( !class_exists( 'LP_AJAX' ) ) {
340
  /**
341
  * Request load item content
342
  */
343
- public static function _request_load_item() {
344
  global $wpdb;
345
  $user = learn_press_get_current_user();
346
  $item_id = learn_press_get_request( 'id' );
@@ -349,9 +424,9 @@ if ( !class_exists( 'LP_AJAX' ) ) {
349
  $can_view_item = $user->can( 'view-item', $item_id, $course_id );
350
  if ( $can_view_item ) {
351
  // Update user item if it's not updated
352
- if ( !$user->get_item_status( $item_id, $course_id ) ) {
353
  $item_type = learn_press_get_request( 'type' );
354
- if ( !$item_type ) {
355
  $item_type = get_post_type( $item_id );
356
  }
357
  if ( apply_filters( 'learn_press_insert_user_item_data', true, $item_id, $course_id ) && $can_view_item != 'preview' ) {
@@ -372,7 +447,14 @@ if ( !class_exists( 'LP_AJAX' ) ) {
372
  )
373
  ),
374
  array(
375
- '%d', '%d', '%s', '%s', '%s', '%s', '%d', '%s'
 
 
 
 
 
 
 
376
  )
377
  );
378
  print_r( $wpdb );
@@ -393,19 +475,19 @@ if ( !class_exists( 'LP_AJAX' ) ) {
393
  * Student take course
394
 
1
  <?php
2
 
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly
5
  }
6
 
7
+ if ( ! class_exists( 'LP_AJAX' ) ) {
8
  /**
9
  * Class LP_AJAX
10
  */
12
  /**
13
  * Init common ajax events
14
  */
15
+ public static function init () {
16
  $ajaxEvents = array(
17
  'load_quiz_question' => true,
18
  'load_prev_question' => false,
48
  *
49
  * @param $var
50
  */
51
+ public static function do_ajax ( $var ) {
52
+ if ( ! defined( 'LP_DOING_AJAX' ) ) {
53
  define( 'LP_DOING_AJAX', true );
54
  }
55
  LP_Gateways::instance()->get_available_payment_gateways();
60
  $result = call_user_func( $callback );
61
  } elseif ( has_action( 'learn_press_ajax_handler_' . $var ) ) {
62
  do_action( 'learn_press_ajax_handler_' . $var );
63
+
64
  return;
65
  }
66
  if ( learn_press_get_request( 'format' ) == 'html' ) {
69
  learn_press_send_json( $result );
70
  }
71
 
72
+ public static function upload_user_avatar () {
73
+ $file = $_FILES['lp-upload-avatar'];
74
  $upload_dir = learn_press_user_profile_picture_upload_dir();
75
 
76
  add_filter( 'upload_dir', array( __CLASS__, '_user_avatar_upload_dir' ), 10000 );
77
 
78
+ $result = wp_handle_upload( $file,
79
  array(
80
  'test_form' => false
81
  )
93
  learn_press_send_json( $result );
94
  }
95
 
96
+ public static function _user_avatar_upload_dir ( $dir ) {
97
  $dir = learn_press_user_profile_picture_upload_dir();
98
+
99
  return $dir;
100
  }
101
 
102
  /**
103
  * Become a teacher
104
  */
105
+ public static function _request_become_a_teacher () {
106
  $response = learn_press_process_become_a_teacher_form(
107
  array(
108
  'name' => learn_press_get_request( 'bat_name' ),
118
  *
119
  * @return array|mixed|void
120
  */
121
+ public static function _request_checkout () {
122
  return LP()->checkout->process_checkout_handler();
123
  }
124
 
128
  * @return bool
129
  * @throws Exception
130
  */
131
+ public static function _request_enroll_course () {
132
  $course_id = learn_press_get_request( 'enroll-course' );
133
+ if ( ! $course_id ) {
134
  throw new Exception( __( 'Invalid course', 'learnpress' ) );
135
  }
136
  $insert_id = LP()->user->enroll( $course_id );
157
  wp_redirect( $response['redirect'] );
158
  exit();
159
  }
160
+
161
  return false;
162
  }
163
 
166
  *
167
  * @return array
168
  */
169
+ public static function _request_checkout_login () {
170
  $result = array(
171
  'result' => 'success'
172
  );
197
  if ( $result['result'] == 'fail' ) {
198
  $result['messages'] = $messages;
199
  }
200
+
201
  return $result;
202
  }
203
 
204
  /**
205
  * Request login in profile
206
  */
207
+ public static function _request_login () {
208
  $data_str = learn_press_get_request( 'data' );
209
  $data = null;
210
  if ( $data_str ) {
223
  $error = is_wp_error( $user );
224
  $return = array(
225
  'result' => $error ? 'error' : 'success',
226
+ 'redirect' => ( ! $error && ! empty( $data['redirect_to'] ) ) ? $data['redirect_to'] : ''
227
  );
228
  if ( $error ) {
229
  $return['message'] = learn_press_get_message( $user->get_error_message() ? $user->get_error_message() : __( 'Please enter your username and/or password', 'learnpress' ) );
254
  $checkout = LP()->checkout()->process_checkout();
255
  } else {
256
  }
257
+
258
  return;
259
  }
260
  $return['message'] = learn_press_get_message( sprintf( __( 'Welcome back, %s! Redirecting...', 'learnpress' ), learn_press_get_profile_display_name( $user ) ) );
265
  /**
266
  * Request add-to-cart a course
267
  */
268
+ public static function _request_add_to_cart () {
269
  $cart = learn_press_get_cart();
270
  $course_id = learn_press_get_request( 'purchase-course' );
271
 
284
  /**
285
  * Request finish course
286
  */
287
+ public static function _request_finish_course () {
288
  $nonce = learn_press_get_request( 'security' );
289
  $course_id = absint( learn_press_get_request( 'id' ) );
290
  $user = learn_press_get_current_user();
292
  $course = LP_Course::get_course( $course_id );
293
 
294
  $nonce_action = sprintf( 'learn-press-finish-course-%d-%d', $course_id, $user->id );
295
+ if ( ! $user->id || ! $course || ! wp_verify_nonce( $nonce, $nonce_action ) ) {
296
  wp_die( __( 'Access denied!', 'learnpress' ) );
297
  }
298
 
316
  /**
317
  * Request complete an item
318
  */
319
+ public static function _request_complete_item () {
320
  $user = learn_press_get_current_user();
321
  $id = learn_press_get_request( 'id' );
322
+ $course_id = ! empty( $_REQUEST['course_id'] ) ? $_REQUEST['course_id'] : get_the_ID();
323
  $type = learn_press_get_request( 'type' );
324
  $security = learn_press_get_request( 'security' );
325
  $response = array();
326
+ if ( ! wp_verify_nonce( $security, sprintf( 'complete-item-%d-%d-%d', $user->id, $course_id, $id ) ) ) {
327
  $response['result'] = 'fail';
328
  $response['message'] = __( 'Bad request!', 'learnpress' );
329
  } else {
330
  if ( $type == 'lp_lesson' ) {
331
  $results = $user->complete_lesson( $id, $course_id );
332
+
333
  if ( is_wp_error( $results ) ) {
334
  learn_press_add_message( __( 'Error while completing lesson.', 'learnpress' ) );
335
  } elseif ( $results !== false ) {
336
+
337
+ $message = __( 'You have completed lesson', 'learnpress' );
338
+ $auto_next = LP()->settings->get( 'auto_redirect_next_lesson' );
339
+ $time = LP()->settings->get( 'auto_redirect_time' );
340
+ $time = absint( $time );
341
+
342
+ if ( $auto_next === 'yes' ) {
343
+ ob_start();
344
+ ?>
345
+ <script type="text/javascript">
346
+
347
+ 'use strict';
348
+
349
+ (function ($) {
350
+
351
+ $(document).ready(function () {
352
+
353
+ var $nextItem = $('.button-load-item', '#lp-navigation .nav-next'),
354
+ $message = $('.learn-press-auto-redirect-next-item'),
355
+ time = <?php echo esc_js( $time ); ?>;
356
+
357
+ if ($nextItem.length) {
358
+
359
+ time = !parseInt(time) ? 0 : parseInt(time);
360
+
361
+ if (!time) {
362
+ $nextItem.trigger('click');
363
+ }
364
+ else {
365
+ if ($message.length) {
366
+
367
+ $message.addClass('active');
368
+
369
+ var $count = $('.learn-press-countdown', $message),
370
+ interval = setInterval(function () {
371
+
372
+ if (time <= 1) {
373
+ clearInterval(interval);
374
+ $nextItem.trigger('click');
375
+ }
376
+ else {
377
+ $count.text(--time);
378
+ }
379
+
380
+ }, 1000);
381
+
382
+ $('.learnpress-dismiss-notice', $message).on('click', function () {
383
+
384
+ clearInterval(interval);
385
+
386
+ $message.hide(200, function () {
387
+ $(this).remove();
388
+ });
389
+
390
+ });
391
+ }
392
+ }
393
+
394
+ }
395
+ });
396
+
397
+ })(jQuery);
398
+ </script>
399
+ <?php
400
+ $message .= ob_get_contents();
401
+ ob_get_clean();
402
+ }
403
+ learn_press_add_message( $message );
404
+
405
  }
406
+
407
  } else {
408
  do_action( 'learn_press_user_request_complete_item', $_REQUEST );
409
  }
415
  /**
416
  * Request load item content
417
  */
418
+ public static function _request_load_item () {
419
  global $wpdb;
420
  $user = learn_press_get_current_user();
421
  $item_id = learn_press_get_request( 'id' );
424
  $can_view_item = $user->can( 'view-item', $item_id, $course_id );
425
  if ( $can_view_item ) {
426
  // Update user item if it's not updated
427
+ if ( ! $user->get_item_status( $item_id, $course_id ) ) {
428
  $item_type = learn_press_get_request( 'type' );
429
+ if ( ! $item_type ) {
430
  $item_type = get_post_type( $item_id );
431
  }
432
  if ( apply_filters( 'learn_press_insert_user_item_data', true, $item_id, $course_id ) && $can_view_item != 'preview' ) {
447
  )
448
  ),
449
  array(
450
+ '%d',
451
+ '%d',
452
+ '%s',
453
+ '%s',
454
+ '%s',
455
+ '%s',
456
+ '%d',
457
+ '%s'
458
  )
459
  );
460
  print_r( $wpdb );
475
  * Student take course
476