trusty-cms 4.3.4 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/Gemfile.lock +22 -12
  4. data/app/assets/stylesheets/admin/partials/_content.scss +1 -0
  5. data/app/controllers/admin/assets_controller.rb +5 -1
  6. data/app/models/asset.rb +39 -48
  7. data/app/models/asset_type.rb +6 -2
  8. data/app/views/admin/assets/edit.html.haml +5 -3
  9. data/config/database.yml +2 -2
  10. data/config/locales/en.yml +1 -0
  11. data/coverage/index.html +1 -1
  12. data/lib/trusty_cms/deprecation.rb +13 -0
  13. data/lib/trusty_cms.rb +1 -1
  14. data/node_modules/path-parse/index.js +17 -35
  15. data/node_modules/path-parse/package.json +1 -1
  16. data/node_modules/postcss/CHANGELOG.md +27 -0
  17. data/node_modules/postcss/README.md +21 -0
  18. data/node_modules/postcss/lib/at-rule.js +2 -4
  19. data/node_modules/postcss/lib/comment.js +2 -4
  20. data/node_modules/postcss/lib/container.js +27 -122
  21. data/node_modules/postcss/lib/css-syntax-error.js +5 -7
  22. data/node_modules/postcss/lib/declaration.js +2 -4
  23. data/node_modules/postcss/lib/input.js +3 -5
  24. data/node_modules/postcss/lib/lazy-result.js +10 -17
  25. data/node_modules/postcss/lib/map-generator.js +10 -17
  26. data/node_modules/postcss/lib/node.js +2 -4
  27. data/node_modules/postcss/lib/parser.js +2 -4
  28. data/node_modules/postcss/lib/postcss.d.ts +25 -19
  29. data/node_modules/postcss/lib/previous-map.js +17 -6
  30. data/node_modules/postcss/lib/processor.js +16 -15
  31. data/node_modules/postcss/lib/result.js +2 -4
  32. data/node_modules/postcss/lib/root.js +10 -17
  33. data/node_modules/postcss/lib/rule.js +2 -4
  34. data/node_modules/postcss/lib/stringifier.js +2 -4
  35. data/node_modules/postcss/lib/warning.js +2 -4
  36. data/node_modules/postcss/package.json +16 -12
  37. data/spec/dummy/log/test.log +542 -443
  38. data/spec/dummy/tmp/cache/747/A70/TrustyCms%3A%3AConfig +0 -0
  39. data/spec/dummy/tmp/cache/85C/FA0/TrustyCms.cache_mtime +1 -1
  40. data/trusty_cms.gemspec +2 -1
  41. data/vendor/extensions/clipped-extension/lib/clipped/engine.rb +1 -1
  42. metadata +31 -307
  43. data/config/initializers/interpolation.rb +0 -6
  44. data/node_modules/path-parse/test.js +0 -77
  45. data/node_modules/postcss/docs/api/assets/scripts.min.js +0 -8
  46. data/node_modules/postcss/docs/api/assets/styles.min.css +0 -1
  47. data/node_modules/postcss/docs/api/index.html +0 -22716
  48. data/spec/dummy/log/development.log +0 -158
  49. data/spec/dummy/node_modules/jquery/AUTHORS.txt +0 -327
  50. data/spec/dummy/node_modules/jquery/LICENSE.txt +0 -20
  51. data/spec/dummy/node_modules/jquery/README.md +0 -62
  52. data/spec/dummy/node_modules/jquery/bower.json +0 -14
  53. data/spec/dummy/node_modules/jquery/dist/jquery.js +0 -10872
  54. data/spec/dummy/node_modules/jquery/dist/jquery.min.js +0 -2
  55. data/spec/dummy/node_modules/jquery/dist/jquery.min.map +0 -1
  56. data/spec/dummy/node_modules/jquery/dist/jquery.slim.js +0 -8777
  57. data/spec/dummy/node_modules/jquery/dist/jquery.slim.min.js +0 -2
  58. data/spec/dummy/node_modules/jquery/dist/jquery.slim.min.map +0 -1
  59. data/spec/dummy/node_modules/jquery/external/sizzle/LICENSE.txt +0 -36
  60. data/spec/dummy/node_modules/jquery/external/sizzle/dist/sizzle.js +0 -2478
  61. data/spec/dummy/node_modules/jquery/external/sizzle/dist/sizzle.min.js +0 -3
  62. data/spec/dummy/node_modules/jquery/external/sizzle/dist/sizzle.min.map +0 -1
  63. data/spec/dummy/node_modules/jquery/package.json +0 -117
  64. data/spec/dummy/node_modules/jquery/src/ajax/jsonp.js +0 -103
  65. data/spec/dummy/node_modules/jquery/src/ajax/load.js +0 -77
  66. data/spec/dummy/node_modules/jquery/src/ajax/script.js +0 -74
  67. data/spec/dummy/node_modules/jquery/src/ajax/var/location.js +0 -5
  68. data/spec/dummy/node_modules/jquery/src/ajax/var/nonce.js +0 -5
  69. data/spec/dummy/node_modules/jquery/src/ajax/var/rquery.js +0 -5
  70. data/spec/dummy/node_modules/jquery/src/ajax/xhr.js +0 -170
  71. data/spec/dummy/node_modules/jquery/src/ajax.js +0 -873
  72. data/spec/dummy/node_modules/jquery/src/attributes/attr.js +0 -141
  73. data/spec/dummy/node_modules/jquery/src/attributes/classes.js +0 -186
  74. data/spec/dummy/node_modules/jquery/src/attributes/prop.js +0 -143
  75. data/spec/dummy/node_modules/jquery/src/attributes/support.js +0 -33
  76. data/spec/dummy/node_modules/jquery/src/attributes/val.js +0 -191
  77. data/spec/dummy/node_modules/jquery/src/attributes.js +0 -13
  78. data/spec/dummy/node_modules/jquery/src/callbacks.js +0 -236
  79. data/spec/dummy/node_modules/jquery/src/core/DOMEval.js +0 -43
  80. data/spec/dummy/node_modules/jquery/src/core/access.js +0 -72
  81. data/spec/dummy/node_modules/jquery/src/core/camelCase.js +0 -23
  82. data/spec/dummy/node_modules/jquery/src/core/init.js +0 -129
  83. data/spec/dummy/node_modules/jquery/src/core/isAttached.js +0 -26
  84. data/spec/dummy/node_modules/jquery/src/core/nodeName.js +0 -13
  85. data/spec/dummy/node_modules/jquery/src/core/parseHTML.js +0 -65
  86. data/spec/dummy/node_modules/jquery/src/core/parseXML.js +0 -30
  87. data/spec/dummy/node_modules/jquery/src/core/ready-no-deferred.js +0 -97
  88. data/spec/dummy/node_modules/jquery/src/core/ready.js +0 -86
  89. data/spec/dummy/node_modules/jquery/src/core/readyException.js +0 -13
  90. data/spec/dummy/node_modules/jquery/src/core/stripAndCollapse.js +0 -14
  91. data/spec/dummy/node_modules/jquery/src/core/support.js +0 -20
  92. data/spec/dummy/node_modules/jquery/src/core/toType.js +0 -20
  93. data/spec/dummy/node_modules/jquery/src/core/var/rsingleTag.js +0 -7
  94. data/spec/dummy/node_modules/jquery/src/core.js +0 -400
  95. data/spec/dummy/node_modules/jquery/src/css/addGetHookIf.js +0 -26
  96. data/spec/dummy/node_modules/jquery/src/css/adjustCSS.js +0 -74
  97. data/spec/dummy/node_modules/jquery/src/css/curCSS.js +0 -65
  98. data/spec/dummy/node_modules/jquery/src/css/finalPropName.js +0 -42
  99. data/spec/dummy/node_modules/jquery/src/css/hiddenVisibleSelectors.js +0 -15
  100. data/spec/dummy/node_modules/jquery/src/css/showHide.js +0 -105
  101. data/spec/dummy/node_modules/jquery/src/css/support.js +0 -133
  102. data/spec/dummy/node_modules/jquery/src/css/var/cssExpand.js +0 -5
  103. data/spec/dummy/node_modules/jquery/src/css/var/getStyles.js +0 -17
  104. data/spec/dummy/node_modules/jquery/src/css/var/isHiddenWithinTree.js +0 -34
  105. data/spec/dummy/node_modules/jquery/src/css/var/rboxStyle.js +0 -7
  106. data/spec/dummy/node_modules/jquery/src/css/var/rnumnonpx.js +0 -7
  107. data/spec/dummy/node_modules/jquery/src/css/var/swap.js +0 -26
  108. data/spec/dummy/node_modules/jquery/src/css.js +0 -494
  109. data/spec/dummy/node_modules/jquery/src/data/Data.js +0 -162
  110. data/spec/dummy/node_modules/jquery/src/data/var/acceptData.js +0 -19
  111. data/spec/dummy/node_modules/jquery/src/data/var/dataPriv.js +0 -7
  112. data/spec/dummy/node_modules/jquery/src/data/var/dataUser.js +0 -7
  113. data/spec/dummy/node_modules/jquery/src/data.js +0 -180
  114. data/spec/dummy/node_modules/jquery/src/deferred/exceptionHook.js +0 -21
  115. data/spec/dummy/node_modules/jquery/src/deferred.js +0 -399
  116. data/spec/dummy/node_modules/jquery/src/deprecated/ajax-event-alias.js +0 -22
  117. data/spec/dummy/node_modules/jquery/src/deprecated/event.js +0 -48
  118. data/spec/dummy/node_modules/jquery/src/deprecated.js +0 -87
  119. data/spec/dummy/node_modules/jquery/src/dimensions.js +0 -57
  120. data/spec/dummy/node_modules/jquery/src/effects/Tween.js +0 -125
  121. data/spec/dummy/node_modules/jquery/src/effects/animatedSelector.js +0 -15
  122. data/spec/dummy/node_modules/jquery/src/effects.js +0 -701
  123. data/spec/dummy/node_modules/jquery/src/event/focusin.js +0 -58
  124. data/spec/dummy/node_modules/jquery/src/event/support.js +0 -11
  125. data/spec/dummy/node_modules/jquery/src/event/trigger.js +0 -201
  126. data/spec/dummy/node_modules/jquery/src/event.js +0 -892
  127. data/spec/dummy/node_modules/jquery/src/exports/amd.js +0 -26
  128. data/spec/dummy/node_modules/jquery/src/exports/global.js +0 -34
  129. data/spec/dummy/node_modules/jquery/src/jquery.js +0 -41
  130. data/spec/dummy/node_modules/jquery/src/manipulation/_evalUrl.js +0 -32
  131. data/spec/dummy/node_modules/jquery/src/manipulation/buildFragment.js +0 -106
  132. data/spec/dummy/node_modules/jquery/src/manipulation/getAll.js +0 -32
  133. data/spec/dummy/node_modules/jquery/src/manipulation/setGlobalEval.js +0 -22
  134. data/spec/dummy/node_modules/jquery/src/manipulation/support.js +0 -41
  135. data/spec/dummy/node_modules/jquery/src/manipulation/var/rscriptType.js +0 -5
  136. data/spec/dummy/node_modules/jquery/src/manipulation/var/rtagName.js +0 -8
  137. data/spec/dummy/node_modules/jquery/src/manipulation/wrapMap.js +0 -30
  138. data/spec/dummy/node_modules/jquery/src/manipulation.js +0 -480
  139. data/spec/dummy/node_modules/jquery/src/offset.js +0 -238
  140. data/spec/dummy/node_modules/jquery/src/queue/delay.js +0 -24
  141. data/spec/dummy/node_modules/jquery/src/queue.js +0 -145
  142. data/spec/dummy/node_modules/jquery/src/selector-native.js +0 -241
  143. data/spec/dummy/node_modules/jquery/src/selector-sizzle.js +0 -19
  144. data/spec/dummy/node_modules/jquery/src/selector.js +0 -3
  145. data/spec/dummy/node_modules/jquery/src/serialize.js +0 -136
  146. data/spec/dummy/node_modules/jquery/src/traversing/findFilter.js +0 -97
  147. data/spec/dummy/node_modules/jquery/src/traversing/var/dir.js +0 -22
  148. data/spec/dummy/node_modules/jquery/src/traversing/var/rneedsContext.js +0 -8
  149. data/spec/dummy/node_modules/jquery/src/traversing/var/siblings.js +0 -17
  150. data/spec/dummy/node_modules/jquery/src/traversing.js +0 -198
  151. data/spec/dummy/node_modules/jquery/src/var/ObjectFunctionString.js +0 -7
  152. data/spec/dummy/node_modules/jquery/src/var/arr.js +0 -5
  153. data/spec/dummy/node_modules/jquery/src/var/class2type.js +0 -6
  154. data/spec/dummy/node_modules/jquery/src/var/document.js +0 -5
  155. data/spec/dummy/node_modules/jquery/src/var/documentElement.js +0 -7
  156. data/spec/dummy/node_modules/jquery/src/var/flat.js +0 -16
  157. data/spec/dummy/node_modules/jquery/src/var/fnToString.js +0 -7
  158. data/spec/dummy/node_modules/jquery/src/var/getProto.js +0 -5
  159. data/spec/dummy/node_modules/jquery/src/var/hasOwn.js +0 -7
  160. data/spec/dummy/node_modules/jquery/src/var/indexOf.js +0 -7
  161. data/spec/dummy/node_modules/jquery/src/var/isFunction.js +0 -13
  162. data/spec/dummy/node_modules/jquery/src/var/isWindow.js +0 -8
  163. data/spec/dummy/node_modules/jquery/src/var/pnum.js +0 -5
  164. data/spec/dummy/node_modules/jquery/src/var/push.js +0 -7
  165. data/spec/dummy/node_modules/jquery/src/var/rcheckableType.js +0 -5
  166. data/spec/dummy/node_modules/jquery/src/var/rcssNum.js +0 -9
  167. data/spec/dummy/node_modules/jquery/src/var/rnothtmlwhite.js +0 -8
  168. data/spec/dummy/node_modules/jquery/src/var/slice.js +0 -7
  169. data/spec/dummy/node_modules/jquery/src/var/support.js +0 -6
  170. data/spec/dummy/node_modules/jquery/src/var/toString.js +0 -7
  171. data/spec/dummy/node_modules/jquery/src/wrap.js +0 -78
  172. data/spec/dummy/node_modules/jquery-ui-bundle/AUTHORS.txt +0 -333
  173. data/spec/dummy/node_modules/jquery-ui-bundle/LICENSE.txt +0 -43
  174. data/spec/dummy/node_modules/jquery-ui-bundle/external/jquery/jquery.js +0 -11008
  175. data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_444444_256x240.png +0 -0
  176. data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_555555_256x240.png +0 -0
  177. data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_777620_256x240.png +0 -0
  178. data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_777777_256x240.png +0 -0
  179. data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_cc0000_256x240.png +0 -0
  180. data/spec/dummy/node_modules/jquery-ui-bundle/images/ui-icons_ffffff_256x240.png +0 -0
  181. data/spec/dummy/node_modules/jquery-ui-bundle/index.html +0 -559
  182. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.css +0 -1312
  183. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.js +0 -18706
  184. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.min.css +0 -7
  185. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.min.js +0 -13
  186. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.structure.css +0 -886
  187. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.structure.min.css +0 -5
  188. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.theme.css +0 -443
  189. data/spec/dummy/node_modules/jquery-ui-bundle/jquery-ui.theme.min.css +0 -5
  190. data/spec/dummy/node_modules/jquery-ui-bundle/package.json +0 -33
  191. data/spec/dummy/node_modules/jquery-ujs/CONTRIBUTING.md +0 -109
  192. data/spec/dummy/node_modules/jquery-ujs/MIT-LICENSE +0 -20
  193. data/spec/dummy/node_modules/jquery-ujs/README.md +0 -86
  194. data/spec/dummy/node_modules/jquery-ujs/RELEASE.md +0 -23
  195. data/spec/dummy/node_modules/jquery-ujs/bower.json +0 -19
  196. data/spec/dummy/node_modules/jquery-ujs/package.json +0 -26
  197. data/spec/dummy/node_modules/jquery-ujs/src/rails.js +0 -555
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b4bbab61b619189dd9384ca92903313d763733f3346345e6e442bbe75d25284
4
- data.tar.gz: c5fea72ca62a6cdc834e9c4837cb601ed60f47d59ea42a6e370dd2b6aafcea85
3
+ metadata.gz: f0fc7adbc55517598d8eb365fe2518df17faab505fece52ec5dcb3374459b45c
4
+ data.tar.gz: 9de9c0c248cbe41a2c4b55592c9a3412f5cc50279e680de125c7ced575c0a0ac
5
5
  SHA512:
