trusty-cms 4.3.4 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/Gemfile.lock +25 -15
  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: 066d3a148afc8e9cf41df8cf74277edf610a1fb0428332ca1430678b1e54b0f2
4
+ data.tar.gz: 7b6d84f5bb9225b1c9c42b7bf0bf0829c981817faf550a930126fe5651ef0063
5
5
  SHA512:
6
- metadata.gz: 183ae49c67949d369571917398832d9c63dcb51f0520d7442a3d6b758a53b1203f48f47830adaad6e5b86c169c85ce52886326340ace30e42d3908b6a4657e86
7
- data.tar.gz: e225962bf0b3905215bdcbbb4d31393d57e4d5312b25e153b5413787507d5f2e1d10a2592d1adb47b822ceec9d7315e0a906c091f62c9fd67f52b3dba2ebfd45
6
+ metadata.gz: 87e8b1b1a4fcc3c3a8e83157052a8c95c6673fbdecf9e51f280016f9d61375149410cd14746cffd0c7b809fcdd74459c48595ab59bef5ed5c8989316be241207
7
+ data.tar.gz: f34ec3a815c86344e92963d7da50ebef35b62505ebd97fc9652b5d8d61b6c9261b453501bdecfca48f88ee099f2910bd1f6370316a558f64eec96f5d31e0d6da
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.2)
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)
169
- json (2.5.1)
176
+ image_processing (1.12.1)
177
+ mini_magick (>= 4.9.5, < 5)
178
+ ruby-vips (>= 2.0.17, < 3)
179
+ json (2.6.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)
@@ -200,9 +206,9 @@ GEM
200
206
  multipart-post (2.1.1)
201
207
  mysql2 (0.5.3)
202
208
  nio4r (2.5.8)
203
- nokogiri (1.12.4-x86_64-darwin)
209
+ nokogiri (1.12.5-x86_64-darwin)
204
210
  racc (~> 1.4)
205
- nokogiri (1.12.4-x86_64-linux)
211
+ nokogiri (1.12.5-x86_64-linux)
206
212
  racc (~> 1.4)
207
213
  orm_adapter (0.5.0)
208
214
  poltergeist (1.18.1)
@@ -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.to_s
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.2'.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=