conflict-detection.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146
  1. /*!
  2. * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
  3. * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  4. * Copyright 2024 Fonticons, Inc.
  5. */
  6. (function (global, factory) {
  7. typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
  8. typeof define === 'function' && define.amd ? define(factory) :
  9. (factory());
  10. }(this, (function () { 'use strict';
  11. function ownKeys(object, enumerableOnly) {
  12. var keys = Object.keys(object);
  13. if (Object.getOwnPropertySymbols) {
  14. var symbols = Object.getOwnPropertySymbols(object);
  15. enumerableOnly && (symbols = symbols.filter(function (sym) {
  16. return Object.getOwnPropertyDescriptor(object, sym).enumerable;
  17. })), keys.push.apply(keys, symbols);
  18. }
  19. return keys;
  20. }
  21. function _objectSpread2(target) {
  22. for (var i = 1; i < arguments.length; i++) {
  23. var source = null != arguments[i] ? arguments[i] : {};
  24. i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
  25. _defineProperty(target, key, source[key]);
  26. }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
  27. Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
  28. });
  29. }
  30. return target;
  31. }
  32. function _typeof(obj) {
  33. "@babel/helpers - typeof";
  34. return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
  35. return typeof obj;
  36. } : function (obj) {
  37. return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
  38. }, _typeof(obj);
  39. }
  40. function _defineProperty(obj, key, value) {
  41. if (key in obj) {
  42. Object.defineProperty(obj, key, {
  43. value: value,
  44. enumerable: true,
  45. configurable: true,
  46. writable: true
  47. });
  48. } else {
  49. obj[key] = value;
  50. }
  51. return obj;
  52. }
  53. function _toConsumableArray(arr) {
  54. return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
  55. }
  56. function _arrayWithoutHoles(arr) {
  57. if (Array.isArray(arr)) return _arrayLikeToArray(arr);
  58. }
  59. function _iterableToArray(iter) {
  60. if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
  61. }
  62. function _unsupportedIterableToArray(o, minLen) {
  63. if (!o) return;
  64. if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  65. var n = Object.prototype.toString.call(o).slice(8, -1);
  66. if (n === "Object" && o.constructor) n = o.constructor.name;
  67. if (n === "Map" || n === "Set") return Array.from(o);
  68. if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  69. }
  70. function _arrayLikeToArray(arr, len) {
  71. if (len == null || len > arr.length) len = arr.length;
  72. for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
  73. return arr2;
  74. }
  75. function _nonIterableSpread() {
  76. throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  77. }
  78. var _WINDOW = {};
  79. var _DOCUMENT = {};
  80. try {
  81. if (typeof window !== 'undefined') _WINDOW = window;
  82. if (typeof document !== 'undefined') _DOCUMENT = document;
  83. } catch (e) {}
  84. var _ref = _WINDOW.navigator || {},
  85. _ref$userAgent = _ref.userAgent,
  86. userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
  87. var WINDOW = _WINDOW;
  88. var DOCUMENT = _DOCUMENT;
  89. var IS_BROWSER = !!WINDOW.document;
  90. var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
  91. var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
  92. var functions = [];
  93. var listener = function listener() {
  94. DOCUMENT.removeEventListener('DOMContentLoaded', listener);
  95. loaded = 1;
  96. functions.map(function (fn) {
  97. return fn();
  98. });
  99. };
  100. var loaded = false;
  101. if (IS_DOM) {
  102. loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
  103. if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);
  104. }
  105. function domready (fn) {
  106. if (!IS_DOM) return;
  107. loaded ? setTimeout(fn, 0) : functions.push(fn);
  108. }
  109. function report (_ref) {
  110. var nodesTested = _ref.nodesTested,
  111. nodesFound = _ref.nodesFound;
  112. var timedOutTests = {};
  113. for (var key in nodesFound) {
  114. if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {
  115. timedOutTests[key] = nodesFound[key];
  116. }
  117. }
  118. var conflictsCount = Object.keys(nodesTested.conflict).length;
  119. if (conflictsCount > 0) {
  120. console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large');
  121. var data = {};
  122. for (var _key in nodesTested.conflict) {
  123. var item = nodesTested.conflict[_key];
  124. data[_key] = {
  125. 'tagName': item.tagName,
  126. 'src/href': item.src || item.href || 'n/a',
  127. 'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
  128. };
  129. }
  130. console.table(data);
  131. }
  132. var noConflictsCount = Object.keys(nodesTested.noConflict).length;
  133. if (noConflictsCount > 0) {
  134. console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount === 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
  135. var _data = {};
  136. for (var _key2 in nodesTested.noConflict) {
  137. var _item = nodesTested.noConflict[_key2];
  138. _data[_key2] = {
  139. 'tagName': _item.tagName,
  140. 'src/href': _item.src || _item.href || 'n/a',
  141. 'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)'
  142. };
  143. }
  144. console.table(_data);
  145. }
  146. var timeOutCount = Object.keys(timedOutTests).length;
  147. if (timeOutCount > 0) {
  148. console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount === 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
  149. var _data2 = {};
  150. for (var _key3 in timedOutTests) {
  151. var _item2 = timedOutTests[_key3];
  152. _data2[_key3] = {
  153. 'tagName': _item2.tagName,
  154. 'src/href': _item2.src || _item2.href || 'n/a',
  155. 'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)'
  156. };
  157. }
  158. console.table(_data2);
  159. }
  160. }
  161. var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
  162. function createCommonjsModule(fn, module) {
  163. return module = { exports: {} }, fn(module, module.exports), module.exports;
  164. }
  165. var md5 = createCommonjsModule(function (module) {
  166. (function ($) {
  167. /**
  168. * Add integers, wrapping at 2^32.
  169. * This uses 16-bit operations internally to work around bugs in interpreters.
  170. *
  171. * @param {number} x First integer
  172. * @param {number} y Second integer
  173. * @returns {number} Sum
  174. */
  175. function safeAdd(x, y) {
  176. var lsw = (x & 0xffff) + (y & 0xffff);
  177. var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  178. return msw << 16 | lsw & 0xffff;
  179. }
  180. /**
  181. * Bitwise rotate a 32-bit number to the left.
  182. *
  183. * @param {number} num 32-bit number
  184. * @param {number} cnt Rotation count
  185. * @returns {number} Rotated number
  186. */
  187. function bitRotateLeft(num, cnt) {
  188. return num << cnt | num >>> 32 - cnt;
  189. }
  190. /**
  191. * Basic operation the algorithm uses.
  192. *
  193. * @param {number} q q
  194. * @param {number} a a
  195. * @param {number} b b
  196. * @param {number} x x
  197. * @param {number} s s
  198. * @param {number} t t
  199. * @returns {number} Result
  200. */
  201. function md5cmn(q, a, b, x, s, t) {
  202. return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
  203. }
  204. /**
  205. * Basic operation the algorithm uses.
  206. *
  207. * @param {number} a a
  208. * @param {number} b b
  209. * @param {number} c c
  210. * @param {number} d d
  211. * @param {number} x x
  212. * @param {number} s s
  213. * @param {number} t t
  214. * @returns {number} Result
  215. */
  216. function md5ff(a, b, c, d, x, s, t) {
  217. return md5cmn(b & c | ~b & d, a, b, x, s, t);
  218. }
  219. /**
  220. * Basic operation the algorithm uses.
  221. *
  222. * @param {number} a a
  223. * @param {number} b b
  224. * @param {number} c c
  225. * @param {number} d d
  226. * @param {number} x x
  227. * @param {number} s s
  228. * @param {number} t t
  229. * @returns {number} Result
  230. */
  231. function md5gg(a, b, c, d, x, s, t) {
  232. return md5cmn(b & d | c & ~d, a, b, x, s, t);
  233. }
  234. /**
  235. * Basic operation the algorithm uses.
  236. *
  237. * @param {number} a a
  238. * @param {number} b b
  239. * @param {number} c c
  240. * @param {number} d d
  241. * @param {number} x x
  242. * @param {number} s s
  243. * @param {number} t t
  244. * @returns {number} Result
  245. */
  246. function md5hh(a, b, c, d, x, s, t) {
  247. return md5cmn(b ^ c ^ d, a, b, x, s, t);
  248. }
  249. /**
  250. * Basic operation the algorithm uses.
  251. *
  252. * @param {number} a a
  253. * @param {number} b b
  254. * @param {number} c c
  255. * @param {number} d d
  256. * @param {number} x x
  257. * @param {number} s s
  258. * @param {number} t t
  259. * @returns {number} Result
  260. */
  261. function md5ii(a, b, c, d, x, s, t) {
  262. return md5cmn(c ^ (b | ~d), a, b, x, s, t);
  263. }
  264. /**
  265. * Calculate the MD5 of an array of little-endian words, and a bit length.
  266. *
  267. * @param {Array} x Array of little-endian words
  268. * @param {number} len Bit length
  269. * @returns {Array<number>} MD5 Array
  270. */
  271. function binlMD5(x, len) {
  272. /* append padding */
  273. x[len >> 5] |= 0x80 << len % 32;
  274. x[(len + 64 >>> 9 << 4) + 14] = len;
  275. var i;
  276. var olda;
  277. var oldb;
  278. var oldc;
  279. var oldd;
  280. var a = 1732584193;
  281. var b = -271733879;
  282. var c = -1732584194;
  283. var d = 271733878;
  284. for (i = 0; i < x.length; i += 16) {
  285. olda = a;
  286. oldb = b;
  287. oldc = c;
  288. oldd = d;
  289. a = md5ff(a, b, c, d, x[i], 7, -680876936);
  290. d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
  291. c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
  292. b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
  293. a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
  294. d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
  295. c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
  296. b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
  297. a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
  298. d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
  299. c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
  300. b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
  301. a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
  302. d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
  303. c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
  304. b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
  305. a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
  306. d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
  307. c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
  308. b = md5gg(b, c, d, a, x[i], 20, -373897302);
  309. a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
  310. d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
  311. c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
  312. b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
  313. a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
  314. d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
  315. c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
  316. b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
  317. a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
  318. d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
  319. c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
  320. b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
  321. a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
  322. d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
  323. c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
  324. b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
  325. a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
  326. d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
  327. c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
  328. b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
  329. a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
  330. d = md5hh(d, a, b, c, x[i], 11, -358537222);
  331. c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
  332. b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
  333. a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
  334. d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
  335. c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
  336. b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
  337. a = md5ii(a, b, c, d, x[i], 6, -198630844);
  338. d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
  339. c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
  340. b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
  341. a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
  342. d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
  343. c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
  344. b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
  345. a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
  346. d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
  347. c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
  348. b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
  349. a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
  350. d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
  351. c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
  352. b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
  353. a = safeAdd(a, olda);
  354. b = safeAdd(b, oldb);
  355. c = safeAdd(c, oldc);
  356. d = safeAdd(d, oldd);
  357. }
  358. return [a, b, c, d];
  359. }
  360. /**
  361. * Convert an array of little-endian words to a string
  362. *
  363. * @param {Array<number>} input MD5 Array
  364. * @returns {string} MD5 string
  365. */
  366. function binl2rstr(input) {
  367. var i;
  368. var output = '';
  369. var length32 = input.length * 32;
  370. for (i = 0; i < length32; i += 8) {
  371. output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);
  372. }
  373. return output;
  374. }
  375. /**
  376. * Convert a raw string to an array of little-endian words
  377. * Characters >255 have their high-byte silently ignored.
  378. *
  379. * @param {string} input Raw input string
  380. * @returns {Array<number>} Array of little-endian words
  381. */
  382. function rstr2binl(input) {
  383. var i;
  384. var output = [];
  385. output[(input.length >> 2) - 1] = undefined;
  386. for (i = 0; i < output.length; i += 1) {
  387. output[i] = 0;
  388. }
  389. var length8 = input.length * 8;
  390. for (i = 0; i < length8; i += 8) {
  391. output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
  392. }
  393. return output;
  394. }
  395. /**
  396. * Calculate the MD5 of a raw string
  397. *
  398. * @param {string} s Input string
  399. * @returns {string} Raw MD5 string
  400. */
  401. function rstrMD5(s) {
  402. return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
  403. }
  404. /**
  405. * Calculates the HMAC-MD5 of a key and some data (raw strings)
  406. *
  407. * @param {string} key HMAC key
  408. * @param {string} data Raw input string
  409. * @returns {string} Raw MD5 string
  410. */
  411. function rstrHMACMD5(key, data) {
  412. var i;
  413. var bkey = rstr2binl(key);
  414. var ipad = [];
  415. var opad = [];
  416. var hash;
  417. ipad[15] = opad[15] = undefined;
  418. if (bkey.length > 16) {
  419. bkey = binlMD5(bkey, key.length * 8);
  420. }
  421. for (i = 0; i < 16; i += 1) {
  422. ipad[i] = bkey[i] ^ 0x36363636;
  423. opad[i] = bkey[i] ^ 0x5c5c5c5c;
  424. }
  425. hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
  426. return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
  427. }
  428. /**
  429. * Convert a raw string to a hex string
  430. *
  431. * @param {string} input Raw input string
  432. * @returns {string} Hex encoded string
  433. */
  434. function rstr2hex(input) {
  435. var hexTab = '0123456789abcdef';
  436. var output = '';
  437. var x;
  438. var i;
  439. for (i = 0; i < input.length; i += 1) {
  440. x = input.charCodeAt(i);
  441. output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);
  442. }
  443. return output;
  444. }
  445. /**
  446. * Encode a string as UTF-8
  447. *
  448. * @param {string} input Input string
  449. * @returns {string} UTF8 string
  450. */
  451. function str2rstrUTF8(input) {
  452. return unescape(encodeURIComponent(input));
  453. }
  454. /**
  455. * Encodes input string as raw MD5 string
  456. *
  457. * @param {string} s Input string
  458. * @returns {string} Raw MD5 string
  459. */
  460. function rawMD5(s) {
  461. return rstrMD5(str2rstrUTF8(s));
  462. }
  463. /**
  464. * Encodes input string as Hex encoded string
  465. *
  466. * @param {string} s Input string
  467. * @returns {string} Hex encoded string
  468. */
  469. function hexMD5(s) {
  470. return rstr2hex(rawMD5(s));
  471. }
  472. /**
  473. * Calculates the raw HMAC-MD5 for the given key and data
  474. *
  475. * @param {string} k HMAC key
  476. * @param {string} d Input string
  477. * @returns {string} Raw MD5 string
  478. */
  479. function rawHMACMD5(k, d) {
  480. return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
  481. }
  482. /**
  483. * Calculates the Hex encoded HMAC-MD5 for the given key and data
  484. *
  485. * @param {string} k HMAC key
  486. * @param {string} d Input string
  487. * @returns {string} Raw MD5 string
  488. */
  489. function hexHMACMD5(k, d) {
  490. return rstr2hex(rawHMACMD5(k, d));
  491. }
  492. /**
  493. * Calculates MD5 value for a given string.
  494. * If a key is provided, calculates the HMAC-MD5 value.
  495. * Returns a Hex encoded string unless the raw argument is given.
  496. *
  497. * @param {string} string Input string
  498. * @param {string} [key] HMAC key
  499. * @param {boolean} [raw] Raw output switch
  500. * @returns {string} MD5 output
  501. */
  502. function md5(string, key, raw) {
  503. if (!key) {
  504. if (!raw) {
  505. return hexMD5(string);
  506. }
  507. return rawMD5(string);
  508. }
  509. if (!raw) {
  510. return hexHMACMD5(key, string);
  511. }
  512. return rawHMACMD5(key, string);
  513. }
  514. if (module.exports) {
  515. module.exports = md5;
  516. } else {
  517. $.md5 = md5;
  518. }
  519. })(commonjsGlobal);
  520. });
  521. function md5ForNode(node) {
  522. if (null === node || 'object' !== _typeof(node)) return undefined;
  523. if (node.src) {
  524. return md5(node.src);
  525. } else if (node.href) {
  526. return md5(node.href);
  527. } else if (node.innerText && '' !== node.innerText) {
  528. // eslint-disable-line yoda
  529. return md5(node.innerText);
  530. } else {
  531. return undefined;
  532. }
  533. }
  534. var diagScriptId = 'fa-kits-diag';
  535. var nodeUnderTestId = 'fa-kits-node-under-test';
  536. var md5Attr = 'data-md5';
  537. var detectionIgnoreAttr = 'data-fa-detection-ignore';
  538. var timeoutAttr = 'data-fa-detection-timeout';
  539. var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';
  540. var silenceErrors = function silenceErrors(e) {
  541. e.preventDefault();
  542. e.stopPropagation();
  543. };
  544. function pollUntil(_ref) {
  545. var _ref$fn = _ref.fn,
  546. fn = _ref$fn === void 0 ? function () {
  547. return true;
  548. } : _ref$fn,
  549. _ref$initialDuration = _ref.initialDuration,
  550. initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration,
  551. _ref$maxDuration = _ref.maxDuration,
  552. maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,
  553. _ref$showProgress = _ref.showProgress,
  554. showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,
  555. progressIndicator = _ref.progressIndicator;
  556. return new Promise(function (resolve, reject) {
  557. // eslint-disable-line compat/compat
  558. function poll(duration, cumulativeDuration) {
  559. setTimeout(function () {
  560. var result = fn();
  561. if (showProgress) {
  562. console.info(progressIndicator);
  563. }
  564. if (!!result) {
  565. // eslint-disable-line no-extra-boolean-cast
  566. resolve(result);
  567. } else {
  568. var nextDuration = 250;
  569. var nextCumulativeDuration = nextDuration + cumulativeDuration;
  570. if (nextCumulativeDuration <= maxDuration) {
  571. poll(nextDuration, nextCumulativeDuration);
  572. } else {
  573. reject('timeout'); // eslint-disable-line prefer-promise-reject-errors
  574. }
  575. }
  576. }, duration);
  577. }
  578. poll(initialDuration, 0);
  579. });
  580. }
  581. function detectWebfontConflicts() {
  582. var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) {
  583. return !t.hasAttribute(detectionIgnoreAttr);
  584. });
  585. var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {
  586. if (t.hasAttribute(detectionIgnoreAttr)) {
  587. return false;
  588. } // If the browser has loaded the FA5 CSS, let's not test that <style> element.
  589. // Its enough that we'll be testing for traces of the corresponding JS being loaded, and testing
  590. // this <style> would only produce a false negative anyway.
  591. if (WINDOW.FontAwesomeConfig && t.innerText.match(new RegExp("svg:not\\(:root\\)\\.".concat(WINDOW.FontAwesomeConfig.replacementClass)))) {
  592. return false;
  593. }
  594. return true;
  595. });
  596. function runDiag(scriptOrLinkTag, md5) {
  597. var diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
  598. // Firefox will not return the expected results for getComputedStyle if our iframe has display: none.
  599. diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;');
  600. var testIconId = 'fa-test-icon-' + md5;
  601. var iTag = DOCUMENT.createElement('i');
  602. iTag.setAttribute('class', 'fa fa-coffee');
  603. iTag.setAttribute('id', testIconId);
  604. var diagScript = DOCUMENT.createElement('script');
  605. diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script
  606. // element that we'll be putting into a diagnostic iframe.
  607. // That means that this code won't compile until after the outer script has run and injected
  608. // this code into the iframe. There are some compile time errors that might occur there.
  609. // For example, using single line (double-slash) comments like this one inside that function
  610. // will probably cause it to choke. Chrome will show an error like this:
  611. // Uncaught SyntaxError: Unexpected end of input
  612. var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) {
  613. parent.FontAwesomeDetection.__pollUntil({
  614. fn: function fn() {
  615. var iEl = document.getElementById(testIconId);
  616. var computedStyle = window.getComputedStyle(iEl);
  617. var fontFamily = computedStyle.getPropertyValue('font-family');
  618. if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome [56]/)) {
  619. return true;
  620. } else {
  621. return false;
  622. }
  623. }
  624. }).then(function () {
  625. var node = document.getElementById(nodeUnderTestId);
  626. parent.postMessage({
  627. type: 'fontawesome-conflict',
  628. technology: 'webfont',
  629. href: node.href,
  630. innerText: node.innerText,
  631. tagName: node.tagName,
  632. md5: md5
  633. }, parentOrigin);
  634. }).catch(function (e) {
  635. var node = document.getElementById(nodeUnderTestId);
  636. if (e === 'timeout') {
  637. parent.postMessage({
  638. type: 'no-conflict',
  639. technology: 'webfont',
  640. href: node.src,
  641. innerText: node.innerText,
  642. tagName: node.tagName,
  643. md5: md5
  644. }, parentOrigin);
  645. } else {
  646. console.error(e);
  647. }
  648. });
  649. };
  650. var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
  651. diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(testIconId || 'foo', "', '").concat(md5, "', '").concat(parentOrigin, "');");
  652. diagFrame.onload = function () {
  653. diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
  654. diagFrame.contentDocument.head.appendChild(diagScript);
  655. diagFrame.contentDocument.head.appendChild(scriptOrLinkTag);
  656. diagFrame.contentDocument.body.appendChild(iTag);
  657. };
  658. domready(function () {
  659. return DOCUMENT.body.appendChild(diagFrame);
  660. });
  661. }
  662. var cssByMD5 = {};
  663. for (var i = 0; i < linkTags.length; i++) {
  664. var linkUnderTest = DOCUMENT.createElement('link');
  665. linkUnderTest.setAttribute('id', nodeUnderTestId);
  666. linkUnderTest.setAttribute('href', linkTags[i].href);
  667. linkUnderTest.setAttribute('rel', linkTags[i].rel);
  668. var md5ForLink = md5ForNode(linkTags[i]);
  669. linkUnderTest.setAttribute(md5Attr, md5ForLink);
  670. cssByMD5[md5ForLink] = linkTags[i];
  671. runDiag(linkUnderTest, md5ForLink);
  672. }
  673. for (var _i = 0; _i < styleTags.length; _i++) {
  674. var styleUnderTest = DOCUMENT.createElement('style');
  675. styleUnderTest.setAttribute('id', nodeUnderTestId);
  676. var md5ForStyle = md5ForNode(styleTags[_i]);
  677. styleUnderTest.setAttribute(md5Attr, md5ForStyle);
  678. styleUnderTest.innerText = styleTags[_i].innerText;
  679. cssByMD5[md5ForStyle] = styleTags[_i];
  680. runDiag(styleUnderTest, md5ForStyle);
  681. }
  682. return cssByMD5;
  683. }
  684. function detectSvgConflicts(currentScript) {
  685. var scripts = Array.from(DOCUMENT.scripts).filter(function (t) {
  686. return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript;
  687. });
  688. var scriptsByMD5 = {};
  689. var _loop = function _loop(scriptIdx) {
  690. var diagFrame = DOCUMENT.createElement('iframe');
  691. diagFrame.setAttribute('style', 'display:none;');
  692. var scriptUnderTest = DOCUMENT.createElement('script');
  693. scriptUnderTest.setAttribute('id', nodeUnderTestId);
  694. var md5ForScript = md5ForNode(scripts[scriptIdx]);
  695. scriptUnderTest.setAttribute(md5Attr, md5ForScript);
  696. scriptsByMD5[md5ForScript] = scripts[scriptIdx];
  697. if (scripts[scriptIdx].src !== '') {
  698. scriptUnderTest.src = scripts[scriptIdx].src;
  699. }
  700. if (scripts[scriptIdx].innerText !== '') {
  701. scriptUnderTest.innerText = scripts[scriptIdx].innerText;
  702. }
  703. scriptUnderTest.async = true;
  704. var diagScript = DOCUMENT.createElement('script');
  705. diagScript.setAttribute('id', diagScriptId);
  706. var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
  707. var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) {
  708. parent.FontAwesomeDetection.__pollUntil({
  709. fn: function fn() {
  710. return !!window.FontAwesomeConfig || !!window.FontAwesomeKitConfig;
  711. }
  712. }).then(function () {
  713. var scriptNode = document.getElementById(nodeUnderTestId);
  714. parent.postMessage({
  715. type: 'fontawesome-conflict',
  716. technology: 'js',
  717. src: scriptNode.src,
  718. innerText: scriptNode.innerText,
  719. tagName: scriptNode.tagName,
  720. md5: md5
  721. }, parentOrigin);
  722. }).catch(function (e) {
  723. var scriptNode = document.getElementById(nodeUnderTestId);
  724. if (e === 'timeout') {
  725. parent.postMessage({
  726. type: 'no-conflict',
  727. src: scriptNode.src,
  728. innerText: scriptNode.innerText,
  729. tagName: scriptNode.tagName,
  730. md5: md5
  731. }, parentOrigin);
  732. } else {
  733. console.error(e);
  734. }
  735. });
  736. };
  737. diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(md5ForScript, "', '").concat(parentOrigin, "');");
  738. diagFrame.onload = function () {
  739. diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
  740. diagFrame.contentDocument.head.appendChild(diagScript);
  741. diagFrame.contentDocument.head.appendChild(scriptUnderTest);
  742. };
  743. domready(function () {
  744. return DOCUMENT.body.appendChild(diagFrame);
  745. });
  746. };
  747. for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
  748. _loop(scriptIdx);
  749. }
  750. return scriptsByMD5;
  751. }
  752. function setDoneResults(_ref2) {
  753. var nodesTested = _ref2.nodesTested,
  754. nodesFound = _ref2.nodesFound;
  755. WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};
  756. WINDOW.FontAwesomeDetection.nodesTested = nodesTested;
  757. WINDOW.FontAwesomeDetection.nodesFound = nodesFound;
  758. WINDOW.FontAwesomeDetection.detectionDone = true;
  759. }
  760. function conflictDetection() {
  761. var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
  762. var nodesTested = {
  763. conflict: {},
  764. noConflict: {}
  765. };
  766. WINDOW.onmessage = function (e) {
  767. if (WINDOW.location.origin === 'file://' || e.origin === WINDOW.location.origin) {
  768. if (e && e.data) {
  769. if (e.data.type === 'fontawesome-conflict') {
  770. nodesTested.conflict[e.data.md5] = e.data;
  771. } else if (e.data.type === 'no-conflict') {
  772. nodesTested.noConflict[e.data.md5] = e.data;
  773. }
  774. }
  775. }
  776. };
  777. var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
  778. var cssToTest = detectWebfontConflicts();
  779. var nodesFound = _objectSpread2(_objectSpread2({}, scriptsToTest), cssToTest);
  780. var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
  781. // child iframes call postMessage with their results, and when the parent window
  782. // receives and handles those events with window.onmessage.
  783. // Making it configurable allows us to test the scenario where this timeout is exceeded.
  784. // Naming it something very different from "timeout" is to help avoid the potential ambiguity between
  785. // these two timeout-related settings.
  786. var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
  787. console.group('Font Awesome Detector');
  788. if (testCount === 0) {
  789. console.info('%cAll Good!', 'color: green; font-size: large');
  790. console.info('We didn\'t find anything that needs testing for conflicts. Ergo, no conflicts.');
  791. } else {
  792. console.info("Testing ".concat(testCount, " possible conflicts."));
  793. console.info("We'll wait about ".concat(Math.round(WINDOW.FontAwesomeDetection.timeout / 10) / 100, " seconds while testing these and\n") + "then up to another ".concat(Math.round(WINDOW.FontAwesomeDetection.resultsCollectionMaxWait / 10) / 100, " to allow the browser time\n") + "to accumulate the results. But we'll probably be outta here way before then.\n\n");
  794. console.info("You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:");
  795. console.info("\t%c".concat(timeoutAttr, "%c: milliseconds to wait for each test before deciding whether it's a conflict."), 'font-weight: bold;', 'font-size: normal;');
  796. console.info("\t%c".concat(resultsCollectionMaxWaitAttr, "%c: milliseconds to wait for the browser to accumulate test results before giving up."), 'font-weight: bold;', 'font-size: normal;');
  797. pollUntil({
  798. // Give this overall timer a little extra cushion
  799. maxDuration: masterTimeout,
  800. showProgress: true,
  801. progressIndicator: 'waiting...',
  802. fn: function fn() {
  803. return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;
  804. }
  805. }).then(function () {
  806. console.info('DONE!');
  807. setDoneResults({
  808. nodesTested: nodesTested,
  809. nodesFound: nodesFound
  810. });
  811. report$$1({
  812. nodesTested: nodesTested,
  813. nodesFound: nodesFound
  814. });
  815. console.groupEnd();
  816. }).catch(function (e) {
  817. if (e === 'timeout') {
  818. console.info('TIME OUT! We waited until we got tired. Here\'s what we found:');
  819. setDoneResults({
  820. nodesTested: nodesTested,
  821. nodesFound: nodesFound
  822. });
  823. report$$1({
  824. nodesTested: nodesTested,
  825. nodesFound: nodesFound
  826. });
  827. } else {
  828. console.info('Whoops! We hit an error:', e);
  829. console.info('Here\'s what we\'d found up until that error:');
  830. setDoneResults({
  831. nodesTested: nodesTested,
  832. nodesFound: nodesFound
  833. });
  834. report$$1({
  835. nodesTested: nodesTested,
  836. nodesFound: nodesFound
  837. });
  838. }
  839. console.groupEnd();
  840. });
  841. }
  842. } // Allow clients to access, and in some cases, override some properties
  843. var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
  844. var _default = {
  845. report: report,
  846. timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"),
  847. resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000")
  848. };
  849. var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, _default), initialConfig), {}, {
  850. // These cannot be overridden
  851. __pollUntil: pollUntil,
  852. md5ForNode: md5ForNode,
  853. detectionDone: false,
  854. nodesTested: null,
  855. nodesFound: null
  856. });
  857. WINDOW.FontAwesomeDetection = _config;
  858. var _familyProxy, _familyProxy2, _familyProxy3, _familyProxy4, _familyProxy5;
  859. var PRODUCTION = function () {
  860. try {
  861. return process.env.NODE_ENV === 'production';
  862. } catch (e) {
  863. return false;
  864. }
  865. }();
  866. var FAMILY_CLASSIC = 'classic';
  867. var FAMILY_SHARP = 'sharp';
  868. var FAMILIES = [FAMILY_CLASSIC, FAMILY_SHARP];
  869. function familyProxy(obj) {
  870. // Defaults to the classic family if family is not available
  871. return new Proxy(obj, {
  872. get: function get(target, prop) {
  873. return prop in target ? target[prop] : target[FAMILY_CLASSIC];
  874. }
  875. });
  876. }
  877. var PREFIX_TO_STYLE = familyProxy((_familyProxy = {}, _defineProperty(_familyProxy, FAMILY_CLASSIC, {
  878. 'fa': 'solid',
  879. 'fas': 'solid',
  880. 'fa-solid': 'solid',
  881. 'far': 'regular',
  882. 'fa-regular': 'regular',
  883. 'fal': 'light',
  884. 'fa-light': 'light',
  885. 'fat': 'thin',
  886. 'fa-thin': 'thin',
  887. 'fad': 'duotone',
  888. 'fa-duotone': 'duotone',
  889. 'fab': 'brands',
  890. 'fa-brands': 'brands',
  891. 'fak': 'kit',
  892. 'fakd': 'kit',
  893. 'fa-kit': 'kit',
  894. 'fa-kit-duotone': 'kit'
  895. }), _defineProperty(_familyProxy, FAMILY_SHARP, {
  896. 'fa': 'solid',
  897. 'fass': 'solid',
  898. 'fa-solid': 'solid',
  899. 'fasr': 'regular',
  900. 'fa-regular': 'regular',
  901. 'fasl': 'light',
  902. 'fa-light': 'light',
  903. 'fast': 'thin',
  904. 'fa-thin': 'thin'
  905. }), _familyProxy));
  906. var STYLE_TO_PREFIX = familyProxy((_familyProxy2 = {}, _defineProperty(_familyProxy2, FAMILY_CLASSIC, {
  907. solid: 'fas',
  908. regular: 'far',
  909. light: 'fal',
  910. thin: 'fat',
  911. duotone: 'fad',
  912. brands: 'fab',
  913. kit: 'fak'
  914. }), _defineProperty(_familyProxy2, FAMILY_SHARP, {
  915. solid: 'fass',
  916. regular: 'fasr',
  917. light: 'fasl',
  918. thin: 'fast'
  919. }), _familyProxy2));
  920. var PREFIX_TO_LONG_STYLE = familyProxy((_familyProxy3 = {}, _defineProperty(_familyProxy3, FAMILY_CLASSIC, {
  921. fab: 'fa-brands',
  922. fad: 'fa-duotone',
  923. fak: 'fa-kit',
  924. fal: 'fa-light',
  925. far: 'fa-regular',
  926. fas: 'fa-solid',
  927. fat: 'fa-thin'
  928. }), _defineProperty(_familyProxy3, FAMILY_SHARP, {
  929. fass: 'fa-solid',
  930. fasr: 'fa-regular',
  931. fasl: 'fa-light',
  932. fast: 'fa-thin'
  933. }), _familyProxy3));
  934. var LONG_STYLE_TO_PREFIX = familyProxy((_familyProxy4 = {}, _defineProperty(_familyProxy4, FAMILY_CLASSIC, {
  935. 'fa-brands': 'fab',
  936. 'fa-duotone': 'fad',
  937. 'fa-kit': 'fak',
  938. 'fa-light': 'fal',
  939. 'fa-regular': 'far',
  940. 'fa-solid': 'fas',
  941. 'fa-thin': 'fat'
  942. }), _defineProperty(_familyProxy4, FAMILY_SHARP, {
  943. 'fa-solid': 'fass',
  944. 'fa-regular': 'fasr',
  945. 'fa-light': 'fasl',
  946. 'fa-thin': 'fast'
  947. }), _familyProxy4));
  948. var FONT_WEIGHT_TO_PREFIX = familyProxy((_familyProxy5 = {}, _defineProperty(_familyProxy5, FAMILY_CLASSIC, {
  949. 900: 'fas',
  950. 400: 'far',
  951. normal: 'far',
  952. 300: 'fal',
  953. 100: 'fat'
  954. }), _defineProperty(_familyProxy5, FAMILY_SHARP, {
  955. 900: 'fass',
  956. 400: 'fasr',
  957. 300: 'fasl',
  958. 100: 'fast'
  959. }), _familyProxy5));
  960. var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  961. var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
  962. var DUOTONE_CLASSES = {
  963. GROUP: 'duotone-group',
  964. SWAP_OPACITY: 'swap-opacity',
  965. PRIMARY: 'primary',
  966. SECONDARY: 'secondary'
  967. };
  968. var prefixes = new Set();
  969. Object.keys(STYLE_TO_PREFIX[FAMILY_CLASSIC]).map(prefixes.add.bind(prefixes));
  970. Object.keys(STYLE_TO_PREFIX[FAMILY_SHARP]).map(prefixes.add.bind(prefixes));
  971. var RESERVED_CLASSES = [].concat(FAMILIES, _toConsumableArray(prefixes), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {
  972. return "".concat(n, "x");
  973. })).concat(oneToTwenty.map(function (n) {
  974. return "w-".concat(n);
  975. }));
  976. function bunker(fn) {
  977. try {
  978. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  979. args[_key - 1] = arguments[_key];
  980. }
  981. fn.apply(void 0, args);
  982. } catch (e) {
  983. if (!PRODUCTION) {
  984. throw e;
  985. }
  986. }
  987. }
  988. bunker(function () {
  989. if (IS_BROWSER && IS_DOM) {
  990. conflictDetection(window.FontAwesomeDetection.report);
  991. }
  992. });
  993. })));