6
- metadata.gz: 183ae49c67949d369571917398832d9c63dcb51f0520d7442a3d6b758a53b1203f48f47830adaad6e5b86c169c85ce52886326340ace30e42d3908b6a4657e86
7
- data.tar.gz: e225962bf0b3905215bdcbbb4d31393d57e4d5312b25e153b5413787507d5f2e1d10a2592d1adb47b822ceec9d7315e0a906c091f62c9fd67f52b3dba2ebfd45
6
+ metadata.gz: 737f21b157db73ad8763d0bcb2576e8f6ff9ddff69d3be98713aae5903c71432e48db36df8f16b4def7e226f18d2f8fe4d4905ef80623f5638a4b245f2ebbe26
7
+ data.tar.gz: f472cff774a907272ac9a4a60a9a73ac9ef081fe4cd29411abf55238e1ef62640384f00a5be9c7f7fe68e968b05c9fa680438614378501e0cc7e7eebb50e4581
data/Gemfile CHANGED
@@ -12,10 +12,11 @@ gem 'trustygems', '~> 0.2.0'
12
12
  gemspec
13
13
 
14
14
  group :development, :test do
15
+ gem 'activestorage-validator'
15
16
  gem 'acts_as_list'
16
17
  gem 'database_cleaner'
17
18
  gem 'factory_bot_rails', '6.2.0'
