rubyfox-server 2.13.5.1 → 2.16.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (572) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rubyfox/server/data/config/UploadsLock.txt +3 -0
  3. data/lib/rubyfox/server/data/config/admin/admintool.xml +2 -0
  4. data/lib/rubyfox/server/data/config/admin/descriptors/config_room.txt +97 -43
  5. data/lib/rubyfox/server/data/config/admin/descriptors/config_server.txt +307 -93
  6. data/lib/rubyfox/server/data/config/admin/descriptors/config_zone.txt +311 -95
  7. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_game.txt +5 -5
  8. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_mmo.txt +6 -6
  9. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_room.txt +69 -44
  10. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_user.txt +55 -43
  11. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_zone.txt +81 -36
  12. data/lib/rubyfox/server/data/config/admin/gmc/gmc.py +55 -18
  13. data/lib/rubyfox/server/data/config/admin/icons/Analytics.png +0 -0
  14. data/lib/rubyfox/server/data/config/admin/icons/Analytics.svg +1 -0
  15. data/lib/rubyfox/server/data/config/admin/icons/BanManager.png +0 -0
  16. data/lib/rubyfox/server/data/config/admin/icons/BanManager.svg +1 -0
  17. data/lib/rubyfox/server/data/config/admin/icons/BlueBoxMonitor.png +0 -0
  18. data/lib/rubyfox/server/data/config/admin/icons/BlueBoxMonitor.svg +1 -0
  19. data/lib/rubyfox/server/data/config/admin/icons/Console.png +0 -0
  20. data/lib/rubyfox/server/data/config/admin/icons/Console.svg +9 -0
  21. data/lib/rubyfox/server/data/config/admin/icons/Dashboard.png +0 -0
  22. data/lib/rubyfox/server/data/config/admin/icons/Dashboard.svg +1 -0
  23. data/lib/rubyfox/server/data/config/admin/icons/ExtensionManager.png +0 -0
  24. data/lib/rubyfox/server/data/config/admin/icons/ExtensionManager.svg +1 -0
  25. data/lib/rubyfox/server/data/config/admin/icons/LicenseManager.png +0 -0
  26. data/lib/rubyfox/server/data/config/admin/icons/LicenseManager.svg +1 -0
  27. data/lib/rubyfox/server/data/config/admin/icons/LogViewer.png +0 -0
  28. data/lib/rubyfox/server/data/config/admin/icons/LogViewer.svg +1 -0
  29. data/lib/rubyfox/server/data/config/admin/icons/ServerConfigurator.png +0 -0
  30. data/lib/rubyfox/server/data/config/admin/icons/ServerConfigurator.svg +1 -0
  31. data/lib/rubyfox/server/data/config/admin/icons/ServletManager.png +0 -0
  32. data/lib/rubyfox/server/data/config/admin/icons/ServletManager.svg +1 -0
  33. data/lib/rubyfox/server/data/config/admin/icons/ZoneConfigurator.png +0 -0
  34. data/lib/rubyfox/server/data/config/admin/icons/ZoneConfigurator.svg +1 -0
  35. data/lib/rubyfox/server/data/config/admin/icons/ZoneMonitor.png +0 -0
  36. data/lib/rubyfox/server/data/config/admin/icons/ZoneMonitor.svg +1 -0
  37. data/lib/rubyfox/server/data/config/core.xml +2 -2
  38. data/lib/rubyfox/server/data/config/log4j.properties +7 -7
  39. data/lib/rubyfox/server/data/config/server.xml +9 -10
  40. data/lib/rubyfox/server/data/config/wordsFile.txt +0 -2
  41. data/lib/rubyfox/server/data/data/GeoLite2-Country.mmdb +0 -0
  42. data/lib/rubyfox/server/data/{config → data/buddylists/BasicExamples}/.keep +0 -0
  43. data/lib/rubyfox/server/data/data/{buddylists → uploads}/.keep +0 -0
  44. data/lib/rubyfox/server/data/lib/BlueBox.war +0 -0
  45. data/lib/rubyfox/server/data/lib/apache-tomcat/LICENSE +1061 -0
  46. data/lib/rubyfox/server/data/lib/apache-tomcat/NOTICE +68 -0
  47. data/lib/rubyfox/server/data/lib/apache-tomcat/README.md +79 -0
  48. data/lib/rubyfox/server/data/lib/apache-tomcat/RELEASE-NOTES +174 -0
  49. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/bootstrap.jar +0 -0
  50. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/catalina-tasks.xml +39 -0
  51. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/catalina.bat +386 -0
  52. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/catalina.sh +689 -0
  53. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/ciphers.bat +58 -0
  54. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/ciphers.sh +60 -0
  55. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/commons-daemon-native.tar.gz +0 -0
  56. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/commons-daemon.jar +0 -0
  57. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/configtest.bat +58 -0
  58. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/configtest.sh +60 -0
  59. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/daemon.sh +293 -0
  60. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/digest.bat +58 -0
  61. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/digest.sh +60 -0
  62. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/makebase.bat +114 -0
  63. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/makebase.sh +115 -0
  64. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/setclasspath.bat +94 -0
  65. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/setclasspath.sh +98 -0
  66. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/shutdown.bat +58 -0
  67. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/shutdown.sh +60 -0
  68. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/startup.bat +58 -0
  69. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/startup.sh +60 -0
  70. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tomcat-juli.jar +0 -0
  71. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tomcat-native.tar.gz +0 -0
  72. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tool-wrapper.bat +110 -0
  73. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tool-wrapper.sh +153 -0
  74. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/version.bat +58 -0
  75. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/version.sh +60 -0
  76. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/Catalina/localhost/rewrite.config +1 -0
  77. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/catalina.policy +260 -0
  78. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/catalina.properties +206 -0
  79. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/context.xml +31 -0
  80. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/jaspic-providers.xml +23 -0
  81. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/jaspic-providers.xsd +53 -0
  82. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/keystore.jks +0 -0
  83. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/logging.properties +79 -0
  84. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/server.xml +161 -0
  85. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/tomcat-users.xml +41 -0
  86. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/tomcat-users.xsd +59 -0
  87. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/web.xml +4733 -0
  88. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/annotations-api.jar +0 -0
  89. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-ant.jar +0 -0
  90. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-ha.jar +0 -0
  91. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-ssi.jar +0 -0
  92. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-storeconfig.jar +0 -0
  93. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-tribes.jar +0 -0
  94. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina.jar +0 -0
  95. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/ecj-4.15.jar +0 -0
  96. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/el-api.jar +0 -0
  97. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jasper-el.jar +0 -0
  98. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jasper.jar +0 -0
  99. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jaspic-api.jar +0 -0
  100. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jsp-api.jar +0 -0
  101. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/servlet-api.jar +0 -0
  102. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/sfs2x-ws-helper.jar +0 -0
  103. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-api.jar +0 -0
  104. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-coyote.jar +0 -0
  105. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-dbcp.jar +0 -0
  106. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-cs.jar +0 -0
  107. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-de.jar +0 -0
  108. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-es.jar +0 -0
  109. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-fr.jar +0 -0
  110. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-ja.jar +0 -0
  111. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-ko.jar +0 -0
  112. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-pt-BR.jar +0 -0
  113. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-ru.jar +0 -0
  114. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-zh-CN.jar +0 -0
  115. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-jdbc.jar +0 -0
  116. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-jni.jar +0 -0
  117. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-util-scan.jar +0 -0
  118. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-util.jar +0 -0
  119. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-websocket.jar +0 -0
  120. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/websocket-api.jar +0 -0
  121. data/lib/rubyfox/server/data/{extensions → lib/apache-tomcat/logs}/.keep +0 -0
  122. data/lib/rubyfox/server/data/lib/{jetty/lib/ext/.donotdelete → apache-tomcat/temp/safeToDelete.tmp} +0 -0
  123. data/lib/rubyfox/server/data/lib/{jetty/resources → apache-tomcat/work}/.keep +0 -0
  124. data/lib/rubyfox/server/data/lib/commons-collections-3.2.2.jar +0 -0
  125. data/lib/rubyfox/server/data/lib/commons-compress-1.19.jar +0 -0
  126. data/lib/rubyfox/server/data/lib/js/LibApi.js +48 -181
  127. data/lib/rubyfox/server/data/lib/sfs2x-admin.jar +0 -0
  128. data/lib/rubyfox/server/data/lib/sfs2x-core.jar +0 -0
  129. data/lib/rubyfox/server/data/lib/sfs2x-lib.jar +0 -0
  130. data/lib/rubyfox/server/data/lib/sfs2x-util.jar +0 -0
  131. data/lib/rubyfox/server/data/lib/sfs2x.jar +0 -0
  132. data/lib/rubyfox/server/data/sfs2x-service +6 -6
  133. data/lib/rubyfox/server/data/sfs2x-service.vmoptions +1 -1
  134. data/lib/rubyfox/server/data/sfs2x.sh +1 -1
  135. data/lib/rubyfox/server/data/www/BlueBox.war +0 -0
  136. data/lib/rubyfox/server/data/www/HelloServlet/index.jsp +1 -1
  137. data/lib/rubyfox/server/data/www/{root → ROOT}/_css_/default.css +0 -0
  138. data/lib/rubyfox/server/data/www/{root → ROOT}/_css_/reset.css +0 -0
  139. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/background_gradient.png +0 -0
  140. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/background_logo.png +0 -0
  141. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/favicon.png +0 -0
  142. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/logo_smartfoxserver.png +0 -0
  143. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/_changes-to-default-themes_.txt +15 -0
  144. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/bootstrap.min.css +7 -0
  145. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/custom-bootstrap.min.css +1 -0
  146. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/css/all.min.css +5 -0
  147. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.eot +0 -0
  148. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.svg +3459 -0
  149. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  150. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.woff +0 -0
  151. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  152. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.eot +0 -0
  153. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.svg +803 -0
  154. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  155. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.woff +0 -0
  156. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  157. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.eot +0 -0
  158. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.svg +4527 -0
  159. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  160. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.woff +0 -0
  161. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  162. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fonts.css +175 -0
  163. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/jquery.scrolling-tabs.min.css +8 -0
  164. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/kendo.custom-bootstrap-v4.css +15280 -0
  165. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/reset.css +54 -0
  166. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/style.css +1428 -0
  167. data/lib/rubyfox/server/data/www/ROOT/admin/assets/data/countries.geo.json +178 -0
  168. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.otf +0 -0
  169. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.ttf +0 -0
  170. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.woff +0 -0
  171. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.woff2 +0 -0
  172. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300.ttf +0 -0
  173. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300.woff +0 -0
  174. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300.woff2 +0 -0
  175. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300italic.ttf +0 -0
  176. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300italic.woff +0 -0
  177. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300italic.woff2 +0 -0
  178. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600.ttf +0 -0
  179. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600.woff +0 -0
  180. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600.woff2 +0 -0
  181. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600italic.ttf +0 -0
  182. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600italic.woff +0 -0
  183. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600italic.woff2 +0 -0
  184. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700.ttf +0 -0
  185. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700.woff +0 -0
  186. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700.woff2 +0 -0
  187. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700italic.ttf +0 -0
  188. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700italic.woff +0 -0
  189. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700italic.woff2 +0 -0
  190. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800.ttf +0 -0
  191. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800.woff +0 -0
  192. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800.woff2 +0 -0
  193. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800italic.ttf +0 -0
  194. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800italic.woff +0 -0
  195. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800italic.woff2 +0 -0
  196. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-italic.ttf +0 -0
  197. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-italic.woff +0 -0
  198. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-italic.woff2 +0 -0
  199. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-regular.ttf +0 -0
  200. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-regular.woff +0 -0
  201. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-regular.woff2 +0 -0
  202. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-300.ttf +0 -0
  203. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-300.woff +0 -0
  204. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-300.woff2 +0 -0
  205. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-700.ttf +0 -0
  206. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-700.woff +0 -0
  207. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-700.woff2 +0 -0
  208. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/compare.png +0 -0
  209. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsChart.png +0 -0
  210. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsCompare.png +0 -0
  211. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsFilter.png +0 -0
  212. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsMap.png +0 -0
  213. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsTable.png +0 -0
  214. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyChart.png +0 -0
  215. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyCompare.png +0 -0
  216. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyFilter.png +0 -0
  217. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyTable.png +0 -0
  218. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/apple-touch-icon-180x180.png +0 -0
  219. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/favicon-16x16.png +0 -0
  220. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/favicon-32x32.png +0 -0
  221. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/favicon-64x64.png +0 -0
  222. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/logo.png +0 -0
  223. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/application.bundle.js +2208 -0
  224. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-0.bundle.js +7662 -0
  225. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-1.bundle.js +929 -0
  226. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-10.bundle.js +766 -0
  227. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-11.bundle.js +71 -0
  228. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-12.bundle.js +1184 -0
  229. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-12~module-13~module-9.bundle.js +2618 -0
  230. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-13.bundle.js +3315 -0
  231. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-3.bundle.js +280 -0
  232. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-4.bundle.js +1122 -0
  233. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-5.bundle.js +2624 -0
  234. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-6.bundle.js +801 -0
  235. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-7.bundle.js +607 -0
  236. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-8.bundle.js +1221 -0
  237. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-9.bundle.js +847 -0
  238. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/vendors~module-0.bundle.js +3240 -0
  239. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/vendors~module-0~module-1~module-13~module-4~module-5~module-7~module-8.bundle.js +17357 -0
  240. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/vendors~module-9.bundle.js +807 -0
  241. data/lib/rubyfox/server/data/{lib/jetty/webapps → www/ROOT/admin/assets/js/custom-modules}/.keep +0 -0
  242. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/bootstrap.min.js +7 -0
  243. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/jquery-3.3.1.min.js +2 -0
  244. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/jquery.scrolling-tabs.min.js +8 -0
  245. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/js.cookie.min.js +8 -0
  246. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/kendo.all.min.js +136 -0
  247. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/popper.min.js +5 -0
  248. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/sfs2x-api-1.7.15.js +8 -0
  249. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/versions-readme.txt +16 -0
  250. data/lib/rubyfox/server/data/www/ROOT/admin/index.html +244 -0
  251. data/lib/rubyfox/server/data/www/ROOT/admin/manifest.json +25 -0
  252. data/lib/rubyfox/server/data/www/ROOT/admin/modules/analytics.html +328 -0
  253. data/lib/rubyfox/server/data/www/ROOT/admin/modules/ban-manager.html +160 -0
  254. data/lib/rubyfox/server/data/www/ROOT/admin/modules/blue-box-monitor.html +37 -0
  255. data/lib/rubyfox/server/data/www/ROOT/admin/modules/console.html +135 -0
  256. data/lib/rubyfox/server/data/www/ROOT/admin/modules/dashboard.html +368 -0
  257. data/lib/rubyfox/server/data/www/ROOT/admin/modules/extension-manager.html +98 -0
  258. data/lib/rubyfox/server/data/www/ROOT/admin/modules/license-manager.html +117 -0
  259. data/lib/rubyfox/server/data/www/ROOT/admin/modules/log-viewer.html +194 -0
  260. data/lib/rubyfox/server/data/www/ROOT/admin/modules/server-configurator.html +55 -0
  261. data/lib/rubyfox/server/data/www/ROOT/admin/modules/servlet-manager.html +98 -0
  262. data/lib/rubyfox/server/data/www/ROOT/admin/modules/zone-configurator.html +62 -0
  263. data/lib/rubyfox/server/data/www/ROOT/admin/modules/zone-monitor.html +346 -0
  264. data/lib/rubyfox/server/data/www/{root → ROOT}/crossdomain.xml +0 -0
  265. data/lib/rubyfox/server/data/www/{root → ROOT}/examples/index.html +0 -0
  266. data/lib/rubyfox/server/data/www/{root → ROOT}/favicon.ico +0 -0
  267. data/lib/rubyfox/server/data/www/{root → ROOT}/favicon.png +0 -0
  268. data/lib/rubyfox/server/data/www/{root → ROOT}/index.html +0 -0
  269. data/lib/rubyfox/server/data/www/host-manager/META-INF/context.xml +24 -0
  270. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/jsp/401.jsp +71 -0
  271. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/jsp/403.jsp +90 -0
  272. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/jsp/404.jsp +62 -0
  273. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/web.xml +131 -0
  274. data/lib/rubyfox/server/data/www/host-manager/images/asf-logo.svg +226 -0
  275. data/lib/rubyfox/server/data/www/host-manager/images/tomcat.gif +0 -0
  276. data/lib/rubyfox/server/data/www/host-manager/index.jsp +18 -0
  277. data/lib/rubyfox/server/data/www/host-manager/manager.xml +26 -0
  278. data/lib/rubyfox/server/data/{logs → www/logsBackup}/.keep +0 -0
  279. data/lib/rubyfox/server/data/www/manager/META-INF/context.xml +24 -0
  280. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/401.jsp +80 -0
  281. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/403.jsp +100 -0
  282. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/404.jsp +63 -0
  283. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/connectorCerts.jsp +92 -0
  284. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/connectorCiphers.jsp +92 -0
  285. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/connectorTrustedCerts.jsp +92 -0
  286. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/sessionDetail.jsp +197 -0
  287. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/sessionsList.jsp +170 -0
  288. data/lib/rubyfox/server/data/www/manager/WEB-INF/web.xml +195 -0
  289. data/lib/rubyfox/server/data/www/manager/images/asf-logo.svg +226 -0
  290. data/lib/rubyfox/server/data/www/manager/images/tomcat.gif +0 -0
  291. data/lib/rubyfox/server/data/www/manager/index.jsp +18 -0
  292. data/lib/rubyfox/server/data/www/manager/status.xsd +84 -0
  293. data/lib/rubyfox/server/data/www/manager/xform.xsl +125 -0
  294. data/lib/rubyfox/server/version.rb +1 -1
  295. metadata +258 -298
  296. data/lib/rubyfox/server/data/config/ExtensionManagerLock.txt +0 -2
  297. data/lib/rubyfox/server/data/lib/Lib/reindex$py.class +0 -0
  298. data/lib/rubyfox/server/data/lib/jetty/VERSION.txt +0 -9320
  299. data/lib/rubyfox/server/data/lib/jetty/etc/README.spnego +0 -62
  300. data/lib/rubyfox/server/data/lib/jetty/etc/jamon.xml +0 -32
  301. data/lib/rubyfox/server/data/lib/jetty/etc/jdbcRealm.properties +0 -72
  302. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-alpn.xml +0 -32
  303. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-annotations.xml +0 -20
  304. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-cdi.xml +0 -19
  305. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-debug.xml +0 -36
  306. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-debuglog.xml +0 -25
  307. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-deploy.xml +0 -76
  308. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gcloud-memcached-sessions.xml +0 -27
  309. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gcloud-session-idmgr.xml +0 -19
  310. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gcloud-sessions.xml +0 -27
  311. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gzip.xml +0 -67
  312. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http-forwarded.xml +0 -17
  313. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http.xml +0 -47
  314. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http2.xml +0 -26
  315. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http2c.xml +0 -18
  316. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-https.xml +0 -29
  317. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-infinispan.xml +0 -39
  318. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-ipaccess.xml +0 -28
  319. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jaas.xml +0 -16
  320. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jdbc-sessions.xml +0 -34
  321. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jmx-remote.xml +0 -40
  322. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jmx.xml +0 -32
  323. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-logging.xml +0 -36
  324. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-lowresources.xml +0 -22
  325. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-monitor.xml +0 -30
  326. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-nosql.xml +0 -19
  327. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-plus.xml +0 -26
  328. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-proxy-protocol-ssl.xml +0 -10
  329. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-proxy-protocol.xml +0 -10
  330. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-proxy.xml +0 -35
  331. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-requestlog.xml +0 -30
  332. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-rewrite-customizer.xml +0 -17
  333. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-rewrite.xml +0 -31
  334. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-setuid.xml +0 -30
  335. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-spring.xml +0 -61
  336. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-ssl-context.xml +0 -29
  337. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-ssl.xml +0 -58
  338. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-started.xml +0 -15
  339. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-stats.xml +0 -18
  340. data/lib/rubyfox/server/data/lib/jetty/etc/jetty.conf +0 -12
  341. data/lib/rubyfox/server/data/lib/jetty/etc/jetty.xml +0 -195
  342. data/lib/rubyfox/server/data/lib/jetty/etc/jminix.xml +0 -12
  343. data/lib/rubyfox/server/data/lib/jetty/etc/jolokia.xml +0 -16
  344. data/lib/rubyfox/server/data/lib/jetty/etc/keystore +0 -0
  345. data/lib/rubyfox/server/data/lib/jetty/etc/krb5.ini +0 -23
  346. data/lib/rubyfox/server/data/lib/jetty/etc/rewrite-compactpath.xml +0 -10
  347. data/lib/rubyfox/server/data/lib/jetty/etc/spnego.conf +0 -19
  348. data/lib/rubyfox/server/data/lib/jetty/etc/spnego.properties +0 -1
  349. data/lib/rubyfox/server/data/lib/jetty/etc/webdefault.xml +0 -539
  350. data/lib/rubyfox/server/data/lib/jetty/lib/asm-5.0.1.jar +0 -0
  351. data/lib/rubyfox/server/data/lib/jetty/lib/asm-commons-5.0.1.jar +0 -0
  352. data/lib/rubyfox/server/data/lib/jetty/lib/fcgi/fcgi-client-9.3.11.v20160721.jar +0 -0
  353. data/lib/rubyfox/server/data/lib/jetty/lib/fcgi/fcgi-server-9.3.11.v20160721.jar +0 -0
  354. data/lib/rubyfox/server/data/lib/jetty/lib/http2-common-9.3.11.v20160721.jar +0 -0
  355. data/lib/rubyfox/server/data/lib/jetty/lib/http2-hpack-9.3.11.v20160721.jar +0 -0
  356. data/lib/rubyfox/server/data/lib/jetty/lib/http2-server-9.3.11.v20160721.jar +0 -0
  357. data/lib/rubyfox/server/data/lib/jetty/lib/jaspi/javax.security.auth.message-1.0.0.v201108011116.jar +0 -0
  358. data/lib/rubyfox/server/data/lib/jetty/lib/javax-websocket-client-impl-9.3.11.v20160721.jar +0 -0
  359. data/lib/rubyfox/server/data/lib/jetty/lib/javax-websocket-server-impl-9.3.11.v20160721.jar +0 -0
  360. data/lib/rubyfox/server/data/lib/jetty/lib/javax.annotation-api-1.2.jar +0 -0
  361. data/lib/rubyfox/server/data/lib/jetty/lib/javax.websocket-api-1.0.jar +0 -0
  362. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-alpn-server-9.3.11.v20160721.jar +0 -0
  363. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-annotations-9.3.11.v20160721.jar +0 -0
  364. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-client-9.3.11.v20160721.jar +0 -0
  365. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-continuation-9.3.11.v20160721.jar +0 -0
  366. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-deploy-9.3.11.v20160721.jar +0 -0
  367. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-gcloud-memcached-session-manager-9.3.11.v20160721.jar +0 -0
  368. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-gcloud-session-manager-9.3.11.v20160721.jar +0 -0
  369. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-http-9.3.11.v20160721.jar +0 -0
  370. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-infinispan-9.3.11.v20160721.jar +0 -0
  371. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-io-9.3.11.v20160721.jar +0 -0
  372. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jaas-9.3.11.v20160721.jar +0 -0
  373. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jaspi-9.3.11.v20160721.jar +0 -0
  374. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jmx-9.3.11.v20160721.jar +0 -0
  375. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jndi-9.3.11.v20160721.jar +0 -0
  376. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-nosql-9.3.11.v20160721.jar +0 -0
  377. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-plus-9.3.11.v20160721.jar +0 -0
  378. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-proxy-9.3.11.v20160721.jar +0 -0
  379. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-quickstart-9.3.11.v20160721.jar +0 -0
  380. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-rewrite-9.3.11.v20160721.jar +0 -0
  381. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-schemas-3.1.jar +0 -0
  382. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-security-9.3.11.v20160721.jar +0 -0
  383. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-server-9.3.11.v20160721.jar +0 -0
  384. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-servlet-9.3.11.v20160721.jar +0 -0
  385. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-servlets-9.3.11.v20160721.jar +0 -0
  386. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-util-9.3.11.v20160721.jar +0 -0
  387. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-webapp-9.3.11.v20160721.jar +0 -0
  388. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-xml-9.3.11.v20160721.jar +0 -0
  389. data/lib/rubyfox/server/data/lib/jetty/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar +0 -0
  390. data/lib/rubyfox/server/data/lib/jetty/lib/jndi/javax.transaction-api-1.2.jar +0 -0
  391. data/lib/rubyfox/server/data/lib/jetty/lib/monitor/jetty-monitor-9.3.11.v20160721.jar +0 -0
  392. data/lib/rubyfox/server/data/lib/jetty/lib/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar +0 -0
  393. data/lib/rubyfox/server/data/lib/jetty/lib/org.apache.taglibs.taglibs-standard-spec-1.2.5.jar +0 -0
  394. data/lib/rubyfox/server/data/lib/jetty/lib/org.eclipse.jdt.core.compiler.ecj-4.4.2.jar +0 -0
  395. data/lib/rubyfox/server/data/lib/jetty/lib/org.eclipse.jetty.apache-jsp-9.3.11.v20160721.jar +0 -0
  396. data/lib/rubyfox/server/data/lib/jetty/lib/org.mortbay.jasper.apache-el-8.0.33.jar +0 -0
  397. data/lib/rubyfox/server/data/lib/jetty/lib/org.mortbay.jasper.apache-jsp-8.0.33.jar +0 -0
  398. data/lib/rubyfox/server/data/lib/jetty/lib/servlet-api-3.1.jar +0 -0
  399. data/lib/rubyfox/server/data/lib/jetty/lib/setuid/jetty-setuid-java-1.0.3.jar +0 -0
  400. data/lib/rubyfox/server/data/lib/jetty/lib/setuid/libsetuid-linux.so +0 -0
  401. data/lib/rubyfox/server/data/lib/jetty/lib/setuid/libsetuid-osx.so +0 -0
  402. data/lib/rubyfox/server/data/lib/jetty/lib/spring/jetty-spring-9.3.11.v20160721.jar +0 -0
  403. data/lib/rubyfox/server/data/lib/jetty/lib/start.jar +0 -0
  404. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-api-9.3.11.v20160721.jar +0 -0
  405. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-client-9.3.11.v20160721.jar +0 -0
  406. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-common-9.3.11h.v20160721.jar +0 -0
  407. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-server-9.3.11.v20160721.jar +0 -0
  408. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-servlet-9.3.11.v20160721.jar +0 -0
  409. data/lib/rubyfox/server/data/lib/jetty/license-eplv10-aslv20.html +0 -576
  410. data/lib/rubyfox/server/data/lib/jetty/modules/.donotdelete +0 -0
  411. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0.mod +0 -8
  412. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_05.mod +0 -8
  413. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_101.mod +0 -8
  414. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_102.mod +0 -8
  415. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_11.mod +0 -8
  416. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_20.mod +0 -8
  417. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_25.mod +0 -8
  418. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_31.mod +0 -8
  419. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_40.mod +0 -8
  420. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_45.mod +0 -8
  421. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_51.mod +0 -8
  422. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_60.mod +0 -8
  423. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_65.mod +0 -8
  424. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_66.mod +0 -8
  425. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_71.mod +0 -8
  426. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_72.mod +0 -8
  427. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_73.mod +0 -8
  428. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_74.mod +0 -8
  429. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_77.mod +0 -8
  430. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_91.mod +0 -8
  431. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_92.mod +0 -8
  432. data/lib/rubyfox/server/data/lib/jetty/modules/alpn.mod +0 -53
  433. data/lib/rubyfox/server/data/lib/jetty/modules/annotations.mod +0 -17
  434. data/lib/rubyfox/server/data/lib/jetty/modules/apache-jsp.mod +0 -10
  435. data/lib/rubyfox/server/data/lib/jetty/modules/apache-jstl.mod +0 -9
  436. data/lib/rubyfox/server/data/lib/jetty/modules/cdi.mod +0 -39
  437. data/lib/rubyfox/server/data/lib/jetty/modules/client.mod +0 -6
  438. data/lib/rubyfox/server/data/lib/jetty/modules/continuation.mod +0 -6
  439. data/lib/rubyfox/server/data/lib/jetty/modules/debug.mod +0 -29
  440. data/lib/rubyfox/server/data/lib/jetty/modules/debuglog.mod +0 -25
  441. data/lib/rubyfox/server/data/lib/jetty/modules/deploy.mod +0 -31
  442. data/lib/rubyfox/server/data/lib/jetty/modules/ext.mod +0 -11
  443. data/lib/rubyfox/server/data/lib/jetty/modules/fcgi.mod +0 -15
  444. data/lib/rubyfox/server/data/lib/jetty/modules/gcloud-memcached-sessions.mod +0 -26
  445. data/lib/rubyfox/server/data/lib/jetty/modules/gcloud-session-idmgr.mod +0 -63
  446. data/lib/rubyfox/server/data/lib/jetty/modules/gcloud-sessions.mod +0 -11
  447. data/lib/rubyfox/server/data/lib/jetty/modules/gzip.mod +0 -23
  448. data/lib/rubyfox/server/data/lib/jetty/modules/hawtio.mod +0 -28
  449. data/lib/rubyfox/server/data/lib/jetty/modules/home-base-warning.mod +0 -7
  450. data/lib/rubyfox/server/data/lib/jetty/modules/http-forwarded.mod +0 -20
  451. data/lib/rubyfox/server/data/lib/jetty/modules/http.mod +0 -39
  452. data/lib/rubyfox/server/data/lib/jetty/modules/http2.mod +0 -20
  453. data/lib/rubyfox/server/data/lib/jetty/modules/http2c.mod +0 -22
  454. data/lib/rubyfox/server/data/lib/jetty/modules/https.mod +0 -14
  455. data/lib/rubyfox/server/data/lib/jetty/modules/infinispan.mod +0 -33
  456. data/lib/rubyfox/server/data/lib/jetty/modules/ipaccess.mod +0 -9
  457. data/lib/rubyfox/server/data/lib/jetty/modules/jaas.mod +0 -17
  458. data/lib/rubyfox/server/data/lib/jetty/modules/jamon.mod +0 -31
  459. data/lib/rubyfox/server/data/lib/jetty/modules/jaspi.mod +0 -10
  460. data/lib/rubyfox/server/data/lib/jetty/modules/jdbc-sessions.mod +0 -27
  461. data/lib/rubyfox/server/data/lib/jetty/modules/jminix.mod +0 -41
  462. data/lib/rubyfox/server/data/lib/jetty/modules/jmx-remote.mod +0 -16
  463. data/lib/rubyfox/server/data/lib/jetty/modules/jmx.mod +0 -13
  464. data/lib/rubyfox/server/data/lib/jetty/modules/jndi.mod +0 -11
  465. data/lib/rubyfox/server/data/lib/jetty/modules/jolokia.mod +0 -19
  466. data/lib/rubyfox/server/data/lib/jetty/modules/jsp.mod +0 -9
  467. data/lib/rubyfox/server/data/lib/jetty/modules/jstl.mod +0 -8
  468. data/lib/rubyfox/server/data/lib/jetty/modules/jvm.mod +0 -22
  469. data/lib/rubyfox/server/data/lib/jetty/modules/logging.mod +0 -36
  470. data/lib/rubyfox/server/data/lib/jetty/modules/lowresources.mod +0 -28
  471. data/lib/rubyfox/server/data/lib/jetty/modules/monitor.mod +0 -13
  472. data/lib/rubyfox/server/data/lib/jetty/modules/nosql.mod +0 -31
  473. data/lib/rubyfox/server/data/lib/jetty/modules/plus.mod +0 -15
  474. data/lib/rubyfox/server/data/lib/jetty/modules/proxy-protocol-ssl.mod +0 -9
  475. data/lib/rubyfox/server/data/lib/jetty/modules/proxy-protocol.mod +0 -9
  476. data/lib/rubyfox/server/data/lib/jetty/modules/proxy.mod +0 -22
  477. data/lib/rubyfox/server/data/lib/jetty/modules/quickstart.mod +0 -11
  478. data/lib/rubyfox/server/data/lib/jetty/modules/requestlog.mod +0 -40
  479. data/lib/rubyfox/server/data/lib/jetty/modules/resources.mod +0 -10
  480. data/lib/rubyfox/server/data/lib/jetty/modules/rewrite-compactpath.mod +0 -10
  481. data/lib/rubyfox/server/data/lib/jetty/modules/rewrite-customizer.mod +0 -24
  482. data/lib/rubyfox/server/data/lib/jetty/modules/rewrite.mod +0 -23
  483. data/lib/rubyfox/server/data/lib/jetty/modules/security.mod +0 -9
  484. data/lib/rubyfox/server/data/lib/jetty/modules/server.mod +0 -79
  485. data/lib/rubyfox/server/data/lib/jetty/modules/servlet.mod +0 -9
  486. data/lib/rubyfox/server/data/lib/jetty/modules/servlets.mod +0 -11
  487. data/lib/rubyfox/server/data/lib/jetty/modules/setuid.mod +0 -19
  488. data/lib/rubyfox/server/data/lib/jetty/modules/spring.mod +0 -17
  489. data/lib/rubyfox/server/data/lib/jetty/modules/ssl.mod +0 -97
  490. data/lib/rubyfox/server/data/lib/jetty/modules/stats.mod +0 -9
  491. data/lib/rubyfox/server/data/lib/jetty/modules/webapp.mod +0 -10
  492. data/lib/rubyfox/server/data/lib/jetty/modules/websocket.mod +0 -12
  493. data/lib/rubyfox/server/data/lib/jetty/notice.html +0 -111
  494. data/lib/rubyfox/server/data/lib/jetty/start.d/README.TXT +0 -24
  495. data/lib/rubyfox/server/data/lib/jetty/start.d/http.ini +0 -7
  496. data/lib/rubyfox/server/data/lib/jetty/start.d/https.ini +0 -10
  497. data/lib/rubyfox/server/data/lib/jetty/start.d/ssl.ini +0 -19
  498. data/lib/rubyfox/server/data/lib/jetty/start.ini +0 -83
  499. data/lib/rubyfox/server/data/www/.keep +0 -0
  500. data/lib/rubyfox/server/data/www/HelloServlet/META-INF/context.xml +0 -2
  501. data/lib/rubyfox/server/data/www/PyServletExample/MyModule$py.class +0 -0
  502. data/lib/rubyfox/server/data/www/PyServletExample/MyModule.py +0 -5
  503. data/lib/rubyfox/server/data/www/PyServletExample/WEB-INF/web.xml +0 -37
  504. data/lib/rubyfox/server/data/www/PyServletExample/errors/404.htm +0 -20
  505. data/lib/rubyfox/server/data/www/PyServletExample/index.py +0 -42
  506. data/lib/rubyfox/server/data/www/root/admin/.keep +0 -0
  507. data/lib/rubyfox/server/data/www/root/admin/AdminTool.swf +0 -0
  508. data/lib/rubyfox/server/data/www/root/admin/ReleaseNotes.txt +0 -192
  509. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/adobeFlashPlayer.png +0 -0
  510. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/advanced.png +0 -0
  511. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/analytics.png +0 -0
  512. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/banManager.png +0 -0
  513. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bannedIPs.png +0 -0
  514. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bannedUsernames.png +0 -0
  515. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bookmarks.png +0 -0
  516. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bootLog.png +0 -0
  517. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/buddyList.png +0 -0
  518. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/buddyProperties.png +0 -0
  519. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/connection.png +0 -0
  520. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/databaseManager.png +0 -0
  521. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/floodFilter.png +0 -0
  522. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/gameSettings.png +0 -0
  523. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/general.png +0 -0
  524. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/globalServerStatus.png +0 -0
  525. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/hTML5WebSockets.png +0 -0
  526. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/iPDiscovery.png +0 -0
  527. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/iPFilter.png +0 -0
  528. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/jVMSettings.png +0 -0
  529. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/logsDownload.png +0 -0
  530. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/mMOSettings.png +0 -0
  531. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/mailer.png +0 -0
  532. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/permissionsAndEvents.png +0 -0
  533. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/privilegeManager.png +0 -0
  534. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/remoteAdmin.png +0 -0
  535. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomExtension.png +0 -0
  536. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomVariables.png +0 -0
  537. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomsAndGroups.png +0 -0
  538. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeLog.png +0 -0
  539. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeRoomSettings.png +0 -0
  540. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeUserSettings.png +0 -0
  541. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeZoneSettings.png +0 -0
  542. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsApplication.png +0 -0
  543. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsDemographics.png +0 -0
  544. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsExceptions.png +0 -0
  545. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsOverview.png +0 -0
  546. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsTechnology.png +0 -0
  547. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/systemQueueStatus.png +0 -0
  548. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/threadPools.png +0 -0
  549. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/userManagement.png +0 -0
  550. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/userVariables.png +0 -0
  551. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/webServer.png +0 -0
  552. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/wordsFilter.png +0 -0
  553. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/zoneExtension.png +0 -0
  554. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/zoneTraffic.png +0 -0
  555. data/lib/rubyfox/server/data/www/root/admin/expressInstall.swf +0 -0
  556. data/lib/rubyfox/server/data/www/root/admin/index.html +0 -124
  557. data/lib/rubyfox/server/data/www/root/admin/modules/Analytics.swf +0 -0
  558. data/lib/rubyfox/server/data/www/root/admin/modules/BanManager.swf +0 -0
  559. data/lib/rubyfox/server/data/www/root/admin/modules/BlueBoxMonitor.swf +0 -0
  560. data/lib/rubyfox/server/data/www/root/admin/modules/Console.swf +0 -0
  561. data/lib/rubyfox/server/data/www/root/admin/modules/Dashboard.swf +0 -0
  562. data/lib/rubyfox/server/data/www/root/admin/modules/ExtensionManager.swf +0 -0
  563. data/lib/rubyfox/server/data/www/root/admin/modules/LicenseManager.swf +0 -0
  564. data/lib/rubyfox/server/data/www/root/admin/modules/LogViewer.swf +0 -0
  565. data/lib/rubyfox/server/data/www/root/admin/modules/ServerConfigurator.swf +0 -0
  566. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneConfigurator.swf +0 -0
  567. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneMonitor.swf +0 -0
  568. data/lib/rubyfox/server/data/www/root/admin/swfobject.js +0 -4
  569. data/lib/rubyfox/server/data/www/root/examples/.keep +0 -0
  570. data/lib/rubyfox/server/data/www/sfs2x-ws.war +0 -0
  571. data/lib/rubyfox/server/data/www/sfs2x-ws.xml +0 -30
  572. data/lib/rubyfox/server/data/zones/BasicExamples.zone.xml +0 -147