18
- gem 'kt-paperclip', '~> 7.0.0'
19
+ gem 'file_validators'
19
20
  gem 'launchy', '~> 2.5.0'
20
21
  gem 'mysql2'
21
22
  gem 'poltergeist', '~> 1.18.1'
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trusty-cms (4.3.4)
4
+ trusty-cms (5.0.0)
5
5
  RedCloth (= 4.3.2)
6
+ activestorage-validator
6
7
  acts_as_list (>= 0.9.5, < 1.1.0)
7
8
  acts_as_tree (~> 2.9.1)
8
9
  ckeditor (>= 4.2.2, < 4.4.0)
@@ -12,6 +13,7 @@ PATH
12
13
  haml
13
14
  haml-rails (~> 2.0)
14
15
  highline (>= 1.7.8, < 2.1.0)
16
+ image_processing
15
17
  kraken-io
16
18
  mini_racer
17
19
  mysql2
@@ -86,6 +88,8 @@ GEM
86
88
  activesupport (= 6.1.4.1)
87
89
  marcel (~> 1.0.0)
88
90
  mini_mime (>= 1.1.0)
91
+ activestorage-validator (0.1.4)
92
+ rails (>= 5.2.0)
89
93
  activesupport (6.1.4.1)
90
94
  concurrent-ruby (~> 1.0, >= 1.0.2)
91
95
  i18n (>= 1.6, < 2)
@@ -144,6 +148,9 @@ GEM
144
148
  factory_bot (~> 6.2.0)
145
149
  railties (>= 5.0.0)
146
150
  ffi (1.15.4)
151
+ file_validators (3.0.0)
152
+ activemodel (>= 3.2)
153
+ mime-types (>= 1.0)
147
154
  globalid (0.5.2)
148
155
  activesupport (>= 5.0)
149
156
  haml (5.2.2)
@@ -161,37 +168,36 @@ GEM
161
168
  haml (>= 4.0, < 6)
162
169
  nokogiri (>= 1.6.0)
163
170
  ruby_parser (~> 3.5)
164
- httparty (0.18.1)
171
+ httparty (0.20.0)
165
172
  mime-types (~> 3.0)
166
173
  multi_xml (>= 0.5.2)
167
174
  i18n (1.8.10)
168
175
  concurrent-ruby (~> 1.0)
176
+ image_processing (1.12.1)
177
+ mini_magick (>= 4.9.5, < 5)
178
+ ruby-vips (>= 2.0.17, < 3)
169
179
  json (2.5.1)
170
180
  kraken-io (0.1.3)
171
181
  activesupport
172
182
  httparty
173
183
  json
174
184
  multipart-post
175
- kt-paperclip (7.0.0)
176
- activemodel (>= 4.2.0)
177
- activesupport (>= 4.2.0)
178
- marcel (~> 1.0.1)
179
- mime-types
180
- terrapin (~> 0.6.0)
181
185
  launchy (2.5.0)
182
186
  addressable (~> 2.7)
183
187
  libv8-node (15.14.0.1-x86_64-darwin-18)
188
+ libv8-node (15.14.0.1-x86_64-darwin-20)
184
189
  libv8-node (15.14.0.1-x86_64-linux)
185
190
  loofah (2.12.0)
186
191
  crass (~> 1.0.2)
187
192
  nokogiri (>= 1.5.9)
188
193
  mail (2.7.1)
189
194
  mini_mime (>= 0.1.1)
190
- marcel (1.0.1)
195
+ marcel (1.0.2)
191
196
  method_source (1.0.0)
192
197
  mime-types (3.3.1)
193
198
  mime-types-data (~> 3.2015)
194
199
  mime-types-data (3.2021.0225)
200
+ mini_magick (4.11.0)
195
201
  mini_mime (1.1.1)
196
202
  mini_racer (0.4.0)
197
203
  libv8-node (~> 15.14.0.0)
@@ -218,7 +224,7 @@ GEM
218
224
  public_suffix (4.0.6)
219
225
  racc (1.5.2)
220
226
  rack (2.2.3)
221
- rack-cache (1.12.1)
227
+ rack-cache (1.13.0)
222
228
  rack (>= 0.4)
223
229
  rack-test (1.1.0)
224
230
  rack (>= 1.0, < 3)
@@ -280,6 +286,8 @@ GEM
280
286
  rspec-mocks (~> 3.10)
281
287
  rspec-support (~> 3.10)
282
288
  rspec-support (3.10.2)
289
+ ruby-vips (2.1.3)
290
+ ffi (~> 1.12)
283
291
  ruby_parser (3.17.0)
284
292
  sexp_processor (~> 4.15, >= 4.15.1)
285
293
  sass-rails (6.0.0)
@@ -331,13 +339,15 @@ GEM
331
339
 
332
340
  PLATFORMS
333
341
  x86_64-darwin-18
342
+ x86_64-darwin-20
334
343
  x86_64-linux
335
344
 
336
345
  DEPENDENCIES
346
+ activestorage-validator
337
347
  acts_as_list
338
348
  database_cleaner
339
349
  factory_bot_rails (= 6.2.0)
340
- kt-paperclip (~> 7.0.0)
350
+ file_validators
341
351
  launchy (~> 2.5.0)
342
352
  mysql2
343
353
  poltergeist (~> 1.18.1)
@@ -349,4 +359,4 @@ DEPENDENCIES
349
359
  trustygems (~> 0.2.0)
350
360
 
351
361
  BUNDLED WITH
352
- 2.2.19
362
+ 2.2.27
@@ -6,6 +6,7 @@ main {
6
6
 
7
7
  .reversed main {
8
8
  .content {
9
+ line-height: 1.5;
9
10
  padding: 1em;
10
11
  }
11
12
  }
@@ -1,6 +1,9 @@
1
1
  class Admin::AssetsController < Admin::ResourceController
2
2
  paginate_models(per_page: 50)
3
3
  COMPRESS_FILE_TYPE = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml'].freeze
4
+ before_action do
5
+ ActiveStorage::Current.host = request.base_url
6
+ end
4
7
 
5
8
  def index
6
9
  assets = Asset.order('created_at DESC')
@@ -67,6 +70,7 @@ class Admin::AssetsController < Admin::ResourceController
67
70
  private
68
71
 
69
72
  def compress(uploaded_asset)
73
+ require 'open-uri'
70
74
  data = $kraken.upload(uploaded_asset.tempfile.path, 'lossy' => true)
71
75
  File.write(uploaded_asset.tempfile, URI.open(data.kraked_url).read, mode: 'wb')
72
76
  uploaded_asset
@@ -81,4 +85,4 @@ class Admin::AssetsController < Admin::ResourceController
81
85
  def asset_params
82
86
  params.permit(:id, :for_attachment, asset: [:caption, :for_attachment, asset: []])
83
87
  end
84
- end
88
+ end
data/app/models/asset.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  class Asset < ActiveRecord::Base
2
- include Paperclip::Glue
3
-
4
2
  has_many :page_attachments, dependent: :destroy
5
3
  has_many :pages, through: :page_attachments
6
4
  has_site if respond_to? :has_site
@@ -33,52 +31,43 @@ class Asset < ActiveRecord::Base
33
31
  end
34
32
  }
35
33
 
36
- has_attached_file :asset,
37
- styles: lambda { |attachment|
38
- AssetType.for(attachment).paperclip_styles
39
- },
40
- processors: lambda { |asset|
41
- asset.paperclip_processors
42
- },
43
- whiny: false,
44
- storage: TrustyCms.config['paperclip.storage'],
45
- path: TrustyCms.config['paperclip.path'],
46
- url: TrustyCms.config['paperclip.url'],
47
- fog_credentials: TrustyCmsClippedExtension::Cloud.credentials,
48
- fog_directory: TrustyCms.config['paperclip.fog.directory'],
49
- fog_public: TrustyCms.config['paperclip.fog.public?'] || true,
50
- fog_host: TrustyCmsClippedExtension::Cloud.host,
51
- fog_file: {
52
- 'Cache-Control' => 'max-age=31536000',
53
- }
54
-
55
- validates_attachment_content_type :asset, content_type: ['application/zip', 'image/jpg', 'image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/javascript', 'text/javascript', 'text/css']
56
-
34
+ has_one_attached :asset
35
+ validates :asset,
36
+ presence: true,
37
+ blob:
38
+ {
39
+ content_type: %w[application/zip image/jpg image/jpeg image/png image/gif application/pdf text/css],
40
+ size_range: 1..5.megabytes,
41
+ }
57
42
  before_save :assign_title
58
43
  before_save :assign_uuid
59
44
 
60
- after_post_process :read_dimensions
61
-
62
- validates_attachment_presence :asset, message: 'You must choose a file to upload!'
63
- if TrustyCms.config['paperclip.skip_filetype_validation'] != 'true' && TrustyCms.config['paperclip.content_types']
64
- validates_attachment_content_type :asset, content_type: TrustyCms.config['paperclip.content_types'].gsub(' ', '').split(',')
65
- else
66
- validates_attachment_presence :asset, message: 'Your uploaded file must have an extension in its name!'
67
- end
68
- validates_attachment_size :asset, less_than: (TrustyCms.config['assets.max_asset_size'] || 5).to_i.megabytes
69
-
70
45
  def asset_type
71
46
  AssetType.for(asset)
72
47
  end
73
- delegate :paperclip_processors, :paperclip_styles, :style_dimensions, :style_format, to: :asset_type
48
+ delegate :paperclip_processors, :paperclip_styles, :active_storage_styles, :style_dimensions, :style_format,
49
+ to: :asset_type
74
50
 
75
51
  def thumbnail(style_name = 'original')
76
- return asset.url if style_name.to_sym == :original
77
- return asset.url(style_name.to_sym) if style?(style_name)
52
+ return asset.url if style_name == 'original'
53
+ return asset_variant(style_name).processed.url if asset.variable?
78
54
 
79
55
  asset_type.icon(style_name)
80
56
  end
81
57
 
58
+ def asset_variant(style_name)
59
+ case style_name
60
+ when 'thumbnail'
61
+ asset.variant(gravity: 'Center', resize: '100x100^', crop: '100x100+0+0')
62
+ when 'normal'
63
+ asset.variant(gravity: 'Center', resize: '640x640^')
64
+ when 'small'
65
+ asset.variant(gravity: 'Center', resize: '320x320^')
66
+ when 'icon'
67
+ asset.variant(gravity: 'Center', resize: '50x50^')
68
+ end
69
+ end
70
+
82
71
  def style?(style_name = 'original')
83
72
  style_name == 'original' || paperclip_styles.keys.include?(style_name.to_sym)
84
73
  end
@@ -110,7 +99,10 @@ class Asset < ActiveRecord::Base
110
99
  end
111
100
 
112
101
  def geometry(style_name = 'original')
113
- raise Paperclip::StyleError, "Requested style #{style_name} is not defined for this asset." unless style?(style_name)
102
+ unless style?(style_name)
103
+ raise Paperclip::StyleError,
104
+ "Requested style #{style_name} is not defined for this asset."
105
+ end
114
106
 
115
107
  @geometry ||= {}
116
108
  begin
@@ -118,8 +110,9 @@ class Asset < ActiveRecord::Base
118
110
  original_geometry
119
111
  else
120
112
  style = asset.styles[style_name.to_sym]
121
- original_geometry.transformed_by(style.geometry) # this can return dimensions for fully specified style sizes but not for relative sizes when there are no original dimensions
122
- end
113
+ original_geometry.transformed_by(style.geometry)
114
+ # this can return dimensions for fully specified style sizes but not for relative sizes when there are no original dimensions
115
+ end
123
116
  rescue Paperclip::TransformationError => e
124
117
  Rails.logger.warn "geometry transformation error: #{e}"
125
118
  original_geometry # returns a blank geometry if the real geometry cannot be calculated
@@ -174,19 +167,17 @@ class Asset < ActiveRecord::Base
174
167
  # original file and calculate thumbnail dimensions later, on demand.
175
168
 
176
169
  def read_dimensions
177
- if image?
178
- if file = asset.queued_for_write[:original]
179
- geometry = Paperclip::Geometry.from_file(file)
180
- self.original_width = geometry.width
181
- self.original_height = geometry.height
182
- self.original_extension = File.extname(file.path)
183
- end
170
+ if image? && file = asset.queued_for_write[:original]
171
+ geometry = Paperclip::Geometry.from_file(file)
172
+ self.original_width = geometry.width
173
+ self.original_height = geometry.height
174
+ self.original_extension = File.extname(file.path)
184
175
  end
185
176
  true
186
177
  end
187
178
 
188
179
  def assign_title
189
- self.title = asset_file_name.downcase.sub(original_extension, '').sub('.', '')
180
+ self.title = asset.filename.base
190
181
  end
191
182
 
192
183
  def assign_uuid
@@ -235,7 +226,7 @@ class Asset < ActiveRecord::Base
235
226
 
236
227
  # this is a convenience for image-pickers
237
228
  def self.thumbnail_options
238
- asset_sizes = thumbnail_sizes.collect do |k, v|
229
+ asset_sizes = thumbnail_sizes.map do |k, v|
239
230
  size_id = k
240
231
  size_description = "#{k}: "
241
232
  size_description << (v.is_a?(Array) ? v.join(' as ') : v)
@@ -104,6 +104,10 @@ class AssetType
104
104
  @paperclip_styles
105
105
  end
106
106
 
107
+ def active_storage_styles
108
+ @active_storage_styles ||= normalize_style_rules(configured_styles.merge(styles))
109
+ end
110
+
107
111
  # Takes a motley collection of differently-defined styles and renders them into the standard hash-of-hashes format.
108
112
  # Solitary strings are assumed to be #
109
113
  def normalize_style_rules(styles = {})
@@ -173,8 +177,8 @@ class AssetType
173
177
  # class methods
174
178
 
175
179
  def self.for(attachment)
176
- extension = File.extname(attachment.original_filename).sub(/^\.+/, '')
177
- from_extension(extension) || from_mimetype(attachment.instance_read(:content_type)) || catchall
180
+ extension = attachment.record.original_extension
181
+ from_extension(extension) || from_mimetype(attachment.content_type) || catchall
178
182
  end
179
183
 
180
184
  def self.from_extension(extension)
@@ -16,10 +16,12 @@
16
16
  = "#{t("clipped_extension.filename")}: #{@asset.asset_file_name unless @asset.new_record?}"
17
17
  %br
18
18
  %label.url