@@ -0,0 +1,929 @@
1
+ /*! (c) gotoAndPlay | All rights reserved */
2
+ (window["webpackJsonpapplication"] = window["webpackJsonpapplication"] || []).push([["module-1"],{
3
+
4
+ /***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
5
+ /*!**************************************************!*\
6
+ !*** ./node_modules/moment/locale sync ^\.\/.*$ ***!
7
+ \**************************************************/
8
+ /*! no static exports found */
9
+ /***/ (function(module, exports, __webpack_require__) {
10
+
11
+ var map = {
12
+ "./af": "./node_modules/moment/locale/af.js",
13
+ "./af.js": "./node_modules/moment/locale/af.js",
14
+ "./ar": "./node_modules/moment/locale/ar.js",
15
+ "./ar-dz": "./node_modules/moment/locale/ar-dz.js",
16
+ "./ar-dz.js": "./node_modules/moment/locale/ar-dz.js",
17
+ "./ar-kw": "./node_modules/moment/locale/ar-kw.js",
18
+ "./ar-kw.js": "./node_modules/moment/locale/ar-kw.js",
19
+ "./ar-ly": "./node_modules/moment/locale/ar-ly.js",
20
+ "./ar-ly.js": "./node_modules/moment/locale/ar-ly.js",
21
+ "./ar-ma": "./node_modules/moment/locale/ar-ma.js",
22
+ "./ar-ma.js": "./node_modules/moment/locale/ar-ma.js",
23
+ "./ar-sa": "./node_modules/moment/locale/ar-sa.js",
24
+ "./ar-sa.js": "./node_modules/moment/locale/ar-sa.js",
25
+ "./ar-tn": "./node_modules/moment/locale/ar-tn.js",
26
+ "./ar-tn.js": "./node_modules/moment/locale/ar-tn.js",
27
+ "./ar.js": "./node_modules/moment/locale/ar.js",
28
+ "./az": "./node_modules/moment/locale/az.js",
29
+ "./az.js": "./node_modules/moment/locale/az.js",
30
+ "./be": "./node_modules/moment/locale/be.js",
31
+ "./be.js": "./node_modules/moment/locale/be.js",
32
+ "./bg": "./node_modules/moment/locale/bg.js",
33
+ "./bg.js": "./node_modules/moment/locale/bg.js",
34
+ "./bm": "./node_modules/moment/locale/bm.js",
35
+ "./bm.js": "./node_modules/moment/locale/bm.js",
36
+ "./bn": "./node_modules/moment/locale/bn.js",
37
+ "./bn.js": "./node_modules/moment/locale/bn.js",
38
+ "./bo": "./node_modules/moment/locale/bo.js",
39
+ "./bo.js": "./node_modules/moment/locale/bo.js",
40
+ "./br": "./node_modules/moment/locale/br.js",
41
+ "./br.js": "./node_modules/moment/locale/br.js",
42
+ "./bs": "./node_modules/moment/locale/bs.js",
43
+ "./bs.js": "./node_modules/moment/locale/bs.js",
44
+ "./ca": "./node_modules/moment/locale/ca.js",
45
+ "./ca.js": "./node_modules/moment/locale/ca.js",
46
+ "./cs": "./node_modules/moment/locale/cs.js",
47
+ "./cs.js": "./node_modules/moment/locale/cs.js",
48
+ "./cv": "./node_modules/moment/locale/cv.js",
49
+ "./cv.js": "./node_modules/moment/locale/cv.js",
50
+ "./cy": "./node_modules/moment/locale/cy.js",
51
+ "./cy.js": "./node_modules/moment/locale/cy.js",
52
+ "./da": "./node_modules/moment/locale/da.js",
53
+ "./da.js": "./node_modules/moment/locale/da.js",
54
+ "./de": "./node_modules/moment/locale/de.js",
55
+ "./de-at": "./node_modules/moment/locale/de-at.js",
56
+ "./de-at.js": "./node_modules/moment/locale/de-at.js",
57
+ "./de-ch": "./node_modules/moment/locale/de-ch.js",
58
+ "./de-ch.js": "./node_modules/moment/locale/de-ch.js",
59
+ "./de.js": "./node_modules/moment/locale/de.js",
60
+ "./dv": "./node_modules/moment/locale/dv.js",
61
+ "./dv.js": "./node_modules/moment/locale/dv.js",
62
+ "./el": "./node_modules/moment/locale/el.js",
63
+ "./el.js": "./node_modules/moment/locale/el.js",
64
+ "./en-SG": "./node_modules/moment/locale/en-SG.js",
65
+ "./en-SG.js": "./node_modules/moment/locale/en-SG.js",
66
+ "./en-au": "./node_modules/moment/locale/en-au.js",
67
+ "./en-au.js": "./node_modules/moment/locale/en-au.js",
68
+ "./en-ca": "./node_modules/moment/locale/en-ca.js",
69
+ "./en-ca.js": "./node_modules/moment/locale/en-ca.js",
70
+ "./en-gb": "./node_modules/moment/locale/en-gb.js",
71
+ "./en-gb.js": "./node_modules/moment/locale/en-gb.js",
72
+ "./en-ie": "./node_modules/moment/locale/en-ie.js",
73
+ "./en-ie.js": "./node_modules/moment/locale/en-ie.js",
74
+ "./en-il": "./node_modules/moment/locale/en-il.js",
75
+ "./en-il.js": "./node_modules/moment/locale/en-il.js",
76
+ "./en-nz": "./node_modules/moment/locale/en-nz.js",
77
+ "./en-nz.js": "./node_modules/moment/locale/en-nz.js",
78
+ "./eo": "./node_modules/moment/locale/eo.js",
79
+ "./eo.js": "./node_modules/moment/locale/eo.js",
80
+ "./es": "./node_modules/moment/locale/es.js",
81
+ "./es-do": "./node_modules/moment/locale/es-do.js",
82
+ "./es-do.js": "./node_modules/moment/locale/es-do.js",
83
+ "./es-us": "./node_modules/moment/locale/es-us.js",
84
+ "./es-us.js": "./node_modules/moment/locale/es-us.js",
85
+ "./es.js": "./node_modules/moment/locale/es.js",
86
+ "./et": "./node_modules/moment/locale/et.js",
87
+ "./et.js": "./node_modules/moment/locale/et.js",
88
+ "./eu": "./node_modules/moment/locale/eu.js",
89
+ "./eu.js": "./node_modules/moment/locale/eu.js",
90
+ "./fa": "./node_modules/moment/locale/fa.js",
91
+ "./fa.js": "./node_modules/moment/locale/fa.js",
92
+ "./fi": "./node_modules/moment/locale/fi.js",
93
+ "./fi.js": "./node_modules/moment/locale/fi.js",
94
+ "./fo": "./node_modules/moment/locale/fo.js",
95
+ "./fo.js": "./node_modules/moment/locale/fo.js",
96
+ "./fr": "./node_modules/moment/locale/fr.js",
97
+ "./fr-ca": "./node_modules/moment/locale/fr-ca.js",
98
+ "./fr-ca.js": "./node_modules/moment/locale/fr-ca.js",
99
+ "./fr-ch": "./node_modules/moment/locale/fr-ch.js",
100
+ "./fr-ch.js": "./node_modules/moment/locale/fr-ch.js",
101
+ "./fr.js": "./node_modules/moment/locale/fr.js",
102
+ "./fy": "./node_modules/moment/locale/fy.js",
103
+ "./fy.js": "./node_modules/moment/locale/fy.js",
104
+ "./ga": "./node_modules/moment/locale/ga.js",
105
+ "./ga.js": "./node_modules/moment/locale/ga.js",
106
+ "./gd": "./node_modules/moment/locale/gd.js",
107
+ "./gd.js": "./node_modules/moment/locale/gd.js",
108
+ "./gl": "./node_modules/moment/locale/gl.js",
109
+ "./gl.js": "./node_modules/moment/locale/gl.js",
110
+ "./gom-latn": "./node_modules/moment/locale/gom-latn.js",
111
+ "./gom-latn.js": "./node_modules/moment/locale/gom-latn.js",
112
+ "./gu": "./node_modules/moment/locale/gu.js",
113
+ "./gu.js": "./node_modules/moment/locale/gu.js",
114
+ "./he": "./node_modules/moment/locale/he.js",
115
+ "./he.js": "./node_modules/moment/locale/he.js",
116
+ "./hi": "./node_modules/moment/locale/hi.js",
117
+ "./hi.js": "./node_modules/moment/locale/hi.js",
118
+ "./hr": "./node_modules/moment/locale/hr.js",
119
+ "./hr.js": "./node_modules/moment/locale/hr.js",
120
+ "./hu": "./node_modules/moment/locale/hu.js",
121
+ "./hu.js": "./node_modules/moment/locale/hu.js",
122
+ "./hy-am": "./node_modules/moment/locale/hy-am.js",
123
+ "./hy-am.js": "./node_modules/moment/locale/hy-am.js",
124
+ "./id": "./node_modules/moment/locale/id.js",
125
+ "./id.js": "./node_modules/moment/locale/id.js",
126
+ "./is": "./node_modules/moment/locale/is.js",
127
+ "./is.js": "./node_modules/moment/locale/is.js",
128
+ "./it": "./node_modules/moment/locale/it.js",
129
+ "./it-ch": "./node_modules/moment/locale/it-ch.js",
130
+ "./it-ch.js": "./node_modules/moment/locale/it-ch.js",
131
+ "./it.js": "./node_modules/moment/locale/it.js",
132
+ "./ja": "./node_modules/moment/locale/ja.js",
133
+ "./ja.js": "./node_modules/moment/locale/ja.js",
134
+ "./jv": "./node_modules/moment/locale/jv.js",
135
+ "./jv.js": "./node_modules/moment/locale/jv.js",
136
+ "./ka": "./node_modules/moment/locale/ka.js",
137
+ "./ka.js": "./node_modules/moment/locale/ka.js",
138
+ "./kk": "./node_modules/moment/locale/kk.js",
139
+ "./kk.js": "./node_modules/moment/locale/kk.js",
140
+ "./km": "./node_modules/moment/locale/km.js",
141
+ "./km.js": "./node_modules/moment/locale/km.js",
142
+ "./kn": "./node_modules/moment/locale/kn.js",
143
+ "./kn.js": "./node_modules/moment/locale/kn.js",
144
+ "./ko": "./node_modules/moment/locale/ko.js",
145
+ "./ko.js": "./node_modules/moment/locale/ko.js",
146
+ "./ku": "./node_modules/moment/locale/ku.js",
147
+ "./ku.js": "./node_modules/moment/locale/ku.js",
148
+ "./ky": "./node_modules/moment/locale/ky.js",
149
+ "./ky.js": "./node_modules/moment/locale/ky.js",
150
+ "./lb": "./node_modules/moment/locale/lb.js",
151
+ "./lb.js": "./node_modules/moment/locale/lb.js",
152
+ "./lo": "./node_modules/moment/locale/lo.js",
153
+ "./lo.js": "./node_modules/moment/locale/lo.js",
154
+ "./lt": "./node_modules/moment/locale/lt.js",
155
+ "./lt.js": "./node_modules/moment/locale/lt.js",
156
+ "./lv": "./node_modules/moment/locale/lv.js",
157
+ "./lv.js": "./node_modules/moment/locale/lv.js",
158
+ "./me": "./node_modules/moment/locale/me.js",
159
+ "./me.js": "./node_modules/moment/locale/me.js",
160
+ "./mi": "./node_modules/moment/locale/mi.js",
161
+ "./mi.js": "./node_modules/moment/locale/mi.js",
162
+ "./mk": "./node_modules/moment/locale/mk.js",
163
+ "./mk.js": "./node_modules/moment/locale/mk.js",
164
+ "./ml": "./node_modules/moment/locale/ml.js",
165
+ "./ml.js": "./node_modules/moment/locale/ml.js",
166
+ "./mn": "./node_modules/moment/locale/mn.js",
167
+ "./mn.js": "./node_modules/moment/locale/mn.js",
168
+ "./mr": "./node_modules/moment/locale/mr.js",
169
+ "./mr.js": "./node_modules/moment/locale/mr.js",
170
+ "./ms": "./node_modules/moment/locale/ms.js",
171
+ "./ms-my": "./node_modules/moment/locale/ms-my.js",
172
+ "./ms-my.js": "./node_modules/moment/locale/ms-my.js",
173
+ "./ms.js": "./node_modules/moment/locale/ms.js",
174
+ "./mt": "./node_modules/moment/locale/mt.js",
175
+ "./mt.js": "./node_modules/moment/locale/mt.js",
176
+ "./my": "./node_modules/moment/locale/my.js",
177
+ "./my.js": "./node_modules/moment/locale/my.js",
178
+ "./nb": "./node_modules/moment/locale/nb.js",
179
+ "./nb.js": "./node_modules/moment/locale/nb.js",
180
+ "./ne": "./node_modules/moment/locale/ne.js",
181
+ "./ne.js": "./node_modules/moment/locale/ne.js",
182
+ "./nl": "./node_modules/moment/locale/nl.js",
183
+ "./nl-be": "./node_modules/moment/locale/nl-be.js",
184
+ "./nl-be.js": "./node_modules/moment/locale/nl-be.js",
185
+ "./nl.js": "./node_modules/moment/locale/nl.js",
186
+ "./nn": "./node_modules/moment/locale/nn.js",
187
+ "./nn.js": "./node_modules/moment/locale/nn.js",
188
+ "./pa-in": "./node_modules/moment/locale/pa-in.js",
189
+ "./pa-in.js": "./node_modules/moment/locale/pa-in.js",
190
+ "./pl": "./node_modules/moment/locale/pl.js",
191
+ "./pl.js": "./node_modules/moment/locale/pl.js",
192
+ "./pt": "./node_modules/moment/locale/pt.js",
193
+ "./pt-br": "./node_modules/moment/locale/pt-br.js",
194
+ "./pt-br.js": "./node_modules/moment/locale/pt-br.js",
195
+ "./pt.js": "./node_modules/moment/locale/pt.js",
196
+ "./ro": "./node_modules/moment/locale/ro.js",
197
+ "./ro.js": "./node_modules/moment/locale/ro.js",
198
+ "./ru": "./node_modules/moment/locale/ru.js",
199
+ "./ru.js": "./node_modules/moment/locale/ru.js",
200
+ "./sd": "./node_modules/moment/locale/sd.js",
201
+ "./sd.js": "./node_modules/moment/locale/sd.js",
202
+ "./se": "./node_modules/moment/locale/se.js",
203
+ "./se.js": "./node_modules/moment/locale/se.js",
204
+ "./si": "./node_modules/moment/locale/si.js",
205
+ "./si.js": "./node_modules/moment/locale/si.js",
206
+ "./sk": "./node_modules/moment/locale/sk.js",
207
+ "./sk.js": "./node_modules/moment/locale/sk.js",
208
+ "./sl": "./node_modules/moment/locale/sl.js",
209
+ "./sl.js": "./node_modules/moment/locale/sl.js",
210
+ "./sq": "./node_modules/moment/locale/sq.js",
211
+ "./sq.js": "./node_modules/moment/locale/sq.js",
212
+ "./sr": "./node_modules/moment/locale/sr.js",
213
+ "./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js",
214
+ "./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js",
215
+ "./sr.js": "./node_modules/moment/locale/sr.js",
216
+ "./ss": "./node_modules/moment/locale/ss.js",
217
+ "./ss.js": "./node_modules/moment/locale/ss.js",
218
+ "./sv": "./node_modules/moment/locale/sv.js",
219
+ "./sv.js": "./node_modules/moment/locale/sv.js",
220
+ "./sw": "./node_modules/moment/locale/sw.js",
221
+ "./sw.js": "./node_modules/moment/locale/sw.js",
222
+ "./ta": "./node_modules/moment/locale/ta.js",
223
+ "./ta.js": "./node_modules/moment/locale/ta.js",
224
+ "./te": "./node_modules/moment/locale/te.js",
225
+ "./te.js": "./node_modules/moment/locale/te.js",
226
+ "./tet": "./node_modules/moment/locale/tet.js",
227
+ "./tet.js": "./node_modules/moment/locale/tet.js",
228
+ "./tg": "./node_modules/moment/locale/tg.js",
229
+ "./tg.js": "./node_modules/moment/locale/tg.js",
230
+ "./th": "./node_modules/moment/locale/th.js",
231
+ "./th.js": "./node_modules/moment/locale/th.js",
232
+ "./tl-ph": "./node_modules/moment/locale/tl-ph.js",
233
+ "./tl-ph.js": "./node_modules/moment/locale/tl-ph.js",
234
+ "./tlh": "./node_modules/moment/locale/tlh.js",
235
+ "./tlh.js": "./node_modules/moment/locale/tlh.js",
236
+ "./tr": "./node_modules/moment/locale/tr.js",
237
+ "./tr.js": "./node_modules/moment/locale/tr.js",
238
+ "./tzl": "./node_modules/moment/locale/tzl.js",
239
+ "./tzl.js": "./node_modules/moment/locale/tzl.js",
240
+ "./tzm": "./node_modules/moment/locale/tzm.js",
241
+ "./tzm-latn": "./node_modules/moment/locale/tzm-latn.js",
242
+ "./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js",
243
+ "./tzm.js": "./node_modules/moment/locale/tzm.js",
244
+ "./ug-cn": "./node_modules/moment/locale/ug-cn.js",
245
+ "./ug-cn.js": "./node_modules/moment/locale/ug-cn.js",
246
+ "./uk": "./node_modules/moment/locale/uk.js",
247
+ "./uk.js": "./node_modules/moment/locale/uk.js",
248
+ "./ur": "./node_modules/moment/locale/ur.js",
249
+ "./ur.js": "./node_modules/moment/locale/ur.js",
250
+ "./uz": "./node_modules/moment/locale/uz.js",
251
+ "./uz-latn": "./node_modules/moment/locale/uz-latn.js",
252
+ "./uz-latn.js": "./node_modules/moment/locale/uz-latn.js",
253
+ "./uz.js": "./node_modules/moment/locale/uz.js",
254
+ "./vi": "./node_modules/moment/locale/vi.js",
255
+ "./vi.js": "./node_modules/moment/locale/vi.js",
256
+ "./x-pseudo": "./node_modules/moment/locale/x-pseudo.js",
257
+ "./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js",
258
+ "./yo": "./node_modules/moment/locale/yo.js",
259
+ "./yo.js": "./node_modules/moment/locale/yo.js",
260
+ "./zh-cn": "./node_modules/moment/locale/zh-cn.js",
261
+ "./zh-cn.js": "./node_modules/moment/locale/zh-cn.js",
262
+ "./zh-hk": "./node_modules/moment/locale/zh-hk.js",
263
+ "./zh-hk.js": "./node_modules/moment/locale/zh-hk.js",
264
+ "./zh-tw": "./node_modules/moment/locale/zh-tw.js",
265
+ "./zh-tw.js": "./node_modules/moment/locale/zh-tw.js"
266
+ };
267
+
268
+
269
+ function webpackContext(req) {
270
+ var id = webpackContextResolve(req);
271
+ return __webpack_require__(id);
272
+ }
273
+ function webpackContextResolve(req) {
274
+ if(!__webpack_require__.o(map, req)) {
275
+ var e = new Error("Cannot find module '" + req + "'");
276
+ e.code = 'MODULE_NOT_FOUND';
277
+ throw e;
278
+ }
279
+ return map[req];
280
+ }
281
+ webpackContext.keys = function webpackContextKeys() {
282
+ return Object.keys(map);
283
+ };
284
+ webpackContext.resolve = webpackContextResolve;
285
+ module.exports = webpackContext;
286
+ webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$";
287
+
288
+ /***/ }),
289
+
290
+ /***/ "./src/data/banned-user.js":
291
+ /*!*********************************!*\
292
+ !*** ./src/data/banned-user.js ***!
293
+ \*********************************/
294
+ /*! exports provided: BannedUser */
295
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
296
+
297
+ "use strict";
298
+ __webpack_require__.r(__webpack_exports__);
299
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BannedUser", function() { return BannedUser; });
300
+ /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js");
301
+ /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_0__);
302
+
303
+
304
+ class BannedUser
305
+ {
306
+ constructor(name, zone)
307
+ {
308
+ this.DATE_FORMAT = 'DD/MM/YYYY HH:mm';
309
+
310
+ this.name = name;
311
+ this.zone = zone;
312
+ }
313
+
314
+ static fromSFSArray(sfsa)
315
+ {
316
+ let bu = new BannedUser(sfsa.getUtfString(0), sfsa.getUtfString(1));
317
+
318
+ bu.mode = sfsa.getUtfString(2);
319
+ bu.reason = sfsa.getUtfString(3);
320
+ bu.adminName = sfsa.getUtfString(4);
321
+ bu.ipAddress = sfsa.getUtfString(5);
322
+ bu.banTimeMillis = sfsa.getLong(6);
323
+ bu.banDurationMillis = sfsa.getLong(7);
324
+ bu.expirationDate = bu._getExpirationDate();
325
+ bu.banDate = bu._getBanDate();
326
+
327
+ return bu;
328
+ }
329
+
330
+ _getExpirationDate()
331
+ {
332
+ const expireOn = moment__WEBPACK_IMPORTED_MODULE_0__(this.banTimeMillis + this.banDurationMillis);
333
+
334
+ if (expireOn.year() >= moment__WEBPACK_IMPORTED_MODULE_0__().year() + 100)
335
+ return 'Never';
336
+ else
337
+ return expireOn.format(this.DATE_FORMAT);
338
+ }
339
+
340
+ _getBanDate()
341
+ {
342
+ return moment__WEBPACK_IMPORTED_MODULE_0__(this.banTimeMillis).format(this.DATE_FORMAT);
343
+ }
344
+ }
345
+
346
+
347
+ /***/ }),
348
+
349
+ /***/ "./src/modules/ban-manager.js":
350
+ /*!************************************!*\
351
+ !*** ./src/modules/ban-manager.js ***!
352
+ \************************************/
353
+ /*! exports provided: default */
354
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
355
+
356
+ "use strict";
357
+ __webpack_require__.r(__webpack_exports__);
358
+ /* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BanManager; });
359
+ /* harmony import */ var _base_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base-module */ "./src/modules/base-module.js");
360
+ /* harmony import */ var _data_banned_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../data/banned-user */ "./src/data/banned-user.js");
361
+ /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js");
362
+ /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_2__);
363
+
364
+
365
+
366
+
367
+ class BanManager extends _base_module__WEBPACK_IMPORTED_MODULE_0__["BaseModule"]
368
+ {
369
+ constructor()
370
+ {
371
+ super('banManager');
372
+
373
+ // Outgoing requests
374
+ this.REQ_GET_ZONES = 'getZones';
375
+ this.REQ_GET_USERNAMES = 'getUNames';
376
+ this.REQ_GET_IPADDRESSES = 'getIPs';
377
+ this.REQ_REMOVE_USERNAMES = 'removeUNames';
378
+ this.REQ_REMOVE_IPADDRESSES = 'removeIPs';
379
+ this.REQ_BAN = 'ban';
380
+
381
+ // Incoming responses
382
+ this.RESP_ZONES = 'zones';
383
+ this.RESP_USERNAMES = 'uNames';
384
+ this.RESP_IPADDRESSES = 'IPs';
385
+ }
386
+
387
+ //------------------------------------
388
+ // COMMON MODULE INTERFACE METHODS
389
+ // This members are used by the main controller
390
+ // to communicate with the module's controller.
391
+ //------------------------------------
392
+
393
+ initialize(idData, shellController)
394
+ {
395
+ // Call super method
396
+ super.initialize(idData, shellController);
397
+
398
+ // Initialize scrolling tabs
399
+ $('#bnm-tabNavigator > #tabs').scrollingTabs({
400
+ bootstrapVersion: 4,
401
+ scrollToTabEdge: true,
402
+ enableSwiping: true,
403
+ disableScrollArrowsOnFullyScrolled: true,
404
+ cssClassLeftArrow: 'fa fa-chevron-left',
405
+ cssClassRightArrow: 'fa fa-chevron-right'
406
+ });
407
+
408
+ // Initialize zone filter dropdown
409
+ this._zonesDD = $('#bnm-zonesDD').kendoDropDownList({
410
+ change: $.proxy(this._onZoneChange, this)
411
+ }).data('kendoDropDownList');
412
+
413
+ // Initialize ban button
414
+ $('#bnm-showBanModalBt').on('click', $.proxy(this._onShowBanModalClick, this));
415
+
416
+ // Initialize banned IPs grid
417
+ this._ipGrid = $('#bnm-ipGrid').kendoGrid({
418
+ scrollable: true,
419
+ sortable: true,
420
+ //resizable: true,
421
+ selectable: 'multiple',
422
+ columns:
423
+ [
424
+ {
425
+ field: 'ipAddress',
426
+ width: 150,
427
+ title: 'IP Address',
428
+ },
429
+ {
430
+ field: 'banDate',
431
+ width: 120,
432
+ title: 'Date',
433
+ },
434
+ {
435
+ field: 'expirationDate',
436
+ width: 120,
437
+ title: 'Expiration',
438
+ },
439
+ {
440
+ field: 'reason',
441
+ width: 250,
442
+ title: 'Reason',
443
+ },
444
+ {
445
+ field: 'adminName',
446
+ width: 150,
447
+ title: 'Banned By',
448
+ },
449
+ ],
450
+ noRecords: {
451
+ template: 'No banned IP addresses.'
452
+ },
453
+ change: $.proxy(this._onIpGridSelectionChange, this),
454
+ dataSource: []
455
+ }).data('kendoGrid');
456
+
457
+ // Initialize banned usernames grid
458
+ this._namesGrid = $('#bnm-namesGrid').kendoGrid({
459
+ scrollable: true,
460
+ sortable: true,
461
+ //resizable: true,
462
+ selectable: 'multiple',
463
+ columns:
464
+ [
465
+ {
466
+ field: 'name',
467
+ width: 150,
468
+ title: 'Username',
469
+ },
470
+ {
471
+ field: 'banDate',
472
+ width: 120,
473
+ title: 'Date',
474
+ },
475
+ {
476
+ field: 'expirationDate',
477
+ width: 120,
478
+ title: 'Expiration',
479
+ },
480
+ {
481
+ field: 'reason',
482
+ width: 250,
483
+ title: 'Reason',
484
+ },
485
+ {
486
+ field: 'adminName',
487
+ width: 150,
488
+ title: 'Banned By',
489
+ },
490
+ ],
491
+ noRecords: {
492
+ template: 'No banned usernames.'
493
+ },
494
+ change: $.proxy(this._onNamesGridSelectionChange, this),
495
+ dataSource: []
496
+ }).data('kendoGrid');
497
+
498
+ // Initialize refresh and remove buttons
499
+ $('#bnm-refreshNamesBt').on('click', $.proxy(this._onRefreshNamesClick, this));
500
+ $('#bnm-removeNameBt').on('click', $.proxy(this._onRemoveNamesClick, this));
501
+ $('#bnm-removeAllNamesBt').on('click', $.proxy(this._onRemoveAllNamesClick, this));
502
+ $('#bnm-refreshIpBt').on('click', $.proxy(this._onRefreshIpClick, this));
503
+ $('#bnm-removeIpBt').on('click', $.proxy(this._onRemoveIpClick, this));
504
+ $('#bnm-removeAllIpBt').on('click', $.proxy(this._onRemoveAllIpClick, this));
505
+
506
+ // Configure ban panel
507
+ $('#bnm-banModal').modal({
508
+ backdrop: 'static',
509
+ keyboard: false,
510
+ show: false,
511
+ });
512
+
513
+ // Add listener for ban panel hide
514
+ $('#bnm-banModal').on('hidden.bs.modal', $.proxy(this._onBanModalHidden, this));
515
+
516
+ // Initialize kendo validation on folder name form
517
+ this._banValidator = $('#bnm-banForm').kendoValidator({}).data('kendoValidator');
518
+
519
+ // Add listener to Ban button click
520
+ $('#bnm-banBt').on('click', $.proxy(this._onBanClick, this));
521
+
522
+ // Init ban delay numeric stepper
523
+ this._banDelayIn = $('#bnm-modalDelayNS').kendoNumericTextBox({
524
+ min: 0,
525
+ step: 1,
526
+ format: '#'
527
+ }).data('kendoNumericTextBox');
528
+
529
+ // Init ban expiration date picker
530
+ this._banExpDateIn = $('#bnm-expirationDP').kendoDatePicker({
531
+ value: this._tomorrow,
532
+ min: this._tomorrow,
533
+ footer: false,
534
+ format: 'dd/MM/yyyy'
535
+ }).data('kendoDatePicker');
536
+
537
+ // Disable manual date input
538
+ $('#bnm-expirationDP').attr('readonly','readonly');
539
+
540
+ // Init ban expiration hours/minutes inputs
541
+ this._banExpHourIn = $('#bnm-modalExpHoursNS').kendoNumericTextBox({
542
+ min: 0,
543
+ max: 99,
544
+ step: 1,
545
+ format: '#'
546
+ }).data('kendoNumericTextBox');
547
+
548
+ this._banExpMinIn = $('#bnm-modalExpMinsNS').kendoNumericTextBox({
549
+ min: 0,
550
+ max: 59,
551
+ step: 1,
552
+ format: '#'
553
+ }).data('kendoNumericTextBox');
554
+
555
+ //-------------------------------------
556
+
557
+ // Load zones list
558
+ this.sendExtensionRequest(this.REQ_GET_ZONES);
559
+
560
+ // Load banned IP addresses
561
+ // Note: we don't load the banned usernames automatically because a zone must be selected
562
+ this._getBannedIPs();
563
+ }
564
+
565
+ destroy()
566
+ {
567
+ // Call super method
568
+ super.destroy();
569
+
570
+ // Destroy scrolling tabs
571
+ $('#bnm-tabNavigator #tabs').scrollingTabs('destroy');
572
+
573
+ // Remove click listeners
574
+ $('#bnm-showBanModalBt').off('click');
575
+ $('#bnm-refreshNamesBt').off('click');
576
+ $('#bnm-removeNameBt').off('click');
577
+ $('#bnm-removeAllNamesBt').off('click');
578
+ $('#bnm-refreshIpBt').off('click');
579
+ $('#bnm-removeIpBt').off('click');
580
+ $('#bnm-removeAllIpBt').off('click');
581
+ $('#bnm-banBt').off('click');
582
+
583
+ // Hide ban panel
584
+ $('#bnm-banModal').modal('hide');
585
+
586
+ // Remove room creation panel listener
587
+ $('#bnm-banModal').off('hidden.bs.modal');
588
+ }
589
+
590
+ onExtensionCommand(command, data)
591
+ {
592
+ // Data received
593
+ if (command == this.RESP_ZONES)
594
+ {
595
+ let zones = data.getUtfStringArray('zones');
596
+
597
+ // If we have 1 zone only, we will select it immediately
598
+ const selectFirstZone = zones.length == 1;
599
+
600
+ // Sort zones list
601
+ zones.sort(function (a, b) {
602
+ return a.localeCompare(b);
603
+ });
604
+
605
+ // Add "none" zone
606
+ zones.unshift('[none]');
607
+
608
+ // Set zone dropdown datasource
609
+ this._zonesDD.setDataSource(zones);
610
+
611
+ if (selectFirstZone)
612
+ {
613
+ this._zonesDD.select(1);
614
+ this._getBannedUsernames();
615
+ }
616
+ else
617
+ this._zonesDD.select(0);
618
+ }
619
+
620
+ else if (command == this.RESP_USERNAMES)
621
+ {
622
+ // Substitute grid's data source, retaining current sorting
623
+ let currSort = this._namesGrid.dataSource.sort();
624
+
625
+ let ds = new kendo.data.DataSource({
626
+ sort: currSort,
627
+ data: this._generateBannedEntries(data.getSFSArray('uNames'))
628
+ });
629
+
630
+ // Assign data source to grid
631
+ this._namesGrid.setDataSource(ds);
632
+
633
+ // Enable remove all button
634
+ $('#bnm-removeAllNamesBt').attr('disabled', ds.total() == 0)
635
+ }
636
+ else if (command == this.RESP_IPADDRESSES)
637
+ {
638
+ // Substitute grid's data source, retaining current sorting
639
+ let currSort = this._ipGrid.dataSource.sort();
640
+
641
+ let ds = new kendo.data.DataSource({
642
+ sort: currSort,
643
+ data: this._generateBannedEntries(data.getSFSArray('IPs'))
644
+ });
645
+
646
+ // Assign data source to grid
647
+ this._ipGrid.setDataSource(ds);
648
+
649
+ // Enable remove all button
650
+ $('#bnm-removeAllIpBt').attr('disabled', ds.total() == 0)
651
+ }
652
+ }
653
+
654
+ //---------------------------------
655
+ // UI EVENT LISTENERS
656
+ //---------------------------------
657
+
658
+ _onShowBanModalClick()
659
+ {
660
+ // Display zone name
661
+ $('#bnm-modalZoneLb').text(this._zonesDD.value())
662
+
663
+ // Display ban panel
664
+ $('#bnm-banModal').modal('show');
665
+
666
+ // Focus name field
667
+ $('#bnm-modalNameIn').focus();
668
+ }
669
+
670
+ _onBanModalHidden(e)
671
+ {
672
+ // Reset validator
673
+ this._banValidator.hideMessages();
674
+
675
+ // The method above doesn't remove the k-invalid classes and aria-invalid="true" attributes from inputs
676
+ // Let's do it manually
677
+ $('#bnm-banForm .k-invalid').removeClass('k-invalid');
678
+ $('#bnm-banForm [aria-invalid="true"]').removeAttr('aria-invalid');
679
+
680
+ // Reset ban form
681
+ $('#bnm-modalNameIn').val('');
682
+ $('#bnm-modalReasonIn').val('');
683
+ $('#bnm-modalMessageIn').val('');
684
+
685
+ this._banDelayIn.value(5);
686
+
687
+ $('input[name="expiration"]').removeAttr('checked');
688
+ $('#bnm-expirationRB0').prop('checked', true);
689
+
690
+ this._banExpHourIn.value(1);
691
+ this._banExpMinIn.value(0);
692
+
693
+ this._banExpDateIn.min(this._tomorrow);
694
+ this._banExpDateIn.value(this._tomorrow);
695
+ }
696
+
697
+ _onBanClick()
698
+ {
699
+ if (this._banValidator.validate())
700
+ {
701
+ // Retrieve ban details
702
+ let params = new SFS2X.SFSObject();
703
+
704
+ params.putUtfString('zone', this._zonesDD.value());
705
+ params.putUtfString('name', $('#bnm-modalNameIn').val());
706
+ params.putUtfString('msg', $('#bnm-modalMessageIn').val());
707
+ params.putInt('delay', this._banDelayIn.value() != null ? this._banDelayIn.value() : 0);
708
+ params.putUtfString('reason', $('#bnm-modalReasonIn').val());
709
+
710
+ const exp = $('input[name="expiration"]:checked').val();
711
+ let duration = -1;
712
+
713
+ if (exp == 'after')
714
+ {
715
+ const hours = this._banExpHourIn.value() != null ? this._banExpHourIn.value() : 0;
716
+ const minutes = this._banExpMinIn.value() != null ? this._banExpMinIn.value() : 0;
717
+
718
+ duration = (hours * 60) + minutes;
719
+
720
+ if (duration <= 0)
721
+ duration = 1;
722
+ }
723
+ else if (exp == 'on')
724
+ {
725
+ const onDate = moment__WEBPACK_IMPORTED_MODULE_2__(this._banExpDateIn.value());
726
+ const now = moment__WEBPACK_IMPORTED_MODULE_2__();
727
+
728
+ duration = onDate.startOf('day').diff(now.startOf('minute'), 'minutes');
729
+
730
+ if (duration <= 0)
731
+ duration = 1;
732
+ }
733
+
734
+ params.putInt('durMins', duration);
735
+
736
+ // Send ban request to server
737
+ this.sendExtensionRequest(this.REQ_BAN, params);
738
+
739
+ // Refresh list
740
+ this._getBannedUsernames();
741
+
742
+ // Focus username field
743
+ $('#bnm-modalNameIn').focus();
744
+ $('#bnm-modalNameIn').select();
745
+ }
746
+ }
747
+
748
+ _onZoneChange()
749
+ {
750
+ $('#bnm-namesButtons').attr('disabled', this._zonesDD.select() == 0);
751
+ $('#bnm-showBanModalBt').attr('disabled', this._zonesDD.select() == 0);
752
+
753
+ this._getBannedUsernames();
754
+ }
755
+
756
+ _onNamesGridSelectionChange()
757
+ {
758
+ // Enable/disable remove button
759
+ const selectedRows = this._namesGrid.select();
760
+ $('#bnm-removeNameBt').attr('disabled', selectedRows.length == 0);
761
+ }
762
+
763
+ _onIpGridSelectionChange()
764
+ {
765
+ // Enable/disable remove button
766
+ const selectedRows = this._ipGrid.select();
767
+ $('#bnm-removeIpBt').attr('disabled', selectedRows.length == 0);
768
+ }
769
+
770
+ _onRefreshNamesClick()
771
+ {
772
+ this._getBannedUsernames();
773
+ }
774
+
775
+ _onRemoveNamesClick()
776
+ {
777
+ this.shellCtrl.showConfirmWarning(`Are you sure you want to remove the banning for the selected username${this._ipGrid.select().length > 1 ? 's' : ''}?`, $.proxy(this._onRemoveNamesConfirm, this));
778
+ }
779
+
780
+ _onRemoveNamesConfirm()
781
+ {
782
+ let selectedRows = this._namesGrid.select();
783
+ let usernames = [];
784
+
785
+ for (let i = 0; i < selectedRows.length; i++)
786
+ {
787
+ let dataItem = this._namesGrid.dataItem(selectedRows[i]);
788
+ usernames.push(dataItem.name);
789
+ }
790
+
791
+ this._requestBannedUsersRemoval(usernames, this._zonesDD.value());
792
+ }
793
+
794
+ _onRemoveAllNamesClick()
795
+ {
796
+ this.shellCtrl.showConfirmWarning(`Are you sure you want to remove all banned usernames?`, $.proxy(this._onRemovAllNamesConfirm, this));
797
+ }
798
+
799
+ _onRemovAllNamesConfirm()
800
+ {
801
+ this._requestBannedUsersRemoval(null, this._zonesDD.value());
802
+ }
803
+
804
+ _onRefreshIpClick()
805
+ {
806
+ this._getBannedIPs();
807
+ }
808
+
809
+ _onRemoveIpClick()
810
+ {
811
+ this.shellCtrl.showConfirmWarning(`Are you sure you want to remove the banning for the selected IP address${this._ipGrid.select().length > 1 ? 'es' : ''}?`, $.proxy(this._onRemoveIpConfirm, this));
812
+ }
813
+
814
+ _onRemoveIpConfirm()
815
+ {
816
+ let selectedRows = this._ipGrid.select();
817
+ let ipAddresses = [];
818
+
819
+ for (let i = 0; i < selectedRows.length; i++)
820
+ {
821
+ let dataItem = this._ipGrid.dataItem(selectedRows[i]);
822
+ ipAddresses.push(dataItem.ipAddress);
823
+ }
824
+
825
+ this._requestBannedIPsRemoval(ipAddresses);
826
+ }
827
+
828
+ _onRemoveAllIpClick()
829
+ {
830
+ this.shellCtrl.showConfirmWarning(`Are you sure you want to remove all banned IP addresses?`, $.proxy(this._onRemovAllIpConfirm, this));
831
+ }
832
+
833
+ _onRemovAllIpConfirm()
834
+ {
835
+ this._requestBannedIPsRemoval(null);
836
+ }
837
+
838
+ //------------------------------------
839
+ // PRIVATE METHODS
840
+ //------------------------------------
841
+
842
+ _getBannedIPs()
843
+ {
844
+ // Remove selection
845
+ this._ipGrid.clearSelection();
846
+
847
+ // Clear banned IPs table
848
+ this._ipGrid.setDataSource([]);
849
+
850
+ // Send request to extension
851
+ this.sendExtensionRequest(this.REQ_GET_IPADDRESSES);
852
+ }
853
+
854
+ _getBannedUsernames()
855
+ {
856
+ // Remove selection
857
+ this._namesGrid.clearSelection();
858
+
859
+ // Clear banned IPs table
860
+ this._namesGrid.setDataSource([]);
861
+
862
+ if (this._zonesDD.select() > 0)
863
+ {
864
+ // Get zone ID
865
+ let params = new SFS2X.SFSObject();
866
+ params.putUtfString('zone', this._zonesDD.value());
867
+
868
+ // Send request to extension
869
+ this.sendExtensionRequest(this.REQ_GET_USERNAMES, params);
870
+ }
871
+ }
872
+
873
+ _generateBannedEntries(banData)
874
+ {
875
+ let bannedEntries = [];
876
+
877
+ for (let i = 0; i < banData.size(); i++)
878
+ {
879
+ const bu = _data_banned_user__WEBPACK_IMPORTED_MODULE_1__["BannedUser"].fromSFSArray(banData.getSFSArray(i));
880
+ bannedEntries.push(bu);
881
+ }
882
+
883
+ return bannedEntries;
884
+ }
885
+
886
+ _requestBannedUsersRemoval(usernames, zone)
887
+ {
888
+ // If the usernames array is null, server will remove all banned usernames
889
+ let params = new SFS2X.SFSObject();
890
+ params.putUtfString('zone', zone);
891
+
892
+ if (usernames == null)
893
+ params.putNull('uNames');
894
+ else
895
+ params.putUtfStringArray('uNames', usernames);
896
+
897
+ this.sendExtensionRequest(this.REQ_REMOVE_USERNAMES, params);
898
+ }
899
+
900
+ _requestBannedIPsRemoval(ipAddresses)
901
+ {
902
+ // If the usernames array is null, server will remove all banned usernames
903
+ let params = new SFS2X.SFSObject();
904
+
905
+ if (ipAddresses == null)
906
+ params.putNull('IPs');
907
+ else
908
+ params.putUtfStringArray('IPs', ipAddresses);
909
+
910
+ this.sendExtensionRequest(this.REQ_REMOVE_IPADDRESSES, params);
911
+ }
912
+
913
+ //---------------------------------
914
+ // PRIVATE GETTERS
915
+ //---------------------------------
916
+
917
+ get _tomorrow()
918
+ {
919
+ let tomorrow = moment__WEBPACK_IMPORTED_MODULE_2__().add(1, 'd');
920
+ return tomorrow.toDate();
921
+ }
922
+ }
923
+
924
+ /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery")))
925
+
926
+ /***/ })
927
+
928
+ }]);
929
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2pzL2NvcmUvbW9kdWxlcy9tb2R1bGUtMS5idW5kbGUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHBsaWNhdGlvbi8uL3NyYy9kYXRhL2Jhbm5lZC11c2VyLmpzIiwid2VicGFjazovL2FwcGxpY2F0aW9uLy4vc3JjL21vZHVsZXMvYmFuLW1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjbGFzcyBCYW5uZWRVc2VyXG57XG5cdGNvbnN0cnVjdG9yKG5hbWUsIHpvbmUpXG5cdHtcblx0XHR0aGlzLkRBVEVfRk9STUFUID0gJ0REL01NL1lZWVkgSEg6bW0nO1xuXG5cdCAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMuem9uZSA9IHpvbmU7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVNGU0FycmF5KHNmc2EpXG5cdHtcblx0XHRsZXQgYnUgPSBuZXcgQmFubmVkVXNlcihzZnNhLmdldFV0ZlN0cmluZygwKSwgc2ZzYS5nZXRVdGZTdHJpbmcoMSkpO1xuXG5cdFx0YnUubW9kZSA9IHNmc2EuZ2V0VXRmU3RyaW5nKDIpO1xuXHRcdGJ1LnJlYXNvbiA9IHNmc2EuZ2V0VXRmU3RyaW5nKDMpO1xuXHRcdGJ1LmFkbWluTmFtZSA9IHNmc2EuZ2V0VXRmU3RyaW5nKDQpO1xuXHRcdGJ1LmlwQWRkcmVzcyA9IHNmc2EuZ2V0VXRmU3RyaW5nKDUpO1xuXHRcdGJ1LmJhblRpbWVNaWxsaXMgPSBzZnNhLmdldExvbmcoNik7XG5cdFx0YnUuYmFuRHVyYXRpb25NaWxsaXMgPSBzZnNhLmdldExvbmcoNyk7XG5cdFx0YnUuZXhwaXJhdGlvbkRhdGUgPSBidS5fZ2V0RXhwaXJhdGlvbkRhdGUoKTtcblx0XHRidS5iYW5EYXRlID0gYnUuX2dldEJhbkRhdGUoKTtcblxuXHRcdHJldHVybiBidTtcblx0fVxuXG5cdF9nZXRFeHBpcmF0aW9uRGF0ZSgpXG5cdHtcblx0XHRjb25zdCBleHBpcmVPbiA9IG1vbWVudCh0aGlzLmJhblRpbWVNaWxsaXMgKyB0aGlzLmJhbkR1cmF0aW9uTWlsbGlzKTtcblxuXHRcdGlmIChleHBpcmVPbi55ZWFyKCkgPj0gbW9tZW50KCkueWVhcigpICsgMTAwKVxuXHRcdFx0cmV0dXJuICdOZXZlcic7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGV4cGlyZU9uLmZvcm1hdCh0aGlzLkRBVEVfRk9STUFUKTtcblx0fVxuXG5cdF9nZXRCYW5EYXRlKClcblx0e1xuXHRcdHJldHVybiBtb21lbnQodGhpcy5iYW5UaW1lTWlsbGlzKS5mb3JtYXQodGhpcy5EQVRFX0ZPUk1BVCk7XG5cdH1cbn1cbiIsImltcG9ydCB7QmFzZU1vZHVsZX0gZnJvbSAnLi9iYXNlLW1vZHVsZSc7XG5pbXBvcnQge0Jhbm5lZFVzZXJ9IGZyb20gJy4uL2RhdGEvYmFubmVkLXVzZXInO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhbk1hbmFnZXIgZXh0ZW5kcyBCYXNlTW9kdWxlXG57XG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHQgICAgc3VwZXIoJ2Jhbk1hbmFnZXInKTtcblxuXHRcdC8vIE91dGdvaW5nIHJlcXVlc3RzXG5cdFx0dGhpcy5SRVFfR0VUX1pPTkVTID0gJ2dldFpvbmVzJztcblx0XHR0aGlzLlJFUV9HRVRfVVNFUk5BTUVTID0gJ2dldFVOYW1lcyc7XG5cdFx0dGhpcy5SRVFfR0VUX0lQQUREUkVTU0VTID0gJ2dldElQcyc7XG5cdFx0dGhpcy5SRVFfUkVNT1ZFX1VTRVJOQU1FUyA9ICdyZW1vdmVVTmFtZXMnO1xuXHRcdHRoaXMuUkVRX1JFTU9WRV9JUEFERFJFU1NFUyA9ICdyZW1vdmVJUHMnO1xuXHRcdHRoaXMuUkVRX0JBTiA9ICdiYW4nO1xuXG5cdFx0Ly8gSW5jb21pbmcgcmVzcG9uc2VzXG5cdFx0dGhpcy5SRVNQX1pPTkVTID0gJ3pvbmVzJztcblx0XHR0aGlzLlJFU1BfVVNFUk5BTUVTID0gJ3VOYW1lcyc7XG5cdFx0dGhpcy5SRVNQX0lQQUREUkVTU0VTID0gJ0lQcyc7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBDT01NT04gTU9EVUxFIElOVEVSRkFDRSBNRVRIT0RTXG5cdC8vIFRoaXMgbWVtYmVycyBhcmUgdXNlZCBieSB0aGUgbWFpbiBjb250cm9sbGVyXG5cdC8vIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIG1vZHVsZSdzIGNvbnRyb2xsZXIuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0aW5pdGlhbGl6ZShpZERhdGEsIHNoZWxsQ29udHJvbGxlcilcblx0e1xuXHRcdC8vIENhbGwgc3VwZXIgbWV0aG9kXG5cdFx0c3VwZXIuaW5pdGlhbGl6ZShpZERhdGEsIHNoZWxsQ29udHJvbGxlcik7XG5cblx0XHQvLyBJbml0aWFsaXplIHNjcm9sbGluZyB0YWJzXG5cdFx0JCgnI2JubS10YWJOYXZpZ2F0b3IgPiAjdGFicycpLnNjcm9sbGluZ1RhYnMoe1xuXHRcdFx0Ym9vdHN0cmFwVmVyc2lvbjogNCxcblx0XHRcdHNjcm9sbFRvVGFiRWRnZTogdHJ1ZSxcblx0XHRcdGVuYWJsZVN3aXBpbmc6IHRydWUsXG5cdFx0XHRkaXNhYmxlU2Nyb2xsQXJyb3dzT25GdWxseVNjcm9sbGVkOiB0cnVlLFxuXHRcdFx0Y3NzQ2xhc3NMZWZ0QXJyb3c6ICdmYSBmYS1jaGV2cm9uLWxlZnQnLFxuXHRcdFx0Y3NzQ2xhc3NSaWdodEFycm93OiAnZmEgZmEtY2hldnJvbi1yaWdodCdcblx0XHR9KTtcblxuXHRcdC8vIEluaXRpYWxpemUgem9uZSBmaWx0ZXIgZHJvcGRvd25cblx0XHR0aGlzLl96b25lc0REID0gJCgnI2JubS16b25lc0REJykua2VuZG9Ecm9wRG93bkxpc3Qoe1xuXHRcdFx0Y2hhbmdlOiAkLnByb3h5KHRoaXMuX29uWm9uZUNoYW5nZSwgdGhpcylcblx0XHR9KS5kYXRhKCdrZW5kb0Ryb3BEb3duTGlzdCcpO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBiYW4gYnV0dG9uXG5cdFx0JCgnI2JubS1zaG93QmFuTW9kYWxCdCcpLm9uKCdjbGljaycsICQucHJveHkodGhpcy5fb25TaG93QmFuTW9kYWxDbGljaywgdGhpcykpO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBiYW5uZWQgSVBzIGdyaWRcblx0XHR0aGlzLl9pcEdyaWQgPSAkKCcjYm5tLWlwR3JpZCcpLmtlbmRvR3JpZCh7XG5cdFx0XHRzY3JvbGxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG5cdFx0XHQvL3Jlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdHNlbGVjdGFibGU6ICdtdWx0aXBsZScsXG4gICAgICAgICAgICBjb2x1bW5zOlxuICAgICAgICAgICAgW1xuXHRcdFx0XHR7XG5cdCAgICAgICAgICAgICAgICBmaWVsZDogJ2lwQWRkcmVzcycsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTUwLFxuXHRcdFx0XHRcdHRpdGxlOiAnSVAgQWRkcmVzcycsXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICAgIGZpZWxkOiAnYmFuRGF0ZScsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTIwLFxuXHQgICAgICAgICAgICAgICAgdGl0bGU6ICdEYXRlJyxcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICdleHBpcmF0aW9uRGF0ZScsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTIwLFxuXHQgICAgICAgICAgICAgICAgdGl0bGU6ICdFeHBpcmF0aW9uJyxcblx0ICAgICAgICAgICAgfSxcblx0XHRcdFx0e1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICdyZWFzb24nLFxuXHQgICAgICAgICAgICAgICAgd2lkdGg6IDI1MCxcblx0XHRcdFx0XHR0aXRsZTogJ1JlYXNvbicsXG5cdCAgICAgICAgICAgIH0sXG5cdFx0XHRcdHtcblx0ICAgICAgICAgICAgICAgIGZpZWxkOiAnYWRtaW5OYW1lJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAxNTAsXG5cdFx0XHRcdFx0dGl0bGU6ICdCYW5uZWQgQnknLFxuXHQgICAgICAgICAgICB9LFxuXHRcdFx0XSxcblx0XHRcdG5vUmVjb3Jkczoge1xuXHRcdFx0XHR0ZW1wbGF0ZTogJ05vIGJhbm5lZCBJUCBhZGRyZXNzZXMuJ1xuXHRcdFx0fSxcblx0XHRcdGNoYW5nZTogJC5wcm94eSh0aGlzLl9vbklwR3JpZFNlbGVjdGlvbkNoYW5nZSwgdGhpcyksXG5cdFx0XHRkYXRhU291cmNlOiBbXVxuICAgICAgICB9KS5kYXRhKCdrZW5kb0dyaWQnKTtcblxuXHRcdC8vIEluaXRpYWxpemUgYmFubmVkIHVzZXJuYW1lcyBncmlkXG5cdFx0dGhpcy5fbmFtZXNHcmlkID0gJCgnI2JubS1uYW1lc0dyaWQnKS5rZW5kb0dyaWQoe1xuXHRcdFx0c2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0Ly9yZXNpemFibGU6IHRydWUsXG5cdFx0XHRzZWxlY3RhYmxlOiAnbXVsdGlwbGUnLFxuICAgICAgICAgICAgY29sdW1uczpcbiAgICAgICAgICAgIFtcblx0XHRcdFx0e1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAxNTAsXG5cdFx0XHRcdFx0dGl0bGU6ICdVc2VybmFtZScsXG5cdCAgICAgICAgICAgIH0sXG5cdFx0XHRcdHtcblx0ICAgICAgICAgICAgICAgIGZpZWxkOiAnYmFuRGF0ZScsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTIwLFxuXHQgICAgICAgICAgICAgICAgdGl0bGU6ICdEYXRlJyxcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICdleHBpcmF0aW9uRGF0ZScsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTIwLFxuXHQgICAgICAgICAgICAgICAgdGl0bGU6ICdFeHBpcmF0aW9uJyxcblx0ICAgICAgICAgICAgfSxcblx0XHRcdFx0e1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICdyZWFzb24nLFxuXHQgICAgICAgICAgICAgICAgd2lkdGg6IDI1MCxcblx0XHRcdFx0XHR0aXRsZTogJ1JlYXNvbicsXG5cdCAgICAgICAgICAgIH0sXG5cdFx0XHRcdHtcblx0ICAgICAgICAgICAgICAgIGZpZWxkOiAnYWRtaW5OYW1lJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAxNTAsXG5cdFx0XHRcdFx0dGl0bGU6ICdCYW5uZWQgQnknLFxuXHQgICAgICAgICAgICB9LFxuXHRcdFx0XSxcblx0XHRcdG5vUmVjb3Jkczoge1xuXHRcdFx0XHR0ZW1wbGF0ZTogJ05vIGJhbm5lZCB1c2VybmFtZXMuJ1xuXHRcdFx0fSxcblx0XHRcdGNoYW5nZTogJC5wcm94eSh0aGlzLl9vbk5hbWVzR3JpZFNlbGVjdGlvbkNoYW5nZSwgdGhpcyksXG5cdFx0XHRkYXRhU291cmNlOiBbXVxuICAgICAgICB9KS5kYXRhKCdrZW5kb0dyaWQnKTtcblxuXHRcdC8vIEluaXRpYWxpemUgcmVmcmVzaCBhbmQgcmVtb3ZlIGJ1dHRvbnNcblx0XHQkKCcjYm5tLXJlZnJlc2hOYW1lc0J0Jykub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLl9vblJlZnJlc2hOYW1lc0NsaWNrLCB0aGlzKSk7XG5cdFx0JCgnI2JubS1yZW1vdmVOYW1lQnQnKS5vbignY2xpY2snLCAkLnByb3h5KHRoaXMuX29uUmVtb3ZlTmFtZXNDbGljaywgdGhpcykpO1xuXHRcdCQoJyNibm0tcmVtb3ZlQWxsTmFtZXNCdCcpLm9uKCdjbGljaycsICQucHJveHkodGhpcy5fb25SZW1vdmVBbGxOYW1lc0NsaWNrLCB0aGlzKSk7XG5cdFx0JCgnI2JubS1yZWZyZXNoSXBCdCcpLm9uKCdjbGljaycsICQucHJveHkodGhpcy5fb25SZWZyZXNoSXBDbGljaywgdGhpcykpO1xuXHRcdCQoJyNibm0tcmVtb3ZlSXBCdCcpLm9uKCdjbGljaycsICQucHJveHkodGhpcy5fb25SZW1vdmVJcENsaWNrLCB0aGlzKSk7XG5cdFx0JCgnI2JubS1yZW1vdmVBbGxJcEJ0Jykub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLl9vblJlbW92ZUFsbElwQ2xpY2ssIHRoaXMpKTtcblxuXHRcdC8vIENvbmZpZ3VyZSBiYW4gcGFuZWxcblx0XHQkKCcjYm5tLWJhbk1vZGFsJykubW9kYWwoe1xuXHRcdFx0YmFja2Ryb3A6ICdzdGF0aWMnLFxuXHRcdFx0a2V5Ym9hcmQ6IGZhbHNlLFxuXHRcdFx0c2hvdzogZmFsc2UsXG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgbGlzdGVuZXIgZm9yIGJhbiBwYW5lbCBoaWRlXG5cdFx0JCgnI2JubS1iYW5Nb2RhbCcpLm9uKCdoaWRkZW4uYnMubW9kYWwnLCAkLnByb3h5KHRoaXMuX29uQmFuTW9kYWxIaWRkZW4sIHRoaXMpKTtcblxuXHRcdC8vIEluaXRpYWxpemUga2VuZG8gdmFsaWRhdGlvbiBvbiBmb2xkZXIgbmFtZSBmb3JtXG5cdFx0dGhpcy5fYmFuVmFsaWRhdG9yID0gJCgnI2JubS1iYW5Gb3JtJykua2VuZG9WYWxpZGF0b3Ioe30pLmRhdGEoJ2tlbmRvVmFsaWRhdG9yJyk7XG5cblx0XHQvLyBBZGQgbGlzdGVuZXIgdG8gQmFuIGJ1dHRvbiBjbGlja1xuXHRcdCQoJyNibm0tYmFuQnQnKS5vbignY2xpY2snLCAkLnByb3h5KHRoaXMuX29uQmFuQ2xpY2ssIHRoaXMpKTtcblxuXHRcdC8vIEluaXQgYmFuIGRlbGF5IG51bWVyaWMgc3RlcHBlclxuXHRcdHRoaXMuX2JhbkRlbGF5SW4gPSAkKCcjYm5tLW1vZGFsRGVsYXlOUycpLmtlbmRvTnVtZXJpY1RleHRCb3goe1xuXHRcdCAgICBtaW46IDAsXG5cdFx0ICAgIHN0ZXA6IDEsXG5cdFx0ICAgIGZvcm1hdDogJyMnXG5cdFx0fSkuZGF0YSgna2VuZG9OdW1lcmljVGV4dEJveCcpO1xuXG5cdFx0Ly8gSW5pdCBiYW4gZXhwaXJhdGlvbiBkYXRlIHBpY2tlclxuXHRcdHRoaXMuX2JhbkV4cERhdGVJbiA9ICQoJyNibm0tZXhwaXJhdGlvbkRQJykua2VuZG9EYXRlUGlja2VyKHtcblx0XHRcdHZhbHVlOiB0aGlzLl90b21vcnJvdyxcblx0XHRcdG1pbjogdGhpcy5fdG9tb3Jyb3csXG5cdFx0XHRmb290ZXI6IGZhbHNlLFxuXHRcdFx0Zm9ybWF0OiAnZGQvTU0veXl5eSdcblx0XHR9KS5kYXRhKCdrZW5kb0RhdGVQaWNrZXInKTtcblxuXHRcdC8vIERpc2FibGUgbWFudWFsIGRhdGUgaW5wdXRcblx0XHQkKCcjYm5tLWV4cGlyYXRpb25EUCcpLmF0dHIoJ3JlYWRvbmx5JywncmVhZG9ubHknKTtcblxuXHRcdC8vIEluaXQgYmFuIGV4cGlyYXRpb24gaG91cnMvbWludXRlcyBpbnB1dHNcblx0XHR0aGlzLl9iYW5FeHBIb3VySW4gPSAkKCcjYm5tLW1vZGFsRXhwSG91cnNOUycpLmtlbmRvTnVtZXJpY1RleHRCb3goe1xuXHRcdCAgICBtaW46IDAsXG5cdFx0XHRtYXg6IDk5LFxuXHRcdCAgICBzdGVwOiAxLFxuXHRcdCAgICBmb3JtYXQ6ICcjJ1xuXHRcdH0pLmRhdGEoJ2tlbmRvTnVtZXJpY1RleHRCb3gnKTtcblxuXHRcdHRoaXMuX2JhbkV4cE1pbkluID0gJCgnI2JubS1tb2RhbEV4cE1pbnNOUycpLmtlbmRvTnVtZXJpY1RleHRCb3goe1xuXHRcdCAgICBtaW46IDAsXG5cdFx0XHRtYXg6IDU5LFxuXHRcdCAgICBzdGVwOiAxLFxuXHRcdCAgICBmb3JtYXQ6ICcjJ1xuXHRcdH0pLmRhdGEoJ2tlbmRvTnVtZXJpY1RleHRCb3gnKTtcblxuXHRcdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdFx0Ly8gTG9hZCB6b25lcyBsaXN0XG5cdFx0dGhpcy5zZW5kRXh0ZW5zaW9uUmVxdWVzdCh0aGlzLlJFUV9HRVRfWk9ORVMpO1xuXG5cdFx0Ly8gTG9hZCBiYW5uZWQgSVAgYWRkcmVzc2VzXG5cdFx0Ly8gTm90ZTogd2UgZG9uJ3QgbG9hZCB0aGUgYmFubmVkIHVzZXJuYW1lcyBhdXRvbWF0aWNhbGx5IGJlY2F1c2UgYSB6b25lIG11c3QgYmUgc2VsZWN0ZWRcblx0XHR0aGlzLl9nZXRCYW5uZWRJUHMoKTtcblx0fVxuXG5cdGRlc3Ryb3koKVxuXHR7XG5cdFx0Ly8gQ2FsbCBzdXBlciBtZXRob2Rcblx0XHRzdXBlci5kZXN0cm95KCk7XG5cblx0XHQvLyBEZXN0cm95IHNjcm9sbGluZyB0YWJzXG5cdFx0JCgnI2JubS10YWJOYXZpZ2F0b3IgI3RhYnMnKS5zY3JvbGxpbmdUYWJzKCdkZXN0cm95Jyk7XG5cblx0XHQvLyBSZW1vdmUgY2xpY2sgbGlzdGVuZXJzXG5cdFx0JCgnI2JubS1zaG93QmFuTW9kYWxCdCcpLm9mZignY2xpY2snKTtcblx0XHQkKCcjYm5tLXJlZnJlc2hOYW1lc0J0Jykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNibm0tcmVtb3ZlTmFtZUJ0Jykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNibm0tcmVtb3ZlQWxsTmFtZXNCdCcpLm9mZignY2xpY2snKTtcblx0XHQkKCcjYm5tLXJlZnJlc2hJcEJ0Jykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNibm0tcmVtb3ZlSXBCdCcpLm9mZignY2xpY2snKTtcblx0XHQkKCcjYm5tLXJlbW92ZUFsbElwQnQnKS5vZmYoJ2NsaWNrJyk7XG5cdFx0JCgnI2JubS1iYW5CdCcpLm9mZignY2xpY2snKTtcblxuXHRcdC8vIEhpZGUgYmFuIHBhbmVsXG5cdFx0JCgnI2JubS1iYW5Nb2RhbCcpLm1vZGFsKCdoaWRlJyk7XG5cblx0XHQvLyBSZW1vdmUgcm9vbSBjcmVhdGlvbiBwYW5lbCBsaXN0ZW5lclxuXHRcdCQoJyNibm0tYmFuTW9kYWwnKS5vZmYoJ2hpZGRlbi5icy5tb2RhbCcpO1xuXHR9XG5cblx0b25FeHRlbnNpb25Db21tYW5kKGNvbW1hbmQsIGRhdGEpXG5cdHtcblx0XHQvLyBEYXRhIHJlY2VpdmVkXG5cdFx0aWYgKGNvbW1hbmQgPT0gdGhpcy5SRVNQX1pPTkVTKVxuXHRcdHtcblx0XHRcdGxldCB6b25lcyA9IGRhdGEuZ2V0VXRmU3RyaW5nQXJyYXkoJ3pvbmVzJyk7XG5cblx0XHRcdC8vIElmIHdlIGhhdmUgMSB6b25lIG9ubHksIHdlIHdpbGwgc2VsZWN0IGl0IGltbWVkaWF0ZWx5XG5cdFx0XHRjb25zdCBzZWxlY3RGaXJzdFpvbmUgPSB6b25lcy5sZW5ndGggPT0gMTtcblxuXHRcdFx0Ly8gU29ydCB6b25lcyBsaXN0XG5cdFx0XHR6b25lcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQWRkIFwibm9uZVwiIHpvbmVcblx0XHRcdHpvbmVzLnVuc2hpZnQoJ1tub25lXScpO1xuXG5cdFx0XHQvLyBTZXQgem9uZSBkcm9wZG93biBkYXRhc291cmNlXG5cdFx0XHR0aGlzLl96b25lc0RELnNldERhdGFTb3VyY2Uoem9uZXMpO1xuXG5cdFx0XHRpZiAoc2VsZWN0Rmlyc3Rab25lKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl96b25lc0RELnNlbGVjdCgxKTtcblx0XHRcdFx0dGhpcy5fZ2V0QmFubmVkVXNlcm5hbWVzKCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRoaXMuX3pvbmVzREQuc2VsZWN0KDApO1xuXHRcdH1cblxuXHRcdGVsc2UgaWYgKGNvbW1hbmQgPT0gdGhpcy5SRVNQX1VTRVJOQU1FUylcblx0XHR7XG5cdFx0XHQvLyBTdWJzdGl0dXRlIGdyaWQncyBkYXRhIHNvdXJjZSwgcmV0YWluaW5nIGN1cnJlbnQgc29ydGluZ1xuXHRcdFx0bGV0IGN1cnJTb3J0ID0gdGhpcy5fbmFtZXNHcmlkLmRhdGFTb3VyY2Uuc29ydCgpO1xuXG5cdFx0XHRsZXQgZHMgPSBuZXcga2VuZG8uZGF0YS5EYXRhU291cmNlKHtcblx0XHRcdFx0c29ydDogY3VyclNvcnQsXG5cdFx0XHRcdGRhdGE6IHRoaXMuX2dlbmVyYXRlQmFubmVkRW50cmllcyhkYXRhLmdldFNGU0FycmF5KCd1TmFtZXMnKSlcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBc3NpZ24gZGF0YSBzb3VyY2UgdG8gZ3JpZFxuXHRcdFx0dGhpcy5fbmFtZXNHcmlkLnNldERhdGFTb3VyY2UoZHMpO1xuXG5cdFx0XHQvLyBFbmFibGUgcmVtb3ZlIGFsbCBidXR0b25cblx0XHRcdCQoJyNibm0tcmVtb3ZlQWxsTmFtZXNCdCcpLmF0dHIoJ2Rpc2FibGVkJywgZHMudG90YWwoKSA9PSAwKVxuXHRcdH1cblx0XHRlbHNlIGlmIChjb21tYW5kID09IHRoaXMuUkVTUF9JUEFERFJFU1NFUylcblx0XHR7XG5cdFx0XHQvLyBTdWJzdGl0dXRlIGdyaWQncyBkYXRhIHNvdXJjZSwgcmV0YWluaW5nIGN1cnJlbnQgc29ydGluZ1xuXHRcdFx0bGV0IGN1cnJTb3J0ID0gdGhpcy5faXBHcmlkLmRhdGFTb3VyY2Uuc29ydCgpO1xuXG5cdFx0XHRsZXQgZHMgPSBuZXcga2VuZG8uZGF0YS5EYXRhU291cmNlKHtcblx0XHRcdFx0c29ydDogY3VyclNvcnQsXG5cdFx0XHRcdGRhdGE6IHRoaXMuX2dlbmVyYXRlQmFubmVkRW50cmllcyhkYXRhLmdldFNGU0FycmF5KCdJUHMnKSlcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBc3NpZ24gZGF0YSBzb3VyY2UgdG8gZ3JpZFxuXHRcdFx0dGhpcy5faXBHcmlkLnNldERhdGFTb3VyY2UoZHMpO1xuXG5cdFx0XHQvLyBFbmFibGUgcmVtb3ZlIGFsbCBidXR0b25cblx0XHRcdCQoJyNibm0tcmVtb3ZlQWxsSXBCdCcpLmF0dHIoJ2Rpc2FibGVkJywgZHMudG90YWwoKSA9PSAwKVxuXHRcdH1cblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIFVJIEVWRU5UIExJU1RFTkVSU1xuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdF9vblNob3dCYW5Nb2RhbENsaWNrKClcblx0e1xuXHRcdC8vIERpc3BsYXkgem9uZSBuYW1lXG5cdFx0JCgnI2JubS1tb2RhbFpvbmVMYicpLnRleHQodGhpcy5fem9uZXNERC52YWx1ZSgpKVxuXG5cdFx0Ly8gRGlzcGxheSBiYW4gcGFuZWxcblx0XHQkKCcjYm5tLWJhbk1vZGFsJykubW9kYWwoJ3Nob3cnKTtcblxuXHRcdC8vIEZvY3VzIG5hbWUgZmllbGRcblx0XHQkKCcjYm5tLW1vZGFsTmFtZUluJykuZm9jdXMoKTtcblx0fVxuXG5cdF9vbkJhbk1vZGFsSGlkZGVuKGUpXG5cdHtcblx0XHQvLyBSZXNldCB2YWxpZGF0b3Jcblx0XHR0aGlzLl9iYW5WYWxpZGF0b3IuaGlkZU1lc3NhZ2VzKCk7XG5cblx0XHQvLyBUaGUgbWV0aG9kIGFib3ZlIGRvZXNuJ3QgcmVtb3ZlIHRoZSBrLWludmFsaWQgY2xhc3NlcyBhbmQgYXJpYS1pbnZhbGlkPVwidHJ1ZVwiIGF0dHJpYnV0ZXMgZnJvbSBpbnB1dHNcblx0XHQvLyBMZXQncyBkbyBpdCBtYW51YWxseVxuXHRcdCQoJyNibm0tYmFuRm9ybSAuay1pbnZhbGlkJykucmVtb3ZlQ2xhc3MoJ2staW52YWxpZCcpO1xuXHRcdCQoJyNibm0tYmFuRm9ybSBbYXJpYS1pbnZhbGlkPVwidHJ1ZVwiXScpLnJlbW92ZUF0dHIoJ2FyaWEtaW52YWxpZCcpO1xuXG5cdFx0Ly8gUmVzZXQgYmFuIGZvcm1cblx0XHQkKCcjYm5tLW1vZGFsTmFtZUluJykudmFsKCcnKTtcblx0XHQkKCcjYm5tLW1vZGFsUmVhc29uSW4nKS52YWwoJycpO1xuXHRcdCQoJyNibm0tbW9kYWxNZXNzYWdlSW4nKS52YWwoJycpO1xuXG5cdFx0dGhpcy5fYmFuRGVsYXlJbi52YWx1ZSg1KTtcblxuXHRcdCQoJ2lucHV0W25hbWU9XCJleHBpcmF0aW9uXCJdJykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xuXHRcdCQoJyNibm0tZXhwaXJhdGlvblJCMCcpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblxuXHRcdHRoaXMuX2JhbkV4cEhvdXJJbi52YWx1ZSgxKTtcblx0XHR0aGlzLl9iYW5FeHBNaW5Jbi52YWx1ZSgwKTtcblxuXHRcdHRoaXMuX2JhbkV4cERhdGVJbi5taW4odGhpcy5fdG9tb3Jyb3cpO1xuXHRcdHRoaXMuX2JhbkV4cERhdGVJbi52YWx1ZSh0aGlzLl90b21vcnJvdyk7XG5cdH1cblxuXHRfb25CYW5DbGljaygpXG5cdHtcblx0XHRpZiAodGhpcy5fYmFuVmFsaWRhdG9yLnZhbGlkYXRlKCkpXG5cdFx0e1xuXHRcdFx0Ly8gUmV0cmlldmUgYmFuIGRldGFpbHNcblx0XHRcdGxldCBwYXJhbXMgPSBuZXcgU0ZTMlguU0ZTT2JqZWN0KCk7XG5cblx0XHRcdHBhcmFtcy5wdXRVdGZTdHJpbmcoJ3pvbmUnLCB0aGlzLl96b25lc0RELnZhbHVlKCkpO1xuXHRcdFx0cGFyYW1zLnB1dFV0ZlN0cmluZygnbmFtZScsICQoJyNibm0tbW9kYWxOYW1lSW4nKS52YWwoKSk7XG5cdFx0XHRwYXJhbXMucHV0VXRmU3RyaW5nKCdtc2cnLCAkKCcjYm5tLW1vZGFsTWVzc2FnZUluJykudmFsKCkpO1xuXHRcdFx0cGFyYW1zLnB1dEludCgnZGVsYXknLCB0aGlzLl9iYW5EZWxheUluLnZhbHVlKCkgIT0gbnVsbCA/IHRoaXMuX2JhbkRlbGF5SW4udmFsdWUoKSA6IDApO1xuXHRcdFx0cGFyYW1zLnB1dFV0ZlN0cmluZygncmVhc29uJywgJCgnI2JubS1tb2RhbFJlYXNvbkluJykudmFsKCkpO1xuXG5cdFx0XHRjb25zdCBleHAgPSAkKCdpbnB1dFtuYW1lPVwiZXhwaXJhdGlvblwiXTpjaGVja2VkJykudmFsKCk7XG5cdFx0XHRsZXQgZHVyYXRpb24gPSAtMTtcblxuXHRcdFx0aWYgKGV4cCA9PSAnYWZ0ZXInKVxuXHRcdFx0e1xuXHRcdFx0XHRjb25zdCBob3VycyA9IHRoaXMuX2JhbkV4cEhvdXJJbi52YWx1ZSgpICE9IG51bGwgPyB0aGlzLl9iYW5FeHBIb3VySW4udmFsdWUoKSA6IDA7XG5cdFx0XHRcdGNvbnN0IG1pbnV0ZXMgPSB0aGlzLl9iYW5FeHBNaW5Jbi52YWx1ZSgpICE9IG51bGwgPyB0aGlzLl9iYW5FeHBNaW5Jbi52YWx1ZSgpIDogMDtcblxuXHRcdFx0XHRkdXJhdGlvbiA9IChob3VycyAqIDYwKSArIG1pbnV0ZXM7XG5cblx0XHRcdFx0aWYgKGR1cmF0aW9uIDw9IDApXG5cdFx0XHRcdFx0ZHVyYXRpb24gPSAxO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZXhwID09ICdvbicpXG5cdFx0XHR7XG5cdFx0XHRcdGNvbnN0IG9uRGF0ZSA9IG1vbWVudCh0aGlzLl9iYW5FeHBEYXRlSW4udmFsdWUoKSk7XG5cdFx0XHRcdGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuXG5cdFx0XHRcdGR1cmF0aW9uID0gb25EYXRlLnN0YXJ0T2YoJ2RheScpLmRpZmYobm93LnN0YXJ0T2YoJ21pbnV0ZScpLCAnbWludXRlcycpO1xuXG5cdFx0XHRcdGlmIChkdXJhdGlvbiA8PSAwKVxuXHRcdFx0XHRcdGR1cmF0aW9uID0gMTtcblx0XHRcdH1cblxuXHRcdFx0cGFyYW1zLnB1dEludCgnZHVyTWlucycsIGR1cmF0aW9uKTtcblxuXHRcdFx0Ly8gU2VuZCBiYW4gcmVxdWVzdCB0byBzZXJ2ZXJcblx0XHRcdHRoaXMuc2VuZEV4dGVuc2lvblJlcXVlc3QodGhpcy5SRVFfQkFOLCBwYXJhbXMpO1xuXG5cdFx0XHQvLyBSZWZyZXNoIGxpc3Rcblx0XHRcdHRoaXMuX2dldEJhbm5lZFVzZXJuYW1lcygpO1xuXG5cdFx0XHQvLyBGb2N1cyB1c2VybmFtZSBmaWVsZFxuXHRcdFx0JCgnI2JubS1tb2RhbE5hbWVJbicpLmZvY3VzKCk7XG5cdFx0XHQkKCcjYm5tLW1vZGFsTmFtZUluJykuc2VsZWN0KCk7XG5cdFx0fVxuXHR9XG5cblx0X29uWm9uZUNoYW5nZSgpXG5cdHtcblx0XHQkKCcjYm5tLW5hbWVzQnV0dG9ucycpLmF0dHIoJ2Rpc2FibGVkJywgdGhpcy5fem9uZXNERC5zZWxlY3QoKSA9PSAwKTtcblx0XHQkKCcjYm5tLXNob3dCYW5Nb2RhbEJ0JykuYXR0cignZGlzYWJsZWQnLCB0aGlzLl96b25lc0RELnNlbGVjdCgpID09IDApO1xuXG5cdFx0dGhpcy5fZ2V0QmFubmVkVXNlcm5hbWVzKCk7XG5cdH1cblxuXHRfb25OYW1lc0dyaWRTZWxlY3Rpb25DaGFuZ2UoKVxuXHR7XG5cdFx0Ly8gRW5hYmxlL2Rpc2FibGUgcmVtb3ZlIGJ1dHRvblxuXHRcdGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuX25hbWVzR3JpZC5zZWxlY3QoKTtcblx0XHQkKCcjYm5tLXJlbW92ZU5hbWVCdCcpLmF0dHIoJ2Rpc2FibGVkJywgc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSAwKTtcblx0fVxuXG5cdF9vbklwR3JpZFNlbGVjdGlvbkNoYW5nZSgpXG5cdHtcblx0XHQvLyBFbmFibGUvZGlzYWJsZSByZW1vdmUgYnV0dG9uXG5cdFx0Y29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5faXBHcmlkLnNlbGVjdCgpO1xuXHRcdCQoJyNibm0tcmVtb3ZlSXBCdCcpLmF0dHIoJ2Rpc2FibGVkJywgc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSAwKTtcblx0fVxuXG5cdF9vblJlZnJlc2hOYW1lc0NsaWNrKClcblx0e1xuXHRcdHRoaXMuX2dldEJhbm5lZFVzZXJuYW1lcygpO1xuXHR9XG5cblx0X29uUmVtb3ZlTmFtZXNDbGljaygpXG5cdHtcblx0XHR0aGlzLnNoZWxsQ3RybC5zaG93Q29uZmlybVdhcm5pbmcoYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhlIGJhbm5pbmcgZm9yIHRoZSBzZWxlY3RlZCB1c2VybmFtZSR7dGhpcy5faXBHcmlkLnNlbGVjdCgpLmxlbmd0aCA+IDEgPyAncycgOiAnJ30/YCwgJC5wcm94eSh0aGlzLl9vblJlbW92ZU5hbWVzQ29uZmlybSwgdGhpcykpO1xuXHR9XG5cblx0X29uUmVtb3ZlTmFtZXNDb25maXJtKClcblx0e1xuXHRcdGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLl9uYW1lc0dyaWQuc2VsZWN0KCk7XG5cdFx0bGV0IHVzZXJuYW1lcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZFJvd3MubGVuZ3RoOyBpKyspXG5cdFx0e1xuXHRcdFx0bGV0IGRhdGFJdGVtID0gdGhpcy5fbmFtZXNHcmlkLmRhdGFJdGVtKHNlbGVjdGVkUm93c1tpXSk7XG5cdFx0XHR1c2VybmFtZXMucHVzaChkYXRhSXRlbS5uYW1lKTtcblx0XHR9XG5cblx0XHR0aGlzLl9yZXF1ZXN0QmFubmVkVXNlcnNSZW1vdmFsKHVzZXJuYW1lcywgdGhpcy5fem9uZXNERC52YWx1ZSgpKTtcblx0fVxuXG5cdF9vblJlbW92ZUFsbE5hbWVzQ2xpY2soKVxuXHR7XG5cdFx0dGhpcy5zaGVsbEN0cmwuc2hvd0NvbmZpcm1XYXJuaW5nKGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBiYW5uZWQgdXNlcm5hbWVzP2AsICQucHJveHkodGhpcy5fb25SZW1vdkFsbE5hbWVzQ29uZmlybSwgdGhpcykpO1xuXHR9XG5cblx0X29uUmVtb3ZBbGxOYW1lc0NvbmZpcm0oKVxuXHR7XG5cdFx0dGhpcy5fcmVxdWVzdEJhbm5lZFVzZXJzUmVtb3ZhbChudWxsLCB0aGlzLl96b25lc0RELnZhbHVlKCkpO1xuXHR9XG5cblx0X29uUmVmcmVzaElwQ2xpY2soKVxuXHR7XG5cdFx0dGhpcy5fZ2V0QmFubmVkSVBzKCk7XG5cdH1cblxuXHRfb25SZW1vdmVJcENsaWNrKClcblx0e1xuXHRcdHRoaXMuc2hlbGxDdHJsLnNob3dDb25maXJtV2FybmluZyhgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgYmFubmluZyBmb3IgdGhlIHNlbGVjdGVkIElQIGFkZHJlc3Mke3RoaXMuX2lwR3JpZC5zZWxlY3QoKS5sZW5ndGggPiAxID8gJ2VzJyA6ICcnfT9gLCAkLnByb3h5KHRoaXMuX29uUmVtb3ZlSXBDb25maXJtLCB0aGlzKSk7XG5cdH1cblxuXHRfb25SZW1vdmVJcENvbmZpcm0oKVxuXHR7XG5cdFx0bGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuX2lwR3JpZC5zZWxlY3QoKTtcblx0XHRsZXQgaXBBZGRyZXNzZXMgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRSb3dzLmxlbmd0aDsgaSsrKVxuXHRcdHtcblx0XHRcdGxldCBkYXRhSXRlbSA9IHRoaXMuX2lwR3JpZC5kYXRhSXRlbShzZWxlY3RlZFJvd3NbaV0pO1xuXHRcdFx0aXBBZGRyZXNzZXMucHVzaChkYXRhSXRlbS5pcEFkZHJlc3MpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3JlcXVlc3RCYW5uZWRJUHNSZW1vdmFsKGlwQWRkcmVzc2VzKTtcblx0fVxuXG5cdF9vblJlbW92ZUFsbElwQ2xpY2soKVxuXHR7XG5cdFx0dGhpcy5zaGVsbEN0cmwuc2hvd0NvbmZpcm1XYXJuaW5nKGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBiYW5uZWQgSVAgYWRkcmVzc2VzP2AsICQucHJveHkodGhpcy5fb25SZW1vdkFsbElwQ29uZmlybSwgdGhpcykpO1xuXHR9XG5cblx0X29uUmVtb3ZBbGxJcENvbmZpcm0oKVxuXHR7XG5cdFx0dGhpcy5fcmVxdWVzdEJhbm5lZElQc1JlbW92YWwobnVsbCk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBQUklWQVRFIE1FVEhPRFNcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRfZ2V0QmFubmVkSVBzKClcblx0e1xuXHRcdC8vIFJlbW92ZSBzZWxlY3Rpb25cblx0XHR0aGlzLl9pcEdyaWQuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdC8vIENsZWFyIGJhbm5lZCBJUHMgdGFibGVcblx0XHR0aGlzLl9pcEdyaWQuc2V0RGF0YVNvdXJjZShbXSk7XG5cblx0XHQvLyBTZW5kIHJlcXVlc3QgdG8gZXh0ZW5zaW9uXG5cdFx0dGhpcy5zZW5kRXh0ZW5zaW9uUmVxdWVzdCh0aGlzLlJFUV9HRVRfSVBBRERSRVNTRVMpO1xuXHR9XG5cblx0X2dldEJhbm5lZFVzZXJuYW1lcygpXG5cdHtcblx0XHQvLyBSZW1vdmUgc2VsZWN0aW9uXG5cdFx0dGhpcy5fbmFtZXNHcmlkLmNsZWFyU2VsZWN0aW9uKCk7XG5cblx0XHQvLyBDbGVhciBiYW5uZWQgSVBzIHRhYmxlXG5cdFx0dGhpcy5fbmFtZXNHcmlkLnNldERhdGFTb3VyY2UoW10pO1xuXG5cdFx0aWYgKHRoaXMuX3pvbmVzREQuc2VsZWN0KCkgPiAwKVxuXHRcdHtcblx0XHRcdC8vIEdldCB6b25lIElEXG5cdFx0XHRsZXQgcGFyYW1zID0gbmV3IFNGUzJYLlNGU09iamVjdCgpO1xuXHRcdFx0cGFyYW1zLnB1dFV0ZlN0cmluZygnem9uZScsIHRoaXMuX3pvbmVzREQudmFsdWUoKSk7XG5cblx0XHRcdC8vIFNlbmQgcmVxdWVzdCB0byBleHRlbnNpb25cblx0XHRcdHRoaXMuc2VuZEV4dGVuc2lvblJlcXVlc3QodGhpcy5SRVFfR0VUX1VTRVJOQU1FUywgcGFyYW1zKTtcblx0XHR9XG5cdH1cblxuXHRfZ2VuZXJhdGVCYW5uZWRFbnRyaWVzKGJhbkRhdGEpXG5cdHtcblx0XHRsZXQgYmFubmVkRW50cmllcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBiYW5EYXRhLnNpemUoKTsgaSsrKVxuXHRcdHtcblx0XHRcdGNvbnN0IGJ1ID0gQmFubmVkVXNlci5mcm9tU0ZTQXJyYXkoYmFuRGF0YS5nZXRTRlNBcnJheShpKSk7XG5cdFx0XHRiYW5uZWRFbnRyaWVzLnB1c2goYnUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBiYW5uZWRFbnRyaWVzO1xuXHR9XG5cblx0X3JlcXVlc3RCYW5uZWRVc2Vyc1JlbW92YWwodXNlcm5hbWVzLCB6b25lKVxuXHR7XG5cdFx0Ly8gSWYgdGhlIHVzZXJuYW1lcyBhcnJheSBpcyBudWxsLCBzZXJ2ZXIgd2lsbCByZW1vdmUgYWxsIGJhbm5lZCB1c2VybmFtZXNcblx0XHRsZXQgcGFyYW1zID0gbmV3IFNGUzJYLlNGU09iamVjdCgpO1xuXHRcdHBhcmFtcy5wdXRVdGZTdHJpbmcoJ3pvbmUnLCB6b25lKTtcblxuXHRcdGlmICh1c2VybmFtZXMgPT0gbnVsbClcblx0XHRcdHBhcmFtcy5wdXROdWxsKCd1TmFtZXMnKTtcblx0XHRlbHNlXG5cdFx0XHRwYXJhbXMucHV0VXRmU3RyaW5nQXJyYXkoJ3VOYW1lcycsIHVzZXJuYW1lcyk7XG5cblx0XHR0aGlzLnNlbmRFeHRlbnNpb25SZXF1ZXN0KHRoaXMuUkVRX1JFTU9WRV9VU0VSTkFNRVMsIHBhcmFtcyk7XG5cdH1cblxuXHRfcmVxdWVzdEJhbm5lZElQc1JlbW92YWwoaXBBZGRyZXNzZXMpXG5cdHtcblx0XHQvLyBJZiB0aGUgdXNlcm5hbWVzIGFycmF5IGlzIG51bGwsIHNlcnZlciB3aWxsIHJlbW92ZSBhbGwgYmFubmVkIHVzZXJuYW1lc1xuXHRcdGxldCBwYXJhbXMgPSBuZXcgU0ZTMlguU0ZTT2JqZWN0KCk7XG5cblx0XHRpZiAoaXBBZGRyZXNzZXMgPT0gbnVsbClcblx0XHRcdHBhcmFtcy5wdXROdWxsKCdJUHMnKTtcblx0XHRlbHNlXG5cdFx0XHRwYXJhbXMucHV0VXRmU3RyaW5nQXJyYXkoJ0lQcycsIGlwQWRkcmVzc2VzKTtcblxuXHRcdHRoaXMuc2VuZEV4dGVuc2lvblJlcXVlc3QodGhpcy5SRVFfUkVNT1ZFX0lQQUREUkVTU0VTLCBwYXJhbXMpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gUFJJVkFURSBHRVRURVJTXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0Z2V0IF90b21vcnJvdygpXG5cdHtcblx0XHRsZXQgdG9tb3Jyb3cgPSBtb21lbnQoKS5hZGQoMSwgJ2QnKTtcblx0XHRyZXR1cm4gdG9tb3Jyb3cudG9EYXRlKCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQzFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QSIsInNvdXJjZVJvb3QiOiIifQ==