19
- = "#{t("clipped_extension.asset_url")}: #{image_path @asset.thumbnail unless @asset.new_record?}"
19
+ = "#{t("clipped_extension.asset_url")}: #{image_path @asset.asset.url unless @asset.new_record?}"
20
+ %br
21
+ %label.id
22
+ = "#{t("clipped_extension.asset_id")}: #{@asset.asset.id unless @asset.new_record?}"
20
23
  %p.asset
21
- - display_size = TrustyCms::config['assets.display_size'] || 'normal'
22
- = image_tag @asset.thumbnail(display_size.to_sym), :class => 'preview'
24
+ = image_tag @asset.thumbnail("normal"), :class => 'preview'
23
25
 
24
26
  = updated_stamp @asset
25
27
 
data/config/database.yml CHANGED
@@ -1,4 +1,4 @@
1
- test: &TEST
1
+ test:
2
2
  adapter: mysql2
3
3
  database: trusty_cms_test
4
- username:
4
+ username:
@@ -66,6 +66,7 @@ en:
66
66
  asset_page_attachment_note: 'Attached assets. These can be inserted with drag and drop or shown with the <code>&lt;r:assets:each /&gt;</code> tag.'
67
67
  asset_note: 'Attached assets. '
68
68
  asset_url: 'Asset URL'
69
+ asset_id: 'Asset ID'
69
70
  assets: 'Assets'
70
71
  assets_explanation: 'Assets and images can be uploaded and then attached or inserted into pages, snippets and layouts. Click on an asset name above to edit it or click <code>Remove</code> to delete it.'
71
72
  assets_title: 'Assets'
data/coverage/index.html CHANGED
@@ -14,7 +14,7 @@
14
14
  <img src="./assets/0.12.3/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" class="hide">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2021-03-03T13:17:38-05:00">2021-03-03T13:17:38-05:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2021-10-05T10:51:28-04:00">2021-10-05T10:51:28-04:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
@@ -0,0 +1,13 @@
1
+ require 'active_support'
2
+
3
+ class AssetType
4
+ def paperclip_processors
5
+ ActiveSupport::Deprecation.warn('Paperclip processors will be deprecated soon in favor of ActiveStorage.')
6
+
7
+ active_storage_styles
8
+ end
9
+
10
+ def paperclip_styles
11
+ ActiveSupport::Deprecation.warn('Paperclip styles will be deprecated soon in favor of ActiveStorage.')
12
+ end
13
+ end
data/lib/trusty_cms.rb CHANGED
@@ -2,6 +2,6 @@ TRUSTY_CMS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')) unle
2
2
 
3
3
  unless defined? TrustyCms::VERSION
4
4
  module TrustyCms
5
- VERSION = '4.3.4'.freeze
5
+ VERSION = '5.0.0'.freeze
6
6
  end
7
7
  end
@@ -2,29 +2,14 @@
2
2
 
3
3
  var isWindows = process.platform === 'win32';
4
4
 
5
- // Regex to split a windows path into three parts: [*, device, slash,
6
- // tail] windows-only
7
- var splitDeviceRe =
8
- /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
9
-
10
- // Regex to split the tail part of the above into [*, dir, basename, ext]
11
- var splitTailRe =
12
- /^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/;
5
+ // Regex to split a windows path into into [dir, root, basename, name, ext]
6
+ var splitWindowsRe =
7
+ /^(((?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?[\\\/]?)(?:[^\\\/]*[\\\/])*)((\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))[\\\/]*$/;
13
8
 
14
9
  var win32 = {};
15
10
 
16
- // Function to split a filename into [root, dir, basename, ext]
17
11
  function win32SplitPath(filename) {
18
- // Separate device+slash from tail
19
- var result = splitDeviceRe.exec(filename),
20
- device = (result[1] || '') + (result[2] || ''),
21
- tail = result[3] || '';
22
- // Split the tail into dir, basename and extension
23
- var result2 = splitTailRe.exec(tail),
24
- dir = result2[1],
25
- basename = result2[2],
26
- ext = result2[3];
27
- return [device, dir, basename, ext];
12
+ return splitWindowsRe.exec(filename).slice(1);
28
13
  }
29
14
 
30
15
  win32.parse = function(pathString) {
@@ -34,24 +19,24 @@ win32.parse = function(pathString) {
34
19
  );
35
20
  }
36
21
  var allParts = win32SplitPath(pathString);
37
- if (!allParts || allParts.length !== 4) {
22
+ if (!allParts || allParts.length !== 5) {
38
23
  throw new TypeError("Invalid path '" + pathString + "'");
39
24
  }
40
25
  return {
41
- root: allParts[0],
42
- dir: allParts[0] + allParts[1].slice(0, -1),
26
+ root: allParts[1],
27
+ dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0].slice(0, -1),
43
28
  base: allParts[2],
44
- ext: allParts[3],
45
- name: allParts[2].slice(0, allParts[2].length - allParts[3].length)
29
+ ext: allParts[4],
30
+ name: allParts[3]
46
31
  };
47
32
  };
48
33
 
49
34
 
50
35
 
51
- // Split a filename into [root, dir, basename, ext], unix version
36
+ // Split a filename into [dir, root, basename, name, ext], unix version
52
37
  // 'root' is just a slash, or nothing.
53
38
  var splitPathRe =
54
- /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
39
+ /^((\/?)(?:[^\/]*\/)*)((\.{1,2}|[^\/]+?|)(\.[^.\/]*|))[\/]*$/;
55
40
  var posix = {};
56
41
 
57
42
 
@@ -67,19 +52,16 @@ posix.parse = function(pathString) {
67
52
  );
68
53
  }
69
54
  var allParts = posixSplitPath(pathString);
70
- if (!allParts || allParts.length !== 4) {
55
+ if (!allParts || allParts.length !== 5) {
71
56
  throw new TypeError("Invalid path '" + pathString + "'");
72
57
  }
73
- allParts[1] = allParts[1] || '';
74
- allParts[2] = allParts[2] || '';
75
- allParts[3] = allParts[3] || '';
76
-
58
+
77
59
  return {
78
- root: allParts[0],
79
- dir: allParts[0] + allParts[1].slice(0, -1),
60
+ root: allParts[1],
61
+ dir: allParts[0].slice(0, -1),
80
62
  base: allParts[2],
81
- ext: allParts[3],
82
- name: allParts[2].slice(0, allParts[2].length - allParts[3].length)
63
+ ext: allParts[4],
64
+ name: allParts[3],
83
65
  };
84
66
  };
85
67
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "path-parse",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Node.js path.parse() ponyfill",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,6 +1,33 @@
1
1
  # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
+ ## 7.0.36
5
+ * Backport ReDoS vulnerabilities from PostCSS 8.
6
+
7
+ ## 7.0.35
8
+ * Add migration guide link to PostCSS 8 error text.
9
+
10
+ ## 7.0.34
11
+ * Fix compatibility with `postcss-scss` 2.
12
+
13
+ ## 7.0.33
14
+ * Add error message for PostCSS 8 plugins.
15
+
16
+ ## 7.0.32
17
+ * Fix error message (by @admosity).
18
+
19
+ ## 7.0.31
20
+ * Use only the latest source map annotation (by Emmanouil Zoumpoulakis).
21
+
22
+ ## 7.0.30
23
+ * Fix TypeScript definition (by Natalie Weizenbaum).
24
+
25
+ ## 7.0.29
26
+ * Update `Processor#version`.
27
+
28
+ ## 7.0.28
29
+ * Fix TypeScript definition (by Natalie Weizenbaum).
30
+
4
31
  ## 7.0.27
5
32
  * Fix TypeScript definition (by Natalie Weizenbaum).
6
33
 
@@ -39,6 +39,16 @@ at <surrender@evilmartians.com>.
39
39
  alt="Sponsored by Evil Martians" width="236" height="54">
40
40
  </a>
41
41
 
42
+ ## Sponsorship
43
+
44
+ PostCSS needs your support. We are accepting donations
45
+ [at Open Collective](https://opencollective.com/postcss/).
46
+
47
+ <a href="https://tailwindcss.com/">
48
+ <img src="https://refactoringui.nyc3.cdn.digitaloceanspaces.com/tailwind-logo.svg"
49
+ alt="Sponsored by Tailwind CSS" width="273" height="64">
50
+ </a>
51
+
42
52
  ## Plugins
43
53
 
44
54
  Currently, PostCSS has more than 200 plugins. You can find all of the plugins
@@ -468,3 +478,14 @@ To report a security vulnerability, please use the [Tidelift security contact].
468
478
  Tidelift will coordinate the fix and disclosure.
469
479
 
470
480
  [Tidelift security contact]: https://tidelift.com/security
481
+
482
+
483
+ ## For Enterprise
484
+
485
+ Available as part of the Tidelift Subscription.
486
+
487
+ The maintainers of `postcss` and thousands of other packages are working
488
+ with Tidelift to deliver commercial support and maintenance for the open source
489
+ dependencies you use to build your applications. Save time, reduce risk,
490
+ and improve code health, while paying the maintainers of the exact dependencies
491
+ you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-postcss?utm_source=npm-postcss&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
@@ -27,9 +27,7 @@ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.crea
27
27
  * const media = root.last
28
28
  * media.nodes //=> []
29
29
  */
30
- var AtRule =
31
- /*#__PURE__*/
32
- function (_Container) {
30
+ var AtRule = /*#__PURE__*/function (_Container) {
33
31
  _inheritsLoose(AtRule, _Container);
34
32
 
35
33
  function AtRule(defaults) {
@@ -126,4 +124,4 @@ function (_Container) {
126
124
  var _default = AtRule;
127
125
  exports.default = _default;
128
126
  module.exports = exports.default;
129
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0LXJ1bGUuZXM2Il0sIm5hbWVzIjpbIkF0UnVsZSIsImRlZmF1bHRzIiwidHlwZSIsImFwcGVuZCIsIm5vZGVzIiwiY2hpbGRyZW4iLCJwcmVwZW5kIiwiQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0JNQSxNOzs7OztBQUNKLGtCQUFhQyxRQUFiLEVBQXVCO0FBQUE7O0FBQ3JCLGtDQUFNQSxRQUFOO0FBQ0EsVUFBS0MsSUFBTCxHQUFZLFFBQVo7QUFGcUI7QUFHdEI7Ozs7U0FFREMsTSxHQUFBLGtCQUFxQjtBQUFBOztBQUNuQixRQUFJLENBQUMsS0FBS0MsS0FBVixFQUFpQixLQUFLQSxLQUFMLEdBQWEsRUFBYjs7QUFERSxzQ0FBVkMsUUFBVTtBQUFWQSxNQUFBQSxRQUFVO0FBQUE7O0FBRW5CLHlEQUFhRixNQUFiLGtEQUF1QkUsUUFBdkI7QUFDRCxHOztTQUVEQyxPLEdBQUEsbUJBQXNCO0FBQUE7O0FBQ3BCLFFBQUksQ0FBQyxLQUFLRixLQUFWLEVBQWlCLEtBQUtBLEtBQUwsR0FBYSxFQUFiOztBQURHLHVDQUFWQyxRQUFVO0FBQVZBLE1BQUFBLFFBQVU7QUFBQTs7QUFFcEIsMERBQWFDLE9BQWIsbURBQXdCRCxRQUF4QjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7O0FBWUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF0Q21CRSxrQjs7ZUF1RU5QLE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGFpbmVyIGZyb20gJy4vY29udGFpbmVyJ1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gYXQtcnVsZS5cbiAqXG4gKiBJZiBpdOKAmXMgZm9sbG93ZWQgaW4gdGhlIENTUyBieSBhIHt9IGJsb2NrLCB0aGlzIG5vZGUgd2lsbCBoYXZlXG4gKiBhIG5vZGVzIHByb3BlcnR5IHJlcHJlc2VudGluZyBpdHMgY2hpbGRyZW4uXG4gKlxuICogQGV4dGVuZHMgQ29udGFpbmVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdAY2hhcnNldCBcIlVURi04XCI7IEBtZWRpYSBwcmludCB7fScpXG4gKlxuICogY29uc3QgY2hhcnNldCA9IHJvb3QuZmlyc3RcbiAqIGNoYXJzZXQudHlwZSAgLy89PiAnYXRydWxlJ1xuICogY2hhcnNldC5ub2RlcyAvLz0+IHVuZGVmaW5lZFxuICpcbiAqIGNvbnN0IG1lZGlhID0gcm9vdC5sYXN0XG4gKiBtZWRpYS5ub2RlcyAgIC8vPT4gW11cbiAqL1xuY2xhc3MgQXRSdWxlIGV4dGVuZHMgQ29udGFpbmVyIHtcbiAgY29uc3RydWN0b3IgKGRlZmF1bHRzKSB7XG4gICAgc3VwZXIoZGVmYXVsdHMpXG4gICAgdGhpcy50eXBlID0gJ2F0cnVsZSdcbiAgfVxuXG4gIGFwcGVuZCAoLi4uY2hpbGRyZW4pIHtcbiAgICBpZiAoIXRoaXMubm9kZXMpIHRoaXMubm9kZXMgPSBbXVxuICAgIHJldHVybiBzdXBlci5hcHBlbmQoLi4uY2hpbGRyZW4pXG4gIH1cblxuICBwcmVwZW5kICguLi5jaGlsZHJlbikge1xuICAgIGlmICghdGhpcy5ub2RlcykgdGhpcy5ub2RlcyA9IFtdXG4gICAgcmV0dXJuIHN1cGVyLnByZXBlbmQoLi4uY2hpbGRyZW4pXG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIEF0UnVsZSNcbiAgICogQG1lbWJlciB7c3RyaW5nfSBuYW1lIFRoZSBhdC1ydWxl4oCZcyBuYW1lIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGBAYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9vdCAgPSBwb3N0Y3NzLnBhcnNlKCdAbWVkaWEgcHJpbnQge30nKVxuICAgKiBtZWRpYS5uYW1lIC8vPT4gJ21lZGlhJ1xuICAgKiBjb25zdCBtZWRpYSA9IHJvb3QuZmlyc3RcbiAgICovXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBBdFJ1bGUjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gcGFyYW1zIFRoZSBhdC1ydWxl4oCZcyBwYXJhbWV0ZXJzLCB0aGUgdmFsdWVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZm9sbG93IHRoZSBhdC1ydWxl4oCZcyBuYW1lIGJ1dCBwcmVjZWRlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFueSB7fSBibG9jay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9vdCAgPSBwb3N0Y3NzLnBhcnNlKCdAbWVkaWEgcHJpbnQsIHNjcmVlbiB7fScpXG4gICAqIGNvbnN0IG1lZGlhID0gcm9vdC5maXJzdFxuICAgKiBtZWRpYS5wYXJhbXMgLy89PiAncHJpbnQsIHNjcmVlbidcbiAgICovXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBBdFJ1bGUjXG4gICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICpcbiAgICogRXZlcnkgcGFyc2VyIHNhdmVzIGl0cyBvd24gcHJvcGVydGllcyxcbiAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICpcbiAgICogKiBgYmVmb3JlYDogdGhlIHNwYWNlIHN5bWJvbHMgYmVmb3JlIHRoZSBub2RlLiBJdCBhbHNvIHN0b3JlcyBgKmBcbiAgICogICBhbmQgYF9gIHN5bWJvbHMgYmVmb3JlIHRoZSBkZWNsYXJhdGlvbiAoSUUgaGFjaykuXG4gICAqICogYGFmdGVyYDogdGhlIHNwYWNlIHN5bWJvbHMgYWZ0ZXIgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIG5vZGVcbiAgICogICB0byB0aGUgZW5kIG9mIHRoZSBub2RlLlxuICAgKiAqIGBiZXR3ZWVuYDogdGhlIHN5bWJvbHMgYmV0d2VlbiB0aGUgcHJvcGVydHkgYW5kIHZhbHVlXG4gICAqICAgZm9yIGRlY2xhcmF0aW9ucywgc2VsZWN0b3IgYW5kIGB7YCBmb3IgcnVsZXMsIG9yIGxhc3QgcGFyYW1ldGVyXG4gICAqICAgYW5kIGB7YCBmb3IgYXQtcnVsZXMuXG4gICAqICogYHNlbWljb2xvbmA6IGNvbnRhaW5zIHRydWUgaWYgdGhlIGxhc3QgY2hpbGQgaGFzXG4gICAqICAgYW4gKG9wdGlvbmFsKSBzZW1pY29sb24uXG4gICAqICogYGFmdGVyTmFtZWA6IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBhdC1ydWxlIG5hbWUgYW5kIGl0cyBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBQb3N0Q1NTIGNsZWFucyBhdC1ydWxlIHBhcmFtZXRlcnMgZnJvbSBjb21tZW50cyBhbmQgZXh0cmEgc3BhY2VzLFxuICAgKiBidXQgaXQgc3RvcmVzIG9yaWdpbiBjb250ZW50IGluIHJhd3MgcHJvcGVydGllcy5cbiAgICogQXMgc3VjaCwgaWYgeW91IGRvbuKAmXQgY2hhbmdlIGEgZGVjbGFyYXRpb27igJlzIHZhbHVlLFxuICAgKiBQb3N0Q1NTIHdpbGwgdXNlIHRoZSByYXcgdmFsdWUgd2l0aCBjb21tZW50cy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJyAgQG1lZGlhXFxucHJpbnQge1xcbn0nKVxuICAgKiByb290LmZpcnN0LmZpcnN0LnJhd3MgLy89PiB7IGJlZm9yZTogJyAgJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBiZXR3ZWVuOiAnICcsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYWZ0ZXJOYW1lOiAnXFxuJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBhZnRlcjogJ1xcbicgfVxuICAgKi9cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXRSdWxlXG4iXSwiZmlsZSI6ImF0LXJ1bGUuanMifQ==
127
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0LXJ1bGUuZXM2Il0sIm5hbWVzIjpbIkF0UnVsZSIsImRlZmF1bHRzIiwidHlwZSIsImFwcGVuZCIsIm5vZGVzIiwiY2hpbGRyZW4iLCJwcmVwZW5kIiwiQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0JNQSxNOzs7QUFDSixrQkFBYUMsUUFBYixFQUF1QjtBQUFBOztBQUNyQixrQ0FBTUEsUUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxRQUFaO0FBRnFCO0FBR3RCOzs7O1NBRURDLE0sR0FBQSxrQkFBcUI7QUFBQTs7QUFDbkIsUUFBSSxDQUFDLEtBQUtDLEtBQVYsRUFBaUIsS0FBS0EsS0FBTCxHQUFhLEVBQWI7O0FBREUsc0NBQVZDLFFBQVU7QUFBVkEsTUFBQUEsUUFBVTtBQUFBOztBQUVuQix5REFBYUYsTUFBYixrREFBdUJFLFFBQXZCO0FBQ0QsRzs7U0FFREMsTyxHQUFBLG1CQUFzQjtBQUFBOztBQUNwQixRQUFJLENBQUMsS0FBS0YsS0FBVixFQUFpQixLQUFLQSxLQUFMLEdBQWEsRUFBYjs7QUFERyx1Q0FBVkMsUUFBVTtBQUFWQSxNQUFBQSxRQUFVO0FBQUE7O0FBRXBCLDBEQUFhQyxPQUFiLG1EQUF3QkQsUUFBeEI7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVUE7Ozs7Ozs7Ozs7OztBQVlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdENtQkUsa0I7O2VBdUVOUCxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRhaW5lciBmcm9tICcuL2NvbnRhaW5lcidcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGF0LXJ1bGUuXG4gKlxuICogSWYgaXTigJlzIGZvbGxvd2VkIGluIHRoZSBDU1MgYnkgYSB7fSBibG9jaywgdGhpcyBub2RlIHdpbGwgaGF2ZVxuICogYSBub2RlcyBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaXRzIGNoaWxkcmVuLlxuICpcbiAqIEBleHRlbmRzIENvbnRhaW5lclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnQGNoYXJzZXQgXCJVVEYtOFwiOyBAbWVkaWEgcHJpbnQge30nKVxuICpcbiAqIGNvbnN0IGNoYXJzZXQgPSByb290LmZpcnN0XG4gKiBjaGFyc2V0LnR5cGUgIC8vPT4gJ2F0cnVsZSdcbiAqIGNoYXJzZXQubm9kZXMgLy89PiB1bmRlZmluZWRcbiAqXG4gKiBjb25zdCBtZWRpYSA9IHJvb3QubGFzdFxuICogbWVkaWEubm9kZXMgICAvLz0+IFtdXG4gKi9cbmNsYXNzIEF0UnVsZSBleHRlbmRzIENvbnRhaW5lciB7XG4gIGNvbnN0cnVjdG9yIChkZWZhdWx0cykge1xuICAgIHN1cGVyKGRlZmF1bHRzKVxuICAgIHRoaXMudHlwZSA9ICdhdHJ1bGUnXG4gIH1cblxuICBhcHBlbmQgKC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0aGlzLm5vZGVzKSB0aGlzLm5vZGVzID0gW11cbiAgICByZXR1cm4gc3VwZXIuYXBwZW5kKC4uLmNoaWxkcmVuKVxuICB9XG5cbiAgcHJlcGVuZCAoLi4uY2hpbGRyZW4pIHtcbiAgICBpZiAoIXRoaXMubm9kZXMpIHRoaXMubm9kZXMgPSBbXVxuICAgIHJldHVybiBzdXBlci5wcmVwZW5kKC4uLmNoaWxkcmVuKVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBBdFJ1bGUjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gbmFtZSBUaGUgYXQtcnVsZeKAmXMgbmFtZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBgQGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgID0gcG9zdGNzcy5wYXJzZSgnQG1lZGlhIHByaW50IHt9JylcbiAgICogbWVkaWEubmFtZSAvLz0+ICdtZWRpYSdcbiAgICogY29uc3QgbWVkaWEgPSByb290LmZpcnN0XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgQXRSdWxlI1xuICAgKiBAbWVtYmVyIHtzdHJpbmd9IHBhcmFtcyBUaGUgYXQtcnVsZeKAmXMgcGFyYW1ldGVycywgdGhlIHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGZvbGxvdyB0aGUgYXQtcnVsZeKAmXMgbmFtZSBidXQgcHJlY2VkZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbnkge30gYmxvY2suXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgID0gcG9zdGNzcy5wYXJzZSgnQG1lZGlhIHByaW50LCBzY3JlZW4ge30nKVxuICAgKiBjb25zdCBtZWRpYSA9IHJvb3QuZmlyc3RcbiAgICogbWVkaWEucGFyYW1zIC8vPT4gJ3ByaW50LCBzY3JlZW4nXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgQXRSdWxlI1xuICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSBzdHJpbmcgYXMgaXQgd2FzIGluIHRoZSBvcmlnaW4gaW5wdXQuXG4gICAqXG4gICAqIEV2ZXJ5IHBhcnNlciBzYXZlcyBpdHMgb3duIHByb3BlcnRpZXMsXG4gICAqIGJ1dCB0aGUgZGVmYXVsdCBDU1MgcGFyc2VyIHVzZXM6XG4gICAqXG4gICAqICogYGJlZm9yZWA6IHRoZSBzcGFjZSBzeW1ib2xzIGJlZm9yZSB0aGUgbm9kZS4gSXQgYWxzbyBzdG9yZXMgYCpgXG4gICAqICAgYW5kIGBfYCBzeW1ib2xzIGJlZm9yZSB0aGUgZGVjbGFyYXRpb24gKElFIGhhY2spLlxuICAgKiAqIGBhZnRlcmA6IHRoZSBzcGFjZSBzeW1ib2xzIGFmdGVyIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBub2RlXG4gICAqICAgdG8gdGhlIGVuZCBvZiB0aGUgbm9kZS5cbiAgICogKiBgYmV0d2VlbmA6IHRoZSBzeW1ib2xzIGJldHdlZW4gdGhlIHByb3BlcnR5IGFuZCB2YWx1ZVxuICAgKiAgIGZvciBkZWNsYXJhdGlvbnMsIHNlbGVjdG9yIGFuZCBge2AgZm9yIHJ1bGVzLCBvciBsYXN0IHBhcmFtZXRlclxuICAgKiAgIGFuZCBge2AgZm9yIGF0LXJ1bGVzLlxuICAgKiAqIGBzZW1pY29sb25gOiBjb250YWlucyB0cnVlIGlmIHRoZSBsYXN0IGNoaWxkIGhhc1xuICAgKiAgIGFuIChvcHRpb25hbCkgc2VtaWNvbG9uLlxuICAgKiAqIGBhZnRlck5hbWVgOiB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYXQtcnVsZSBuYW1lIGFuZCBpdHMgcGFyYW1ldGVycy5cbiAgICpcbiAgICogUG9zdENTUyBjbGVhbnMgYXQtcnVsZSBwYXJhbWV0ZXJzIGZyb20gY29tbWVudHMgYW5kIGV4dHJhIHNwYWNlcyxcbiAgICogYnV0IGl0IHN0b3JlcyBvcmlnaW4gY29udGVudCBpbiByYXdzIHByb3BlcnRpZXMuXG4gICAqIEFzIHN1Y2gsIGlmIHlvdSBkb27igJl0IGNoYW5nZSBhIGRlY2xhcmF0aW9u4oCZcyB2YWx1ZSxcbiAgICogUG9zdENTUyB3aWxsIHVzZSB0aGUgcmF3IHZhbHVlIHdpdGggY29tbWVudHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCcgIEBtZWRpYVxcbnByaW50IHtcXG59JylcbiAgICogcm9vdC5maXJzdC5maXJzdC5yYXdzIC8vPT4geyBiZWZvcmU6ICcgICcsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYmV0d2VlbjogJyAnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFmdGVyTmFtZTogJ1xcbicsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgYWZ0ZXI6ICdcXG4nIH1cbiAgICovXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0UnVsZVxuIl0sImZpbGUiOiJhdC1ydWxlLmpzIn0=
@@ -17,9 +17,7 @@ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.crea
17
17
  *
18
18
  * @extends Node
19
19
  */
20
- var Comment =
21
- /*#__PURE__*/
22
- function (_Node) {
20
+ var Comment = /*#__PURE__*/function (_Node) {
23
21
  _inheritsLoose(Comment, _Node);
24
22
 
25
23
  function Comment(defaults) {
@@ -54,4 +52,4 @@ function (_Node) {
54
52
  var _default = Comment;
55
53
  exports.default = _default;
56
54
  module.exports = exports.default;
57
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1lbnQuZXM2Il0sIm5hbWVzIjpbIkNvbW1lbnQiLCJkZWZhdWx0cyIsInR5cGUiLCJOb2RlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFQTs7Ozs7Ozs7SUFRTUEsTzs7Ozs7QUFDSixtQkFBYUMsUUFBYixFQUF1QjtBQUFBOztBQUNyQiw2QkFBTUEsUUFBTjtBQUNBLFVBQUtDLElBQUwsR0FBWSxTQUFaO0FBRnFCO0FBR3RCO0FBRUQ7Ozs7O0FBS0E7Ozs7Ozs7Ozs7Ozs7OztFQVhvQkMsYTs7ZUF5QlBILE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTm9kZSBmcm9tICcuL25vZGUnXG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbW1lbnQgYmV0d2VlbiBkZWNsYXJhdGlvbnMgb3Igc3RhdGVtZW50cyAocnVsZSBhbmQgYXQtcnVsZXMpLlxuICpcbiAqIENvbW1lbnRzIGluc2lkZSBzZWxlY3RvcnMsIGF0LXJ1bGUgcGFyYW1ldGVycywgb3IgZGVjbGFyYXRpb24gdmFsdWVzXG4gKiB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYHJhd3NgIHByb3BlcnRpZXMgZXhwbGFpbmVkIGFib3ZlLlxuICpcbiAqIEBleHRlbmRzIE5vZGVcbiAqL1xuY2xhc3MgQ29tbWVudCBleHRlbmRzIE5vZGUge1xuICBjb25zdHJ1Y3RvciAoZGVmYXVsdHMpIHtcbiAgICBzdXBlcihkZWZhdWx0cylcbiAgICB0aGlzLnR5cGUgPSAnY29tbWVudCdcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgQ29tbWVudCNcbiAgICogQG1lbWJlciB7c3RyaW5nfSB0ZXh0IFRoZSBjb21tZW504oCZcyB0ZXh0LlxuICAgKi9cblxuICAvKipcbiAgICogQG1lbWJlcm9mIENvbW1lbnQjXG4gICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIG5vZGUgc3RyaW5nIGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luIGlucHV0LlxuICAgKlxuICAgKiBFdmVyeSBwYXJzZXIgc2F2ZXMgaXRzIG93biBwcm9wZXJ0aWVzLFxuICAgKiBidXQgdGhlIGRlZmF1bHQgQ1NTIHBhcnNlciB1c2VzOlxuICAgKlxuICAgKiAqIGBiZWZvcmVgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZWZvcmUgdGhlIG5vZGUuXG4gICAqICogYGxlZnRgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZXR3ZWVuIGAvKmAgYW5kIHRoZSBjb21tZW504oCZcyB0ZXh0LlxuICAgKiAqIGByaWdodGA6IHRoZSBzcGFjZSBzeW1ib2xzIGJldHdlZW4gdGhlIGNvbW1lbnTigJlzIHRleHQuXG4gICAqL1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tZW50XG4iXSwiZmlsZSI6ImNvbW1lbnQuanMifQ==
55
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1lbnQuZXM2Il0sIm5hbWVzIjpbIkNvbW1lbnQiLCJkZWZhdWx0cyIsInR5cGUiLCJOb2RlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7QUFFQTs7Ozs7Ozs7SUFRTUEsTzs7O0FBQ0osbUJBQWFDLFFBQWIsRUFBdUI7QUFBQTs7QUFDckIsNkJBQU1BLFFBQU47QUFDQSxVQUFLQyxJQUFMLEdBQVksU0FBWjtBQUZxQjtBQUd0QjtBQUVEOzs7OztBQUtBOzs7Ozs7Ozs7Ozs7Ozs7RUFYb0JDLGE7O2VBeUJQSCxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE5vZGUgZnJvbSAnLi9ub2RlJ1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb21tZW50IGJldHdlZW4gZGVjbGFyYXRpb25zIG9yIHN0YXRlbWVudHMgKHJ1bGUgYW5kIGF0LXJ1bGVzKS5cbiAqXG4gKiBDb21tZW50cyBpbnNpZGUgc2VsZWN0b3JzLCBhdC1ydWxlIHBhcmFtZXRlcnMsIG9yIGRlY2xhcmF0aW9uIHZhbHVlc1xuICogd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGByYXdzYCBwcm9wZXJ0aWVzIGV4cGxhaW5lZCBhYm92ZS5cbiAqXG4gKiBAZXh0ZW5kcyBOb2RlXG4gKi9cbmNsYXNzIENvbW1lbnQgZXh0ZW5kcyBOb2RlIHtcbiAgY29uc3RydWN0b3IgKGRlZmF1bHRzKSB7XG4gICAgc3VwZXIoZGVmYXVsdHMpXG4gICAgdGhpcy50eXBlID0gJ2NvbW1lbnQnXG4gIH1cblxuICAvKipcbiAgICogQG1lbWJlcm9mIENvbW1lbnQjXG4gICAqIEBtZW1iZXIge3N0cmluZ30gdGV4dCBUaGUgY29tbWVudOKAmXMgdGV4dC5cbiAgICovXG5cbiAgLyoqXG4gICAqIEBtZW1iZXJvZiBDb21tZW50I1xuICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICpcbiAgICogRXZlcnkgcGFyc2VyIHNhdmVzIGl0cyBvd24gcHJvcGVydGllcyxcbiAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICpcbiAgICogKiBgYmVmb3JlYDogdGhlIHNwYWNlIHN5bWJvbHMgYmVmb3JlIHRoZSBub2RlLlxuICAgKiAqIGBsZWZ0YDogdGhlIHNwYWNlIHN5bWJvbHMgYmV0d2VlbiBgLypgIGFuZCB0aGUgY29tbWVudOKAmXMgdGV4dC5cbiAgICogKiBgcmlnaHRgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZXR3ZWVuIHRoZSBjb21tZW504oCZcyB0ZXh0LlxuICAgKi9cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVudFxuIl0sImZpbGUiOiJjb21tZW50LmpzIn0=