PageSourceSearch

https://careers.everquote.com/js/content.js

js everquote.com collected 2026-09-24 10:46:22 UTC 976,726 bytes, 1,970 lines download raw bytes

1if (typeof getUrlVars !== 'function') {
2  console.log("adding getUrlVars function");
3  window.getUrlVars = function () {
4    var vars = [], hash;
5    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
6    for(var i = 0; i < hashes.length; i++)
7    {
8      hash = hashes[i].split('=');
9      vars.push(hash[0]);
10      vars[hash[0]] = hash[1];
11    }
12    return vars;
13  }
14}
15
16function slugify(string) {
17  const a = 'ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’ÆՉہÃÆ
17’‚¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’ÂÃâ€Ã
17…¡Ãƒâ€šÃ‚¢ÃƒÆ’Æ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¤ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’â€Ã
17ƒÆ’ƒâ€¦Ã‚¡ÃƒÃ†’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚£ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚ÂÃââ
17‚¬Å¡Ãƒâ€šÃ‚¬ÃƒÆ’ƒâ€¦Ã‚¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚Â¥ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢ÃÃâ€
17šÃ‚¢ÃƒÂ¢Ã¢â€šÂ¬Ã…¡Ã‚¬Ã…¡ÃÆ’‚ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆâ
17€™Ãƒâ€ ’Æ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’ÂÂÃ
17ƒâ€šÃ‚¢ÃƒÆ’Æ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚§ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÃââ‚
17¬ ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ÂÃâÃ
17¢â€šÂ¬Ã…¡Ãƒâ€šÃ‚ÃƒÆ’Æ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…“ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Ãâ€ ÃÆâ€
17™Ãƒâ€šÃ‚¢ÃƒÂ¢Ã¢â‚¬Å¡Ã‚¬Ã¢â€žÂ¢ÃƒÆ’Æ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆââ‚
17¬â„¢ÃƒÆ’†’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¨ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚©ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢ÃÃââ‚
17¬Å¡Ãƒâ€šÃ‚¢ÃƒÆ’¢â‚¬Å¡Ã‚¬Ã¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ªÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’ÃÆ
17’‚¢Ã¢â€šÂ¬Ã¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚«ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’ÃÆââ
17‚¬â„¢ÃƒÆ’‚¢Ã¢â€šÂ¬Ã…¡ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’¢â‚¬Å“ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆâ€â„
17¢ÃƒÆ’†’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢ÃÆ
17’ƒÆ’¢â‚¬Å¡Ã‚¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’ÆÃÃâ
17€šÃ‚¢ÃƒÂ¢Ã¢â‚¬Å¡Ã‚¬Ã¢â€žÂ¢ÃƒÆ’Æ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¸ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’â€Ãââ‚Â
17¬Ã‚¦Ãƒâ€šÃ‚¡ÃƒÆ’Æ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚µÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’ââ‚ÂÃâ€
17šÃ‚¬ÃƒÆ’…¡ÃÆ’‚¸ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚§ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚®ÃÆ’ÃÃ
17¢â‚¬ ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¯ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂÂÂÂÃ
17‚¢ÃƒÆ’Æ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚­ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æâ€âÃ
17¢â‚¬Å¾Ã‚¢ÃƒÆ’ƒÂ¢Ã¢â€šÂ¬Ã…¡ÃÆ’‚«ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¯ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢âââ‚Â
17¬Ã…¡Ã‚¬Ã…¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÃâ
17€ Ã¢â‚¬â„¢ÃƒÆ’†’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¸ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚ÂÂÃââ‚
17¬Å¡Ãƒâ€šÃ‚¢ÃƒÆ’Į’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¿ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚±ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’ÂÃ
17ƒâ€šÃ‚¢ÃƒÆ’¢â‚¬Å¡Ã‚¬Ã¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆâÃ
17¢â€šÂ¬Ã¢â€žÂ¢ÃƒÆ’ƒâ€ ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬ÅÂÃââ
17‚¬Å¡Ãƒâ€šÃ‚¡ÃƒÆ’Į’‚¬ÃÆ’Æ’‚ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚´ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÃÃ
17¢â‚¬Å¡Ãƒâ€šÃ‚¬ÃƒÆ’¢â€žÂ¢ÃƒÃ†’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¶ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢âââ‚ÂÂ
17¬Ãƒâ€¦Ã‚¡Ãƒâ€šÃ‚¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚²ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚³ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬âââ‚Ã
17ƒâ€šÃ‚¬Ãƒâ€¦Ã‚¾Ãƒâ€šÃ‚¢ÃƒÃ†’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…“ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢ÃÃ
17†â€™Ãƒâ€ ’¢â€šÂ¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¸ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’ÃÆâ€
17™Ãƒâ€šÃ‚¢ÃƒÂ¢Ã¢â‚¬Å¡Ã‚¬Ã‚¦Ãƒâ€šÃ‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚µÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’ÃÃÆ
17’¢â‚¬ ’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…“ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢ÃÃ
17ƒâ€ Ã¢â‚¬â„¢ÃƒÆ’‚¢Ã¢â‚¬Å¡Ã‚¬Ã…¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€ÅÃÃ
17¢â‚¬Å¡Ãƒâ€šÃ‚¡ÃƒÆ’ƒâ€šÃ‚¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ
17’ƒÆ’Æ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’âââ€Ã
17…¡Ã‚¬Ã…¡Ãƒâ€šÃ‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¸ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…Ã
17ƒÆ’ƒÆ’Æ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆâ€â„Â
17¢ÃƒÆ’ƒâ€ ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¸ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚ÂÃââ
17‚¬Å¡Ãƒâ€šÃ‚¬ÃƒÆ’ƒÂ¢Ã¢â‚¬Å¾Ã‚¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆââ‚Â
17¬Ã¢â€žÂ¢ÃƒÆ’ƒÂ¢Ã¢â€šÂ¬Ã…¡Ãƒâ€šÃ‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚Â¥ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’Æ’ÃÆ’†âââ€ÅÃ
17‚¡Ãƒâ€šÃ‚¬ÃƒÂ¢Ã¢â‚¬Å¾Ã‚¢ÃƒÃ†’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚»ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’â€ ÃÆâ€â„
17¢ÃƒÆ’‚¢Ã¢â€šÂ¬Ã¢â€žÂ¢ÃƒÃ†’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¼ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’âÃÂÂ
17¢ÃƒÂ¢Ã¢â€šÂ¬Ã…¡Ã‚¬ ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ÃÃâ
17€ Ã¢â‚¬â„¢ÃƒÆ’¢â‚¬Å¡Ãƒâ€šÃ‚¦ÃƒÃ†’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚«ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¹ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’Ãââ‚
17¬Å¡Ãƒâ€šÃ‚¢ÃƒÆ’¢â‚¬Å¡Ã‚¬Ã…“ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¯ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æբ̮
17’Æ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚±ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€Ãâââ
17€šÂ¬Ã‚¦Ãƒâ€šÃ‚¡ÃƒÆ’‚¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚³ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’â€Ãâ€Â
17¦Ãƒâ€šÃ‚¡ÃƒÆ’Æ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¾ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’â€ÃÃ
17†â€™ÃƒÂ¢Ã¢â€šÂ¬Ã…¡Ãƒâ€šÃ‚¦ÃƒÆ’Æ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¿ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†âÃÃ
17‚¢Ã¢â‚¬Å¡Ã‚¬Ã¢â€žÂ¢ÃƒÃ†’Æ’¢ÃÆ’¢â€šÂ¬ ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¾ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚½ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬ÅÂÂÂÂÂ
17¡ÃƒÆ’ƒÆ’Æ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¾ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚ºÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’ÃââÃ
17¢â‚¬Å¡Ã‚¬Ã…¡Ãƒâ€šÃ‚¢ÃƒÃ†’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¦ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚¼ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’¢â‚¬ ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’¢â€žÂ¢ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’‚ÃÆ’‚¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’‚ÃÆ’‚¬ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Â¦ÃÆ’Æ’‚ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’ÃÂÃ
17‚¢ÃƒÂ¢Ã¢â‚¬Å¡Ã‚¬ ’ÃÆ’Æ’†ÃÆ’¢â‚¬â„¢ÃÆ’Æ’Æ’ÃÆ’‚¢ÃÆ’Æ’¢ÃÆ’¢â‚¬Å¡ÃÆ’‚¬ÃÆ’Æ’…ÃÆ’‚¡ÃÆ’Æ’Æ’ÃÆ’†’ÃÆ’Æ’¢ÃÆ’¢â€šÂ¬ÃÆ’…¡ÃÆ’Æ’Æ’ÃÆ’¢â‚¬Å¡ÃÆ’Æ’‚ÃÆ’‚·,:;'
18  const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz-----'
19  const p = new RegExp(a.split('').join('|'), 'g')
20  try {
21    return string.toString().toLowerCase()
22      .replace(/\s+/g, '-') // Replace spaces with -
23      .replace(/\\/g, '-') // Replace backslash with nothing
24      .replace(/\//g, '-') // Replace forward slash with nothing
25      .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
26      .replace(/&/g, '-') // Replace & with 'and'
27      .replace(/[^\w\-]+/g, '') // Remove all non-word characters
28      .replace(/\-\-+/g, '-') // Replace multiple - with single -
29      .replace(/^-+/, '') // Trim - from start of text
30      .replace(/-+$/, '') // Trim - from end of text
31  }
32  catch(err) {
33    return "null"
34  }
35}
36
37function iterateDict(obj, formatted_dict, parentKey=""){
38    for(var key in obj){
39        try{
40          if(obj[key].constructor != Object) {
41              formatted_dict[parentKey + "." + slugify(key)] = obj[key];
42          }
43          else {
44              iterateDict(obj[key], formatted_dict, parentKey + "." + slugify(key));
45          }
46        }
47        catch(err){}
48    }
49}
50
51// ChatGPT Generated on 2/27/2023
52function sortListByKey(list, key, reverse=false) {
53  return list.sort((a, b) => {
54    if (reverse === false) {
55      if (a[key] < b[key]) {
56        return -1;
57      } else if (a[key] > b[key]) {
58        return 1;
59      } else {
60        return 0;
61      }
62    } else {
63      if (a[key] > b[key]) {
64        return -1;
65      } else if (a[key] < b[key]) {
66        return 1;
67      } else {
68        return 0;
69      }
70    }
71  });
72}
73
74// The arguments are:
75// ITEMS: The list (list of dicts or just a straight list) of data that is being processed and filled
76// QUERY_SELECTOR: The HTML query selector for the prototype element that will be getting filled
77// CALLBACK: Any function that should be performed after finishing this dynamic filling of content
78// FILLCHILD: This is an optional parameter in the event that you're passing just a simple array and want to ...
79// ...dynamically create many objects, but only fill a certain child of that object with the data.
80// SIMPLE_KEY_VALUE is a parameter to toggle to just a simple filling of the prototype elements from a list of dictionaries
81// with just children of class name "key" and "value".  This is an add-on to this function to accomodate a simple,
82// and dynamic data dump of lists of dictionaries with dynamic keys (i.e. the CMS module for retrieving content)
83function fillList(items, query_selector, callback, fillChild=null, page_size=null, page=null, append=false, auto_append=false, fill_first=false) {
84  // First remove prior elements except for the prototype element
85  if (append == false) {
86    $(query_selector).not(":first").remove();
87  }
88  
89  // Then determine if we're accessing child elements as the item prototype
90  if (query_selector.includes(" > ")) {
91    query_selector = query_selector.split(" > ");
92  }
93  else {
94    query_selector = [query_selector];
95  }
96  
97  // Get the prototype element and iterate through the children
98  // to get to the proper prototype element if we're accessing a child
99  var item_elem = document.querySelectorAll(query_selector[0])[0];
100  for (var i = 1; i < query_selector.length; i++) {
101    item_elem = item_elem.querySelectorAll(query_selector[i])[0]
102  }
103  
104  // Get the parent element of the prototype element to append
105  // cloned elements that are created.
106  var item_table = item_elem.parentElement;
107
108  // See if we're going to be accessing key/value pairs or 
109  // just filling elements based on an array/list.
110  var list_of_dicts = false;
111  if (items.length > 0) {
112    if (items[0].constructor == Object) {
113      list_of_dicts = true;
114    }
115  }
116  var all_items = items;
117  var min_index = 0;
118  var max_index = items.length;
119  if (page_size != null && page != null) {
120    // min_index = parseInt(page) * parseInt(page_size);
121    // max_index = parseInt(page) * parseInt(page_size) + parseInt(page_size);
122    
123    items = items.slice(parseInt(page) * parseInt(page_size), parseInt(page) * parseInt(page_size) + parseInt(page_size));
124  }
125  
126  // Start iterating through the data
127  for (var i = 0; i < items.length; i++) {
128    // If the item that we're operating on is a select element,
129    // we'll want to handle this differently and fill a list of
130    // child OPTION elements
131    if (item_elem.tagName.toLowerCase() == "select") {
132      var classList = item_elem.classList;
133      item_table = item_elem;
134      item_elem = item_elem.getElementsByTagName("option")[0];
135      item_elem.classList = classList;
136    }
137    
138    // Clone the prototype element and add the class "show"
139    // to indicate that the element has been added.  
140    // The designer can do what they want, stylewise
141    // with the "show" class.
142    var current_elem = undefined;
143
144    if (fill_first && i == 0) {
145      current_elem = item_elem;
146    }
147    else {
148      current_elem = item_elem.cloneNode(true);
149      current_elem.classList.add("show");
150    }
151
152    // if ((page_size == null || page == null) || ((page_size != null && page != null) && (i >= min_index && i <= max_index))) {
153    //   current_elem.classList.add("show");
154    // }
155    if (append) {
156      current_elem.setAttribute("data-count",(i + page_size * page));
157    }
158    else {
159      current_elem.setAttribute("data-count",i);
160    }
161
162    item_table.appendChild(current_elem);
163
164    // If we need to dive in and access key/value pairs
165    if (list_of_dicts) {
166      var results = {};
167
168      // Takes the current dictionary item and then iterates
169      // over that dictionary to flatten it into a 
170      // list of classes
171      iterateDict(items[i], results);
172      Object.keys(results).forEach(function(key) {   
173        // If the element is an OPTION tag in a SELECT, handle differently
174        if (current_elem.tagName.toLowerCase() == "option") {
175          if (current_elem.classList.contains(key.replace(".",""))) {
176            current_elem.innerHTML = results[key];
177            current_elem.setAttribute("value",results[key]);
178          }
179          current_elem.setAttribute("data-" + key.replace(".",""),results[key]);
180        }
181        else {
182          var children = current_elem.querySelectorAll(key);
183          if (Array.isArray(results[key])) {
184            current_elem.setAttribute("data" + key.replace(/\./g,"-"), JSON.stringify(results[key]));
185          }
186          else {
187            current_elem.setAttribute("data" + key.replace(/\./g,"-"), results[key]);  
188          }
189
190          if (Array.isArray(results[key]) && children.length > 0) {
191            for (var m = 0; m < children.length; m++) {
192              var temp_children = children[m].getElementsByTagName("*");
193              for (var n = 0; n < temp_children.length; n++) {
194                temp_children[n].setAttribute("data-child-of-nested-key","true");
195              }
196            }
197            if (append) {
198              fillList(results[key], query_selector + "[data-count='" + (i + page_size * page).toString() + "']" + " > " + key);
199            }
200            else {
201              fillList(results[key], query_selector + "[data-count='" + i.toString() + "']" + " > " + key);
202            }
203          }
204          else {            
205            for (var j = 0; j < children.length; j++) {
206              var nested_key = true;
207              try {
208                var nested_key_check = key.split(".").length;
209                if (children[j].getAttribute("data-already-filled").split(".").length > nested_key_check || children[j].getAttribute("data-child-of-nested-key") == "filled") {
210                  nested_key = false;
211                }
212
213              }
214              catch(err) {}
215
216              if (children[j].getAttribute("data-already-filled") == undefined || children[j].getAttribute("data-already-filled") == null || children[j].getAttribute("data-already-filled") == "" || nested_key == true || children[j].getAttribute("data-child-of-nested-key") == "true") {
217                if (children[j].getAttribute("data-child-of-nested-key") == "true") {
218                  children[j].setAttribute("data-child-of-nested-key", "filled");
219                }
220
221                children[j].setAttribute("data-already-filled", key);
222                if (children[j].tagName.toLowerCase() == "img") {
223                  if (children[j].getAttribute("data-type") == "class") {
224                    children[j].classList.add(slugify(results[key]));
225                  }
226                  else if (children[j].getAttribute("data-type") == "id") {
227                    children[j].setAttribute("data-id",results[key]);
228                  }
229                  else {
230                    children[j].setAttribute("src",results[key]);
231                    if (children[j].getAttribute("srcset") != undefined && children[j].getAttribute("srcset") != null && children[j].getAttribute("srcset") != "") {
232                      children[j].setAttribute("srcset",results[key]);
233                    }
234
235                    try {
236                      children[j].setAttribute("alt",results[key + "-alt"]);
237                    }
238                    catch(err) {
239                      children[j].setAttribute("alt","");
240                    }
241                  }
242                }
243                else if (children[j].tagName.toLowerCase() == "a") {
244                  if (children[j].getAttribute("data-type") == "text") {
245                    children[j].innerHTML = results[key]; 
246                  }
247                  else if (children[j].getAttribute("data-type") == "id") {
248                    children[j].setAttribute("data-id",results[key]);
249                  }
250                  else if (children[j].getAttribute("data-type") == "class") {
251                    children[j].classList.add(slugify(results[key]));
252                  }
253                  else {
254                    var href = children[j].getAttribute("href");
255                    if (href == "#" || href == "" || href == undefined || href == null) {
256                      children[j].setAttribute("href",results[key]);
257                    }
258                    else {
259                      href = href + results[key];
260                      children[j].setAttribute("href",href);
261                    }
262                  }
263                }
264                else if (children[j].tagName.toLowerCase() == "video") {
265                  var source = children[j].getElementsByTagName("source")[0];
266                  var video_source = source.getAttribute("src");
267                  if (video_source == "" || video_source == undefined || video_source == null) {
268                    source.setAttribute("src",results[key]);
269                  }
270                  else {
271                    source.setAttribute("src",video_source + results[key]);
272                  }
273                }
274                else if (children[j].tagName.toLowerCase() == "audio") {
275                  var source = children[j].getElementsByTagName("source")[0];
276                  var audio_source = source.getAttribute("src");
277                  if (audio_source == "" || audio_source == undefined || audio_source == null) {
278                    source.setAttribute("src",results[key]);
279                    children[j].load();
280                  }
281                  else {
282                    source.setAttribute("src",audio_source + results[key]);
283                    children[j].load();
284                  }
285                }
286                else if (children[j].tagName.toLowerCase() == "select") {
287                  var selectElement = children[j];
288                  var desiredValue = results[key];
289                  
290                  // Find the option with the desired value
291                  var options = selectElement.options;
292                  for (var p = 0; p < options.length; p++) {
293                    if (options[p].value == desiredValue) {
294                      options[p].selected = true;
295                    } else {
296                      options[p].selected = false;
297                    }
298                  }
299                }
300                else if (children[j].tagName.toLowerCase() == "input") {
301                  if (children[j].getAttribute("data-type") == "name") {
302                    children[j].setAttribute("name",results[key]);
303                  }
304                  else if (children[j].getAttribute("data-type") == "id") {
305                    children[j].setAttribute("data-id",results[key]);  
306                  }
307                  else if (children[j].getAttribute("data-type") == "class") {
308                    children[j].classList.add(slugify(results[key]));
309                  }
310                  else {
311                    if (children[j].getAttribute("type").toLowerCase() == "radio") {
312                      if (children[j].value == results[key]) {
313                        children[j].checked = true;
314                      }
315                      else {
316                        children[j].checked = false;  
317                      }
318                    }
319                    else if (children[j].getAttribute("type").toLowerCase() == "checkbox") {
320                      if (results[key].toString().toLowerCase() == "true") {
321                        children[j].checked = true;
322                      }
323                      else {
324                        children[j].checked = false;  
325                      }
326                    }
327                    else if (children[j].getAttribute("type").toLowerCase() == "file") {
328                      children[j].setAttribute("data-file",results[key]);
329                    }
330                    else {
331                      children[j].setAttribute("value", results[key]);
332                    }
333                  }
334                }
335                else {
336                  if (children[j].getAttribute("data-type") == "text") {
337                    children[j].innerHTML = results[key]; 
338                  }
339                  else if (children[j].getAttribute("data-type") == "name") {
340                    children[j].setAttribute("name",results[key]);
341                  }
342                  else if (children[j].getAttribute("data-type") == "id") {
343                    children[j].setAttribute("data-id",results[key]);
344                  }
345                  else if (children[j].getAttribute("data-type") == "class") {
346                    children[j].classList.add(slugify(results[key]));
347                  }
348                  else if (children[j].getAttribute("data-type") == "html") {
349                    children[j].innerHTML = htmlDecode(results[key]);
350                  }
351                  else {
352                    children[j].innerHTML = results[key];
353                  }
354                }
355                children[j].setAttribute("data" + key.replace(/\./g,"-"), JSON.stringify(results[key]).replace(/"/g, ""));
356              }
357            }
358          }
359        }
360      });
361    }
362    // IF THIS IS A STRAIGHT ARRAY AND NOT A LIST OF DICTIONARIES, DON'T ITERATE THROUGH THE CHILDREN.
363    else {
364      // First set the data-id for the parent to the item
365      current_elem.setAttribute("data-id",items[i]);
366      if (fillChild != null) {
367        current_elem = current_elem.querySelectorAll(fillChild);
368      }
369      else {
370        current_elem = [current_elem];
371      }
372      for (var j = 0; j < current_elem.length; j++) {
373        if (current_elem[j].getAttribute("data-type") == "class") {
374          current_elem[j].classList.add(slugify(items[i]));
375        }
376        else if (current_elem[j].getAttribute("data-type") == "id") {
377          current_elem[j].setAttribute("data-id",items[i]);
378        }
379        else if (current_elem[j].getAttribute("data-type") == "name") {
380          current_elem[j].setAttribute("name",items[i]);
381        }
382        else {
383          if (current_elem[j].tagName.toLowerCase() == "img") {
384            current_elem[j].setAttribute("src",items[i]);
385            if (current_elem[j].getAttribute("srcset") != undefined && current_elem[j].getAttribute("srcset") != null && current_elem[j].getAttribute("srcset") != "") {
386              current_elem[j].setAttribute("srcset",items[i]);
387            }
388          }
389          else if (current_elem[j].tagName.toLowerCase() == "a") {
390            if (current_elem[j].getAttribute("data-type") == "text") {
391              current_elem[j].innerHTML = items[i]; 
392            }
393            else {
394              var href = current_elem[j].getAttribute("href");
395              if (href == "#" || href == "" || href == undefined || href == null) {
396                current_elem[j].setAttribute("href",items[i]);  
397              }
398              else {
399                href = href + items[i];
400                current_elem[j].setAttribute("href",href);
401              }
402            }
403          }
404          else if (current_elem[j].tagName.toLowerCase() == "video") {
405            var source = current_elem[j].getElementsByTagName("source")[0];
406            var video_source = source.getAttribute("src");
407            if (video_source == "" || video_source == undefined || video_source == null) {
408              source.setAttribute("src",items[i]);
409            }
410            else {
411              source.setAttribute("src",video_source + items[i]);
412            }
413          }
414          else if (current_elem[j].tagName.toLowerCase() == "audio") {
415            var source = current_elem[j].getElementsByTagName("source")[0];
416            var audio_source = source.getAttribute("src");
417            if (audio_source == "" || audio_source == undefined || audio_source == null) {
418              source.setAttribute("src",items[i]);
419              current_elem[j].load();
420            }
421            else {
422              source.setAttribute("src",audio_source + items[i]);
423              current_elem[j].load();
424            }
425          }
426          else if (current_elem[j].tagName.toLowerCase() == "input") {
427            if (current_elem[j].getAttribute("type").toLowerCase() == "radio") {
428              if (current_elem[j].value == items[i]) {
429                current_elem[j].checked = true;
430              }
431              else {
432                current_elem[j].checked = false;  
433              }
434            }
435            else if (current_elem[j].getAttribute("type").toLowerCase() == "checkbox") {
436              if (items[i].toString().toLowerCase() == "true") {
437                current_elem[j].checked = true;
438              }
439              else {
440                current_elem[j].checked = false;  
441              }
442            }
443            else if (current_elem[j].getAttribute("type").toLowerCase() == "file") {
444              current_elem[j].setAttribute("data-file",items[i]);
445            }
446            else {
447              current_elem[j].setAttribute("value", items[i]);
448            }
449          }
450          else {
451            current_elem[j].innerHTML = items[i];
452          }
453        }
454
455        current_elem[j].setAttribute("data-id",items[i]);
456      }
457    }
458    if (i == items.length - 1) {
459      try {
460        current_elem.classList.add("last");
461      }
462      catch(err) {
463        current_elem[0].classList.add("last");
464      }
465    }
466  }
467
468  // Recursive call when auto_append is true
469  if(auto_append) {
470    var current_item_elems = document.querySelectorAll(query_selector);
471    var last_item = current_item_elems[current_item_elems.length - 1];
472
473    if (all_items.length > parseInt(page_size) * (parseInt(page) + 1) - 1) {
474      if (checkInViewport(last_item)) {
475        fillList(all_items, query_selector, callback, fillChild, parseInt(page_size), parseInt(page) + 1, append, auto_append);
476      }
477      else {
478        waitForViewport(last_item, function() {
479          fillList(all_items, query_selector, callback, fillChild, parseInt(page_size), parseInt(page) + 1, append, auto_append);
480        });
481        if (typeof callback == "function") {
482          var response_obj = {
483            "all":all_items,
484            "filled":items
485          }
486          callback(response_obj);
487        }
488      }
489    }
490    else {
491      if (typeof callback == "function") {
492        var response_obj = {
493          "all":all_items,
494          "filled":items
495        }
496        callback(response_obj);
497      }
498    }
499  }
500  else {
501    if (typeof callback == "function") {
502      var response_obj = {
503        "all":all_items,
504        "filled":items
505      }
506      callback(response_obj);
507    }
508  }
509}
510
511function retrievePublicObjects(group, filters=[], callback=undefined, token=null) {
512  var method = "GET";
513  var url = "https://api.cmscaddy.com/public/" + group + "/";
514
515  if (filters.length > 0) {
516    url = url + "?";
517    
518    for (var i = 0; i < filters.length; i++) {
519      var key = Object.keys(filters[i])[0];
520      if (i != 0) {
521        url = url + "&" + key + "=" + filters[i][key];
522      }
523      else {
524        url = url + key + "=" + filters[i][key];
525      }
526    }
527  }
528
529  var xhr = new XMLHttpRequest();
530  
531  xhr.onreadystatechange = function() {
532    if (xhr.readyState === 4) {
533      var response = xhr.response;
534      var response_json;
535      var items = [];
536      try {
537        response_json = JSON.parse(response);
538        
539        for (var i = 0; i < response_json.length; i++) {
540          var obj = {};
541          Object.keys(response_json[i]).forEach(function(key) {
542            obj[key] = response_json[i][key]["value"];
543
544            try {
545              if (response_json[i][key]["alt"] != undefined && response_json[i][key]["alt"] != null) {
546                obj[key + "-alt"] = response_json[i][key]["alt"];
547              }
548            }
549            catch(err) {
550
551            }
552          })
553          items.push(obj);
554        }
555      } catch (e) {
556        return callback([], "Error parsing response JSON");
557      }
558
559      if (xhr.status >= 200 && xhr.status <= 299) {
560        if (typeof callback == "function") {
561          callback(items, null);
562        }
563      } else {
564        // Handling errors
565        let errorMessage = response_json.error || `HTTP error: ${xhr.status}`;
566        if (typeof callback == "function") {
567          callback([], errorMessage);
568        }
569      }
570    }
571  }
572
573  xhr.open(method, url);
574
575  if (token != null) {
576    xhr.setRequestHeader("Authorization", "Bearer " + token);
577  }
578  xhr.send();
579}
580
581function initializeAndRetrieveContent(group, filters=[], callback=undefined) {
582  var staged = getUrlVars()["staged"];
583  if (staged == "true") {
584    // Prompt the user for input
585    const userInput = prompt("Please enter the email address associated with your CMS Caddy account:");
586
587    // Check if the user entered something or clicked "Cancel"
588    if (userInput !== null) {
589      // Display an alert with the input value
590      alert("Please check your inbox at " + userInput + " for the verification code.");
591
592      $.ajax({
593        type: "POST",
594        url: "https://api.cmscaddy.com/login/",
595        data: JSON.stringify({"email":userInput}),
596        success: function(data) {
597          var two_factor = data["two_factor"];
598          var token = data["token"];
599
600          const userCode = prompt("Please enter the verification: ");
601
602          if (userCode == two_factor) {
603            retrievePublicObjects(group, filters, function(data) {
604              callback(data);
605            }, token);
606          }
607          else {
608            window.location.href = "https://" + window.location.hostname + window.location.pathname;
609          }
610        }
611      })
612    } else {
613      window.location.href = "https://" + window.location.hostname + window.location.pathname;
614    }
615  }
616  else {
617    retrievePublicObjects(group, filters, function(data) {
618      callback(data);
619    });
620  }
621}
622
623function convertJSONtoCSV(json) {
624  if (json.constructor == Object) {
625    json = [json];
626  }
627
628  var fields = Object.keys(json[0])
629  var replacer = function(key, value) { return value === null ? '' : value } 
630  var csv = json.map(function(row){
631    return fields.map(function(fieldName){
632      return JSON.stringify(row[fieldName], replacer)
633    }).join(',')
634  })
635  csv.unshift(fields.join(',')) // add header column
636  csv = csv.join('\r\n');
637  return csv;
638}
639
640function checkInputValidity(input, type) {
641  var inputElement = document.createElement('input');
642  inputElement.type = type;
643  inputElement.value = input;
644
645  if (!inputElement.checkValidity()) {
646    return false;
647  } else {
648    return true;
649  }
650}
651
652// This function is for populating a set number of 
653// elements that are predefined on the page.  
654function populateObjects(items, query_selector, callback) {
655  var item_elems = document.querySelectorAll(query_selector);
656  for (var i = 0; i < item_elems.length; i++) {
657    current_elem = item_elems[i];
658    current_elem.classList.add("show");
659
660    var results = {};
661    iterateDict(items[i], results);
662    Object.keys(results).forEach(function(key) {   
663      current_elem.setAttribute("data" + key.replace(/\./g,"-"), results[key]);
664      var children = current_elem.querySelectorAll(key);
665      if (Array.isArray(results[key]) && children.length > 0) {
666        fillList(results[key], query_selector + "[data-count=" + i.toString() + "]" + ">" + key);
667      }
668      else {
669        for (var j = 0; j < children.length; j++) {
670          var nested_key = true;
671          try {
672            var nested_key_check = key.split(".").length;
673            if (children[j].getAttribute("data-already-filled").split(".").length > nested_key_check) {
674              nested_key = false;
675            }
676          }
677          catch(err) {}
678
679          if (children[j].getAttribute("data-already-filled") == undefined || children[j].getAttribute("data-already-filled") == null || children[j].getAttribute("data-already-filled") == "" || nested_key == true) {
680            children[j].setAttribute("data-already-filled", key);
681            if (children[j].tagName.toLowerCase() == "img") {
682              children[j].setAttribute("src",results[key]);
683              if (children[j].getAttribute("srcset") != undefined && children[j].getAttribute("srcset") != null && children[j].getAttribute("srcset") != "") {
684                children[j].setAttribute("srcset",results[key]);
685              }
686              try {
687                children[j].setAttribute("alt",results[key + "-alt"]);
688              }
689              catch(err) {
690                children[j].setAttribute("alt","");
691              }
692            }
693            else if (children[j].tagName.toLowerCase() == "a") {
694              var href = children[j].getAttribute("href");
695              if (href == "#" || href == "" || href == undefined || href == null) {
696                children[j].setAttribute("href",results[key]);  
697              }
698              else {
699                href = href + results[key];
700                children[j].setAttribute("href",href);
701              }
702            }
703            else if (children[j].tagName.toLowerCase() == "video") {
704              var source = children[j].getElementsByTagName("source")[0];
705              var video_source = source.getAttribute("src");
706              if (video_source == "" || video_source == undefined || video_source == null) {
707                source.setAttribute("src",results[key]);
708              }
709              else {
710                source.setAttribute("src",video_source + results[key]);
711              }
712            }
713            else if (children[j].tagName.toLowerCase() == "audio") {
714              var source = children[j].getElementsByTagName("source")[0];
715              var audio_source = source.getAttribute("src");
716              if (audio_source == "" || audio_source == undefined || audio_source == null) {
717                source.setAttribute("src",results[key]);
718                children[j].load();
719              }
720              else {
721                source.setAttribute("src",audio_source + results[key]);
722                children[j].load();
723              }
724            }
725            else {
726              children[j].innerHTML = results[key];
727            }
728            children[j].setAttribute("data" + key.replace(/\./g,"-"), results[key]);
729          }
730        }
731      }
732    });
733    
734    if (i == items.length - 1) {
735      current_elem.classList.add("last");
736    }
737  }
738
739  if (typeof callback == "function") {
740    callback(data);
741  }
742}
743
744function calculatePages(data, page_size, callback) {
745  var page_count = 0;
746  var current_page = 0;
747  for (var i = 0; i < data.length; i++) {
748    if (current_page < page_size) {
749      current_page = current_page + 1;
750    }
751    else {
752      current_page = 0;
753      page_count = page_count + 1;
754    }
755  }
756  if (typeof callback == "function") {
757    callback(page_count);
758  }  
759}
760
761function fillObject(item, query_selector, callback) {
762  var results = {};
763  iterateDict(item, results);
764
765  Object.keys(results).forEach(function(key) {
766    try {
767      var item_elems = document.querySelectorAll(query_selector + key);
768
769      if (Array.isArray(results[key]) && item_elems.length > 0) {
770        fillList(results[key], query_selector + key);
771      }
772      else {
773        for (var i = 0; i < item_elems.length; i++) {
774          var nested_key = true;
775          try {
776            var nested_key_check = key.split(".").length;
777            if (item_elems[i].getAttribute("data-already-filled").split(".").length > nested_key_check) {
778              nested_key = false;
779            }
780          }
781          catch(err) {}
782
783          if (item_elems[i].getAttribute("data-already-filled") == undefined || item_elems[i].getAttribute("data-already-filled") == null || item_elems[i].getAttribute("data-already-filled") == "" || nested_key == true) {
784            item_elems[i].setAttribute("data-already-filled", key);
785            if (item_elems[i].tagName.toLowerCase() == "img") {
786              if (item_elems[i].getAttribute("data-type") == "class") {
787                item_elems[i].classList.add(slugify(results[key]));
788              }
789              else {
790                item_elems[i].setAttribute("src",results[key]);
791                if (item_elems[i].getAttribute("srcset") != undefined && item_elems[i].getAttribute("srcset") != null && item_elems[i].getAttribute("srcset") != "") {
792                  item_elems[i].setAttribute("srcset",results[key]);
793                }
794                
795                try {
796                  item_elems[i].setAttribute("alt",results[key + "-alt"]);
797                }
798                catch(err) {
799                  item_elems[i].setAttribute("alt","");
800                }
801              }
802            }
803            else if (item_elems[i].tagName.toLowerCase() == "a") {
804              if (item_elems[i].getAttribute("data-type") == "text") {
805                item_elems[i].innerHTML = results[key]; 
806              }
807              else if (item_elems[i].getAttribute("data-type") == "class") {
808                item_elems[i].classList.add(slugify(results[key]));
809              }
810              else {
811                var href = item_elems[i].getAttribute("href");
812                if (href == "#" || href == "" || href == undefined || href == null) {
813                  item_elems[i].setAttribute("href",results[key]);  
814                }
815                else {
816                  href = href + results[key];
817                  item_elems[i].setAttribute("href",href);
818                }
819              }
820            }
821            else if (item_elems[i].tagName.toLowerCase() == "video") {
822              var source = item_elems[i].getElementsByTagName("source")[0];
823              var video_source = source.getAttribute("src");
824              if (video_source == "" || video_source == undefined || video_source == null) {
825                source.setAttribute("src",results[key]);
826              }
827              else {
828                source.setAttribute("src",video_source + results[key]);
829              }
830            }
831            else if (item_elems[i].tagName.toLowerCase() == "audio") {
832              var source = item_elems[i].getElementsByTagName("source")[0];
833              var audio_source = source.getAttribute("src");
834              if (audio_source == "" || audio_source == undefined || audio_source == null || source.classList.contains("replace-src")) {
835                source.setAttribute("src",results[key]);
836                item_elems[i].load();
837              }
838              else {
839                source.setAttribute("src",audio_source + results[key]);
840                item_elems[i].load();
841              }
842            }
843            else if (item_elems[i].tagName.toLowerCase() == "input") {
844              if (item_elems[i].getAttribute("data-type") == "class") {
845                item_elems[i].classList.add(slugify(results[key]));
846              }
847              else {
848                if (item_elems[i].getAttribute("type").toLowerCase() == "radio") {
849                  if (item_elems[i].value == results[key]) {
850                    item_elems[i].checked = true;
851                  }
852                  else {
853                    item_elems[i].checked = false;  
854                  }
855                }
856                else if (item_elems[i].getAttribute("type").toLowerCase() == "checkbox") {
857                  if (results[key].toString().toLowerCase() == "true") {
858                    item_elems[i].checked = true;
859                  }
860                  else {
861                    item_elems[i].checked = false;  
862                  }
863                }
864                else if (item_elems[i].getAttribute("type").toLowerCase() == "file") {
865                  item_elems[i].setAttribute("data-file",results[key]);
866                }
867                else {
868                  item_elems[i].setAttribute("value", results[key]);
869                }
870              }
871            }
872            else if (item_elems[i].tagName.toLowerCase() == "select") {
873              if (item_elems[i].getAttribute("data-type") == "class") {
874                item_elems[i].classList.add(slugify(results[key]));
875              } else {
876                // Find the option with the desired value and set it as selected
877                var selectElement = item_elems[i];
878                var desiredValue = results[key];
879                var options = selectElement.options;
880                for (var j = 0; j < options.length; j++) {
881                  if (options[j].value == desiredValue) {
882                    options[j].selected = true;
883                  } else {
884                    options[j].selected = false;
885                  }
886                }
887              }
888            }
889            else {
890              if (item_elems[i].getAttribute("data-type") == "html") {
891                item_elems[i].innerHTML = htmlDecode(results[key]);
892              }
893              else if (item_elems[i].getAttribute("data-type") == "class") {
894                item_elems[i].classList.add(slugify(results[key]));
895              }
896              else if (item_elems[i].getAttribute("data-type") != undefined && item_elems[i].getAttribute("data-type") != null) {
897                item_elems[i].setAttribute("data-" + item_elems[i].getAttribute("data-type"), results[key]);
898              }
899              else {
900                item_elems[i].innerHTML = results[key];
901              }
902            }
903            item_elems[i].setAttribute("data" + key.replace(/\./g,"-"), results[key]);
904          }
905        }
906      }
907    }
908    catch(err) {}
909  })
910  
911  if (typeof callback == "function") {
912    callback();
913  }
914}
915
916function htmlDecode(input){
917  var e = document.createElement('div');
918  e.innerHTML = input;
919  return e.childNodes[0].nodeValue;
920}
921
922function duplicateObject(action_selector, duplicate_selector, parent_selector=null) {
923  document.addEventListener('click',function(e){
924    if (e.target && e.target.closest(action_selector)) {
925      var searching_for_parent = true;
926      var parentElement = e.target.closest(action_selector).parentElement;
927      while (searching_for_parent) {
928        if (parentElement.querySelectorAll(duplicate_selector).length > 0) {
929          searching_for_parent = false;
930        }
931        else {
932          parentElement = parentElement.parentElement;
933        }
934      }
935      var duplicate_prototype = parentElement.querySelectorAll(duplicate_selector)[0];
936      var numb_objects = document.querySelectorAll(duplicate_selector).length;
937
938      var cloned_elem = duplicate_prototype.cloneNode(true);
939      if (parent_selector == null) {
940        duplicate_prototype.parentElement.appendChild(cloned_elem);
941      }
942      else {
943        document.querySelectorAll(parent_selector)[0].appendChild(cloned_elem);
944      }
945
946      var count_children = cloned_elem.getElementsByClassName("count");
947      for (var i = 0; i < count_children.length; i++) {
948        count_children[i].innerHTML = numb_objects + 1;
949      }
950    }
951  });
952}
953
954function checkInViewport(elem) {
955  var bounding = elem.getBoundingClientRect();
956  return (
957      bounding.top >= 0 &&
958      bounding.left >= 0 &&
959      bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
960      bounding.right <= (window.innerWidth || document.documentElement.clientWidth)
961  );
962}
963
964function waitForViewport(elem, callback=null) {
965  var bounding = elem.getBoundingClientRect();
966  if (
967      bounding.top >= 0 &&
968      bounding.left >= 0 &&
969      bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
970      bounding.right <= (window.innerWidth || document.documentElement.clientWidth)
971  ) {
972    if (typeof callback == "function") {
973      callback();
974    }
975    else {
976      return true;
977    }
978  }
979  else {
980    setTimeout(function() {
981      waitForViewport(elem, callback)
982    },300)
983  }
984}
985
986function removeObject(action_selector, query_selector, preserve=null, index="null") {
987  document.addEventListener('click',function(e){
988    if (e.target && e.target.closest(action_selector)) {
989      let action_elems = document.querySelectorAll(action_selector);
990      var index_numb = document.querySelectorAll(query_selector).length - 1;
991
992      var delete_element = true;
993      if (index.toLowerCase() != "all") {
994        if (index == "last") {
995          index_numb = document.querySelectorAll(query_selector).length - 1;
996        }
997        else if (index == "first") {
998          index_numb = 0;
999        }
1000        else if (index != "null") {
1001          index_numb = parseInt(index);
1002          if (index_numb == NaN) {
1003            index_numb = document.querySelectorAll(query_selector).length - 1;
1004          }
1005        }
1006        else {
1007          if (document.querySelectorAll(query_selector)[0].querySelectorAll(action_selector).length > 0) {
1008            index_numb = Array.prototype.indexOf.call(action_elems, e.target.closest(action_selector));
1009          }
1010        }
1011
1012        if (index_numb == 0 && preserve == "first") {
1013          delete_element = false;
1014        }
1015        else if (index_numb == (document.querySelectorAll(query_selector).length - 1) && preserve == "last") {
1016          delete_element = false;
1017        }
1018        else if (index_numb == parseInt(preserve)) {
1019          delete_element = false
1020        }
1021        
1022        if (delete_element) {
1023          document.querySelectorAll(query_selector)[index_numb].remove();
1024          var removed_elems = document.querySelectorAll(query_selector);
1025          for (var i = 0; i < removed_elems.length; i++) {
1026            var count = removed_elems[i].getElementsByClassName("count");
1027            for (var j = 0; j < count.length; j++) {
1028              count[j].innerHTML = i + 1;
1029            }
1030          }
1031        }
1032
1033      }
1034      else {
1035        var remove_elems = document.querySelectorAll(query_selector);
1036        for (var i = 0; i < remove_elems.length; i++) {
1037          remove_elems[i].remove();
1038        }
1039      }
1040    }
1041  });
1042}
1043
1044function retrieveContentFromAPI(url, method, callback, data, headers={}) {
1045  method = method.toUpperCase();
1046  
1047  var xhr = new XMLHttpRequest();
1048  
1049  xhr.onreadystatechange = function() {
1050    if (xhr.readyState === 4) {
1051      var response = xhr.response;
1052      var response_json;
1053
1054      try {
1055        response_json = JSON.parse(response);
1056      } catch (e) {
1057        return callback(null, "Error parsing response JSON");
1058      }
1059
1060      if (xhr.status >= 200 && xhr.status <= 299) {
1061        if (typeof callback == "function") {
1062          callback(response_json, null);
1063        }
1064      } else {
1065        // Handling errors
1066        let errorMessage = response_json.error || `HTTP error: ${xhr.status}`;
1067        if (typeof callback == "function") {
1068          callback(null, errorMessage);
1069        }
1070      }
1071    }
1072  }
1073
1074  xhr.open(method, url);
1075  
1076  Object.keys(headers).forEach(function(key) {
1077    xhr.setRequestHeader(key, headers[key]);
1078  });
1079
1080  if (data != undefined && data != null && data != "") {
1081    xhr.send(JSON.stringify(data));
1082  } else {
1083    xhr.send();
1084  }
1085}
1086
1087function retrieveContent(company, content_type, query_selector, callback, page_size, page) {
1088  var url = "https://api.internetcaddy.com/content/retrieve/item/?company=" + company + "&content=" + content_type;
1089
1090  if (page_size != undefined) {
1091    url = url + "&page_size=" + page_size;
1092  }
1093
1094  if (page != undefined) {
1095    url = url + "&page=" + page
1096  }
1097
1098  $.ajax({
1099    type: "GET",
1100    url: url,
1101    success: function(data) {
1102      var items = data["formatted_items"];
1103      
1104      if (typeof callback == "function") {
1105        callback(items);
1106      }
1107    }
1108  });
1109}
1110
1111function searchContent(search_selector, query_selector, attributes=null, redirect=null) {
1112  document.addEventListener('keyup',function(e){
1113    if (e.target && e.target.closest(search_selector)) {
1114      var target_value = e.target.value;
1115      if (target_value == null || target_value == undefined || target_value == "") {
1116        target_value = "";
1117      }
1118      if (redirect == null) {
1119        if (e.keyCode == 13) {
1120          event.preventDefault();
1121        } 
1122        executeSearch(target_value, query_selector, attributes, redirect);
1123      }
1124      else {
1125        if (e.keyCode == 13) {
1126          event.preventDefault();
1127          executeSearch(target_value, query_selector, attributes, redirect);
1128        }
1129      }
1130    }
1131  });
1132}
1133
1134function executeSearch(search, query_selector, parameters=null, redirect=null) {
1135  if (redirect == null) {
1136    var items = document.querySelectorAll(query_selector);
1137    if (parameters == null) {
1138      parameters = [].filter.call(items[1].attributes, function(at) { return /^data-/.test(at.name); });
1139    }
1140
1141    if (search.length > 0) {
1142      for (var i = 0; i < items.length; i++) {
1143        items[i].classList.remove("show");
1144      }
1145
1146      for (var i = 0; i < parameters.length; i++) {
1147        var items = document.querySelectorAll(query_selector + "[" + parameters[i] + "*='" + search + "' i]");
1148        for (var j = 0; j < items.length; j++) {
1149          items[j].classList.add("show");
1150        }
1151      }
1152    }
1153    else {
1154      for (var i = 1; i < items.length; i++) {
1155        items[i].classList.add("show");
1156      }
1157    }
1158  }
1159  else {
1160    window.location.href = redirect + search;
1161  }
1162}
1163
1164function searchDataset(data, search_selector, attributes, callback=null) {
1165  document.addEventListener('keyup',function(e){
1166    if (e.target && e.target.closest(search_selector)) {
1167      var target_value = e.target.value;
1168      if (target_value == null || target_value == undefined || target_value == "") {
1169        target_value = "";
1170      }
1171      if (e.keyCode == 13) {
1172        event.preventDefault();
1173      }
1174      
1175      filterDataset(data, attributes, target_value.toLowerCase(), false, callback);
1176    }
1177  });
1178}
1179
1180// data1 and data2 should be arrays and should 
1181function combineDatasets(data1, data2, filter_duplicates=true) {
1182  var list_of_dicts = false;
1183  if (data1[0].constructor == Object) {
1184    list_of_dicts = true;
1185  }
1186  if (list_of_dicts == true) {
1187    if (data2[0].constructor != Object) {
1188      return [];
1189    }
1190  }
1191
1192  if (list_of_dicts) {
1193    var combined = data1.concat(data2);
1194    var temp_array = [];
1195    for (var i = 0; i < combined.length; i++) {
1196      var stringified_dict = JSON.stringify(combined[i]);
1197      if (temp_array.includes(stringified_dict) == false) {
1198        temp_array.push(stringified_dict);
1199      }
1200    }
1201
1202    var final = [];
1203    for (var i = 0; i < temp_array.length; i++) {
1204      final.push(JSON.parse(temp_array[i]));
1205    }
1206    return final;
1207  }
1208  else {
1209    var combined = data1.concat(data2);
1210    var combined = combined.filter((v, i, a) => a.indexOf(v) === i);
1211    return combined;
1212  }
1213}
1214
1215function intersectionDatasets(data1, data2) {
1216  var list_of_dicts = false;
1217  var combined = [];
1218  if (data1[0].constructor == Object) {
1219    list_of_dicts = true;
1220  }
1221  if (list_of_dicts == true) {
1222    if (data2[0].constructor != Object) {
1223      return [];
1224    }
1225  }
1226
1227  if (list_of_dicts) {
1228    var temp_array = data1.concat(data2);
1229    var stringified_temp = [];
1230    for (var i = 0; i < temp_array.length; i++) {
1231      var stringified_dict = JSON.stringify(temp_array[i]);
1232      stringified_temp.push(stringified_dict);
1233    }
1234
1235    const toFindDuplicates = array => array.filter((item, index) => array.indexOf(item) !== index)
1236    var final = toFindDuplicates(stringified_temp);
1237    var final_formatted = [];
1238    for (var i = 0; i < final.length; i++) {
1239      final_formatted.push(JSON.parse(final[i]));
1240    }
1241    return final_formatted;
1242  }
1243  else {
1244    var temp_array = data1.concat(data2);
1245    const toFindDuplicates = array => array.filter((item, index) => array.indexOf(item) !== index)
1246    var final = toFindDuplicates(temp_array);
1247
1248    return final;
1249  }
1250}
1251
1252function paginateResults(query_selector, page_size, callback) {
1253  var selected_elems = document.querySelectorAll(query_selector);
1254  var page = 0;
1255  for (var i = 0; i < selected_elems.length; i++) {
1256    if (i >= page_size) {
1257      page = page + 1;
1258    }
1259    selected_elems[i].setAttribute("data-results-page",page);  
1260  }
1261  if (typeof callback == "function") {
1262    callback(page);
1263  }
1264}
1265
1266function showPageResults(query_selector, page, append=false, callback) {
1267  var selected_elems = document.querySelectorAll(query_selector);
1268  for (var i = 0; i < selected_elems.length; i++) {
1269    if (append == false) {
1270      if (selected_elems[i].getAttribute("data-results-page") != page) {
1271        selected_elems[i].classList.remove("show");
1272      }
1273    }
1274    else {
1275      if (selected_elems[i].getAttribute("data-results-page") == page) {
1276        selected_elems[i].classList.add("show");
1277      }
1278    }
1279  }
1280  if (typeof callback == "function") {
1281    callback(page);
1282  }
1283}
1284
1285function sortElements(sort_elem, sort_by, is_number=false, reverse=false, callback) {
1286  var sort_elems = document.querySelectorAll(sort_elem);
1287  var parent_elem = sort_elems[0].parentElement;
1288
1289  var sortArr = [].slice.call(sort_elems).sort(function (a, b) {
1290    if (reverse) {
1291      if (sort_by == "html") {
1292        if (is_number) {
1293          return parseInt(a.textContent) > parseInt(b.textContent) ? -1 : 1;
1294        }
1295        else {
1296          return a.textContent > b.textContent ? -1 : 1;  
1297        }
1298      }
1299      else {
1300        if (is_number) {
1301          return parseInt(a.getAttribute(sort_by)) > parseInt(b.getAttribute(sort_by)) ? -1 : 1;
1302        }
1303        else {
1304          return a.getAttribute(sort_by) > b.getAttribute(sort_by) ? -1 : 1;  
1305        }
1306      }
1307    }
1308    else {
1309      if (sort_by == "html") {
1310        if (is_number) {
1311          return parseInt(a.textContent) > parseInt(b.textContent) ? 1 : -1;
1312        }
1313        else {
1314          return a.textContent > b.textContent ? 1 : -1;  
1315        }
1316      }
1317      else {
1318        if (is_number) {
1319          return parseInt(a.getAttribute(sort_by)) > parseInt(b.getAttribute(sort_by)) ? 1 : -1;  
1320        }
1321        else {
1322          return a.getAttribute(sort_by) > b.getAttribute(sort_by) ? 1 : -1;    
1323        }
1324      }
1325    }
1326  });
1327  
1328  sortArr.forEach(function (p) {
1329    parent_elem.appendChild(p);
1330  });
1331
1332  if (typeof callback == "function") {
1333    callback();
1334  }
1335}
1336
1337function multiSelectFilterContent(filter_by_elem, filter_by_attribute, filter_result_elem, filter_result_attribute, exact=true, link_filters=false, callback) {
1338  document.addEventListener('click',function(e){
1339    if (e.target && e.target.closest(filter_by_elem)) {
1340      if (e.target.closest(filter_by_elem).classList.contains("selected")) {
1341        e.target.closest(filter_by_elem).classList.remove("selected");
1342      }
1343      else {
1344        e.target.closest(filter_by_elem).classList.add("selected");
1345      }
1346
1347      if (link_filters) {
1348        var all_filter_elems = document.querySelectorAll(filter_by_elem + ".selected");
1349        if (all_filter_elems.length == 0) {
1350          all_filter_elems = document.querySelectorAll(filter_by_elem + ".show");
1351        }
1352        filter_values = [];
1353        for (var i = 0; i < all_filter_elems.length; i++) {
1354          var filter_value = all_filter_elems[i].getAttribute(filter_by_attribute);  
1355          filter_values.push(filter_value);
1356        }
1357
1358        var query_selector_array = [];
1359        for (var i = 0; i < filter_values.length; i++) {
1360          query_selector_array.push("[" + filter_result_attribute + "='" + filter_values[i] + "']");
1361        }
1362        var query_selector_string = JSON.stringify(query_selector_array);
1363
1364        // THEN SET THE FILTER STATES SO WE KNOW
1365        var filtered_elems = document.querySelectorAll(filter_result_elem);
1366        filtered_elems[0].setAttribute("data-filter-by-" + filter_by_elem, query_selector_string);
1367
1368        var filter_attributes = filtered_elems[0].attributes;
1369        var combined_queryselector_array = [];
1370        for (let i = filter_attributes.length - 1; i >= 0; i--) {
1371          if (filter_attributes[i].name.includes("data-filter-by-")) {
1372            combined_queryselector_array.push(JSON.parse(filter_attributes[i].value));
1373          }
1374        }
1375
1376        combined_queryselector_array.sort(function (a, b) {
1377          return b.length - a.length;
1378        });
1379
1380        var selected_elems = document.querySelectorAll(filter_result_elem);
1381        var selectors_array = [];
1382        for (var i = 0;
1382 i < combined_queryselector_array.length; i++) {
1383          var current_selector = "";
1384          for (var j = 0; j < combined_queryselector_array[i].length; j++) {
1385            current_selector = current_selector + ", " + combined_queryselector_array[i][j];
1386          }
1387          current_selector = current_selector.slice(2,); 
1388          selectors_array.push(current_selector);
1389        }
1390
1391        for (var i = 1; i < selected_elems.length; i++) {
1392          var matches = true;
1393          for (var j = 0; j < selectors_array.length; j++) {
1394            if (selected_elems[i].matches(selectors_array[j]) == false) {
1395              matches = false;
1396            }
1397          }
1398          if (matches == false) {
1399            selected_elems[i].classList.remove("show");
1400          }
1401          else {
1402            selected_elems[i].classList.add("show");
1403          }
1404        }
1405      }
1406      else {
1407        var all_filter_elems = document.querySelectorAll(filter_by_elem + ".selected");
1408        if (all_filter_elems.length == 0) {
1409          all_filter_elems = document.querySelectorAll(filter_by_elem + ".show");
1410        }
1411        filter_values = [];
1412        for (var i = 0; i < all_filter_elems.length; i++) {
1413          var filter_value = all_filter_elems[i].getAttribute(filter_by_attribute);  
1414          filter_values.push(filter_value);
1415        }
1416
1417        var query_selector_string = "";
1418        for (var i = 0; i < filter_values.length; i++) {
1419          query_selector_string = query_selector_string + ", " + filter_result_elem + "[" + filter_result_attribute + "='" + filter_values[i] + "']";
1420        }
1421        query_selector_string = query_selector_string.slice(2,);
1422
1423        var all_elems = document.querySelectorAll(filter_result_elem);
1424        for (var i = 0; i < all_elems.length; i++) {
1425          all_elems[i].classList.remove("show");
1426        }
1427
1428        document.querySelectorAll(filter_result_elem)[0].removeAttribute("data-last-filter-by");
1429        document.querySelectorAll(filter_result_elem)[0].removeAttribute("data-queryselector");
1430
1431        var filtered_elems = document.querySelectorAll(query_selector_string);
1432        for (var i = 0; i < filtered_elems.length; i++) {
1433          filtered_elems[i].classList.add("show");
1434        }
1435      }
1436
1437      if (typeof callback == "function") {
1438        callback();
1439      }
1440    }
1441  });
1442}
1443
1444function multiSelectFilterDataset(data, filter_by_elem, filter_by_attribute, filter_result_by, callback, exact=true) {
1445  document.addEventListener('click',function(e){
1446    if (e.target && e.target.closest(filter_by_elem)) {
1447      if (e.target.closest(filter_by_elem).classList.contains("selected")) {
1448        e.target.closest(filter_by_elem).classList.remove("selected");
1449      }
1450      else {
1451        e.target.closest(filter_by_elem).classList.add("selected");
1452      }
1453
1454      var final_set = [];
1455
1456      var all_filter_elems = document.querySelectorAll(filter_by_elem + ".selected");
1457      if (all_filter_elems.length == 0) {
1458        all_filter_elems = document.querySelectorAll(filter_by_elem + ".show");
1459      }
1460      filter_values = [];
1461      for (var i = 0; i < all_filter_elems.length; i++) {
1462        var filter_value = all_filter_elems[i].getAttribute(filter_by_attribute);  
1463        filter_values.push(filter_value);
1464      }
1465
1466      var filter_result_by_array = [];
1467      if (Array.isArray(filter_result_by)) {
1468        filter_result_by_array = filter_result_by;
1469      }
1470      else {
1471        if (filter_result_by.includes(",")) {
1472          filter_result_by_array = filter_result_by.split(",");
1473        }
1474        else {
1475          filter_result_by_array = [filter_result_by]
1476        }
1477      }
1478
1479      for (var i = 0; i < data.length; i++) {
1480        var match = false;
1481        var data_value = data[i];
1482        for (var j = 0; j < filter_result_by_array.length; j++) {
1483          var filter_by_name = filter_result_by_array[j];
1484          data_value = data_value[filter_by_name];
1485        }
1486
1487        if (exact) {
1488          if (filter_values.includes(data_value)) {
1489            final_set.push(data[i]);
1490          }
1491        }
1492        else {
1493          var found_match = false;
1494          for (var j = 0; j < filter_values.length; j++) {
1495            if (found_match == false) {
1496              if (data_value.toLowerCase().includes(filter_values[j].toLowerCase())) {
1497                found_match = true;
1498              }
1499            }
1500          }
1501          if (found_match) {
1502            final_set.push(data[i]);
1503          }
1504        }
1505      }
1506
1507      if (typeof callback == "function") {
1508        callback(final_set);
1509      }
1510    }
1511  });
1512}
1513
1514function filterContent(filter_by_elem, filter_by_attribute, filter_result_elem, filter_result_attribute, exact=true, callback) {
1515  document.addEventListener('click',function(e){
1516    if (e.target && e.target.closest(filter_by_elem)) {
1517      var all_filter_elems = document.querySelectorAll(filter_by_elem);
1518      for (var i = 0; i < all_filter_elems.length; i++) {
1519        all_filter_elems[i].classList.remove("selected");
1520      }
1521
1522      e.target.closest(filter_by_elem).classList.add("selected");
1523
1524      var filter_value = "";
1525      if (filter_by_attribute == "innerHTML") {
1526        filter_value = e.target.closest(filter_by_elem).innerHTML;
1527      }
1528      else {
1529        filter_value = e.target.closest(filter_by_elem).getAttribute(filter_by_attribute);  
1530      }
1531      var filtered_elems = document.querySelectorAll(filter_result_elem);
1532      // Skip the prototype element
1533      for (var i = 1; i < filtered_elems.length; i++) {
1534        filtered_elems[i].classList.add("show");
1535        if (filter_value != "All") {
1536          if (filter_result_attribute == "innerHTML") {
1537            if (exact) {
1538              if (filtered_elems[i].innerHTML != filter_value) {
1539                filtered_elems[i].classList.remove("show");
1540              }
1541            }
1542            else {
1543              if (filtered_elems[i].innerHTML.includes(filter_value) == false) {
1544                filtered_elems[i].classList.remove("show");
1545              }
1546            }
1547          }
1548          else {
1549            if (exact) {
1550              if (filtered_elems[i].getAttribute(filter_result_attribute) != filter_value) {
1551                filtered_elems[i].classList.remove("show");
1552              }
1553            }
1554            else {
1555              if (filtered_elems[i].getAttribute(filter_result_attribute).includes(filter_value) == false) {
1556                filtered_elems[i].classList.remove("show");
1557              }
1558            }
1559          }
1560        }
1561      }
1562
1563      var count = document.querySelectorAll(filter_result_elem + ".show").length;
1564
1565      if (typeof callback == "function") {
1566        var response_obj = {
1567          "value":filter_value,
1568          "count":count
1569        }
1570        callback(response_obj);
1571      }
1572    }
1573  });
1574}
1575
1576/**
1577 * Filters content on the page based on the value of a specific URL parameter.
1578 * @param {string} param - The name of the URL parameter to filter by.
1579 * @param {string} query_selector - The CSS selector to identify elements to be filtered.
1580 * @param {string|Array} filter_result_attribute - The attribute(s) used for filtering the elements.
1581 * @param {boolean} includes - Indicates whether the filter should check for inclusion in the attribute value or exact match.
1582 * @param {function} callback - Optional callback function to be executed after filtering.
1583 */
1584function filterContentByURLParam(param, query_selector, filter_result_attribute, includes = false, callback) {
1585  // Get the value of the specified URL parameter and decode it.
1586  var param_value = decodeURIComponent(getUrlVars()[param]);
1587
1588  // Check if the parameter value is not empty, undefined, null, "undefined", or "null".
1589  if (param_value != undefined && param_value != null && param_value != "" && param_value != "undefined" && param_value != "null") {
1590    // Convert the parameter value to lowercase for case-insensitive comparison.
1591    param_value = param_value.toLowerCase();
1592
1593    // Split the parameter value by "+" to handle multiple values.
1594    var param_value_array = param_value.split("+");
1595
1596    // Get all elements that match the query selector and have the "show" class.
1597    var elems = document.querySelectorAll(query_selector + ".show");
1598
1599    // Initialize an array to store the attributes used for filtering.
1600    var attributes = [];
1601
1602    // Check if the filter_result_attribute contains "*" to indicate all attributes.
1603    if (filter_result_attribute.includes("*")) {
1604      // Get all attribute names of the first matched element (elems[1]) and filter based on the wildcard "*".
1605      var all_attrs = elems[1].getAttributeNames();
1606      var attr_start = filter_result_attribute.split("*")[0];
1607
1608      // Iterate through all_attrs and select attributes that match the wildcard condition.
1609      for (var i = 0; i < all_attrs.length; i++) {
1610        if (all_attrs[i].includes(attr_start)) {
1611          attributes.push(all_attrs[i]);
1612        }
1613      }
1614    } else {
1615      // If filter_result_attribute is not "*", check if it's an array or a single attribute.
1616      if (Array.isArray(filter_result_attribute)) {
1617        attributes = filter_result_attribute;
1618      } else {
1619        attributes.push(filter_result_attribute);
1620      }
1621    }
1622
1623    // Loop through each element to check if it matches the filter criteria.
1624    for (var i = 0; i < elems.length; i++) {
1625      var found_elem = false; // A flag to indicate if the element matches the filter criteria.
1626
1627      // Loop through each value in param_value_array to check against the attributes.
1628      for (var k = 0; k < param_value_array.length; k++) {
1629        if (includes == true) {
1630          // Check if the attribute value includes the current param_value_array[k].
1631          for (var j = 0; j < attributes.length; j++) {
1632            if (elems[i].getAttribute(attributes[j]).toLowerCase().includes(param_value_array[k])) {
1633              found_elem = true;
1634            }
1635          }
1636        } else {
1637          // Check if the attribute value is an exact match with the current param_value_array[k].
1638          for (var j = 0; j < attributes.length; j++) {
1639            if (elems[i].getAttribute(attributes[j]).toLowerCase() == param_value_array[k]) {
1640              found_elem = true;
1641            }
1642          }
1643        }
1644      }
1645
1646      // If the element does not match the filter criteria, remove the "show" class to hide it.
1647      if (found_elem == false) {
1648        elems[i].classList.remove("show");
1649      }
1650    }
1651
1652    // Execute the callback function if provided and is a valid function.
1653    if (typeof callback == "function") {
1654      callback();
1655    }
1656  }
1657}
1658
1659// Pass filter by as array for nested filter, or as a string with commas
1660/**
1661 * Filters a dataset based on specified criteria and returns a filtered set of data.
1662 * @param {Array} data - The original dataset to be filtered.
1663 * @param {string|Array} filter_by - The key(s) used for filtering the data.
1664 * @param {string} filter_value - The value to filter by.
1665 * @param {boolean} exact - Indicates whether the filtering should be exact or case-insensitive.
1666 * @param {function} callback - Optional callback function to be executed after filtering.
1667 * @param {boolean} exclude - Indicates whether to exclude matched data instead of including them.
1668 */
1669function filterDataset(data, filter_by, filter_value, exact = false, callback, exclude = false) {
1670  var final_set = []; // Initialize an empty array to store the filtered data.
1671  var filter_by_array = []; // Initialize an empty array to store the keys used for filtering.
1672
1673  // Convert the 'filter_by' parameter to an array if it's a string with comma-separated values.
1674  if (Array.isArray(filter_by)) {
1675    filter_by_array = filter_by;
1676  } else {
1677    if (filter_by.includes(",")) {
1678      filter_by_array = filter_by.split(",");
1679    } else {
1680      filter_by_array = [filter_by]; // If 'filter_by' is not an array or comma-separated string, convert it to a single-element array.
1681    }
1682  }
1683
1684  // Loop through each item in the 'data' array to apply the filtering.
1685  for (var i = 0; i < data.length; i++) {
1686    var match = false; // A flag to indicate if the current data item matches the filter criteria.
1687    var data_value = data[i]; // The current data item to be filtered.
1688
1689    // Loop through each key specified in 'filter_by_array' to access nested properties for filtering.
1690    for (var j = 0; j < filter_by_array.length; j++) {
1691      var filter_by_name = filter_by_array[j];
1692      data_value = data_value[filter_by_name];
1693    }
1694
1695    // Check whether to include or exclude the data item based on the filter criteria.
1696    if (exclude === false) {
1697      // Include matched items in the final set.
1698      if (exact && data_value == filter_value) {
1699        final_set.push(data[i]);
1700      } else if (exact === false && data_value.toLowerCase().includes(filter_value.toLowerCase())) {
1701        final_set.push(data[i]);
1702      }
1703    } else {
1704      // Exclude matched items from the final set.
1705      if (exact && data_value != filter_value) {
1706        final_set.push(data[i]);
1707      } else if (exact === false && data_value.toLowerCase().includes(filter_value.toLowerCase()) === false) {
1708        final_set.push(data[i]);
1709      }
1710    }
1711  }
1712
1713  // Execute the callback function if it's provided and is a valid function.
1714  if (typeof callback === "function") {
1715    callback(final_set);
1716  }
1717}
1718
1719/**
1720 * Removes items from the dataset that match the specified criteria.
1721 * @param {Array} data - The original dataset to be filtered.
1722 * @param {string|Array} filter_by - The key(s) used for filtering the data.
1723 * @param {string} filter_value - The value to filter by.
1724 * @param {boolean} exact - Indicates whether the filtering should be exact or case-insensitive.
1725 * @param {function} callback - Optional callback function to be executed after filtering.
1726 */
1727function removeFromDataset(data, filter_by, filter_value, exact = false, callback) {
1728  var final_set = []; // Initialize an empty array to store the filtered data.
1729  var filter_by_array = []; // Initialize an empty array to store the keys used for filtering.
1730
1731  // Convert the 'filter_by' parameter to an array if it's a string with comma-separated values.
1732  if (Array.isArray(filter_by)) {
1733    filter_by_array = filter_by;
1734  } else {
1735    if (filter_by.includes(",")) {
1736      filter_by_array = filter_by.split(",");
1737    } else {
1738      filter_by_array = [filter_by]; // If 'filter_by' is not an array or comma-separated string, convert it to a single-element array.
1739    }
1740  }
1741
1742  // Loop through each item in the 'data' array to apply the filtering.
1743  for (var i = 0; i < data.length; i++) {
1744    var match = false; // A flag to indicate if the current data item matches the filter criteria.
1745    var data_value = data[i]; // The current data item to be filtered.
1746
1747    // Loop through each key specified in 'filter_by_array' to access nested properties for filtering.
1748    for (var j = 0; j < filter_by_array.length; j++) {
1749      var filter_by_name = filter_by_array[j];
1750      data_value = data_value[filter_by_name];
1751    }
1752
1753    // Check if the item should be included in the final set based on the filter criteria.
1754    if (exact && data_value != filter_value) {
1755      // If 'exact' is true, include items that don't match the 'filter_value'.
1756      final_set.push(data[i]);
1757    } else if (exact == false && data_value.toLowerCase().includes(filter_value.toLowerCase()) == false) {
1758      // If 'exact' is false, include items that don't contain 'filter_value' (case-insensitive).
1759      final_set.push(data[i]);
1760    }
1761  }
1762
1763  // Execute the callback function if it's provided and is a valid function.
1764  if (typeof callback == "function") {
1765    callback(final_set);
1766  }
1767}
1768
1769function filterDatasetByURLParam(data, param, filter_by, exact=false, callback) {
1770  var final_set = [];
1771  var param_value = decodeURIComponent(getUrlVars()[param]);
1772  if (param_value != undefined && param_value != null && param_value != "" && param_value != "undefined" && param_value != "null") {
1773    var param_value_array = param_value.split("+");
1774    var filter_by_array = [];
1775
1776    if (Array.isArray(filter_by)) {
1777      filter_by_array = filter_by;
1778    }
1779    else {
1780      if (filter_by.includes(",")) {
1781        filter_by_array = filter_by.split(",");
1782      }
1783      else {
1784        filter_by_array = [filter_by]
1785      }
1786    }
1787    
1788    for (var i = 0; i < data.length; i++) {
1789      var found = false;
1790      var data_value = data[i];
1791      for (var j = 0; j < filter_by_array.length; j++) {
1792        var filter_by_name = filter_by_array[j];
1793        data_value = data_value[filter_by_name];
1794      }
1795
1796      for (var k = 0; k < param_value_array.length; k++) {
1797        if (exact && data_value == param_value_array[k]) {
1798          found = true;
1799        }
1800        else if (exact == false && data_value.toLowerCase().includes(param_value_array[k].toLowerCase())) {
1801          found = true;
1802        }
1803      }
1804
1805      if (found) {
1806        final_set.push(data[i]);
1807      }
1808    }
1809
1810    if (typeof callback == "function") {
1811      callback(final_set);
1812    }
1813  }
1814}
1815
1816// GROUP BY should be a list if it's nested keys
1817// DATA should be a list of dicts
1818function groupObjects(data, group_by, callback) {
1819  var unique_keys = [];
1820  var group_by_array = [];
1821  var grouped_result = {};
1822  if (Array.isArray(group_by)) {
1823    group_by_array = group_by;
1824  }
1825  else {
1826    if (group_by.includes(",")) {
1827      group_by_array = group_by.split(",");
1828    }
1829    else {
1830      group_by_array = [group_by]
1831    }
1832  }
1833  for (var i = 0; i < data.length; i++) {
1834    var group_by_value = data[i];
1835    for (var j = 0; j < group_by_array.length; j++) {
1836      var group_by_key = group_by_array[j];
1837      group_by_value = group_by_value[group_by_key];
1838    }
1839
1840    if (unique_keys.includes(group_by_value)) {
1841      grouped_result[group_by_value].push(data[i]);
1842    }
1843    else {
1844      var data_obj = data[i];
1845      grouped_result[group_by_value] = [data_obj];
1846      unique_keys.push(group_by_value);
1847    }
1848  }
1849
1850  if (typeof callback == "function") {
1851    callback(grouped_result);
1852  }
1853}
1854
1855function countObjects(query_selector, count_selector=null, callback=null) {
1856  var numb_items = document.querySelectorAll(query_selector).length;
1857  if (count_selector != null) {
1858    var count_elems = document.querySelectorAll(count_selector);
1859    for (var i = 0; i < count_elems.length; i++) {
1860      count_elems[i].innerHTML = numb_items;
1861    }
1862  }
1863
1864  if (typeof callback == "function") {
1865    callback(numb_items);
1866  }
1867  else {
1868    return numb_items;
1869  }
1870}
1871
1872// THIS IS A COPIED FUNCTION TO DEEP MERGE TWO DICTIONARIES
1873function mergeDeep(target, source) {
1874  const isObject = (obj) => obj && typeof obj === 'object';
1875
1876  if (!isObject(target) || !isObject(source)) {
1877    return source;
1878  }
1879
1880  Object.keys(source).forEach(key => {
1881    const targetValue = target[key];
1882    const sourceValue = source[key];
1883
1884    if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
1885      target[key] = targetValue.concat(sourceValue);
1886    } else if (isObject(targetValue) && isObject(sourceValue)) {
1887      target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);
1888    } else {
1889      target[key] = sourceValue;
1890    }
1891  });
1892
1893  return target;
1894}
1895
1896function findUniques(data, callback) {
1897  var uniques_array = [];
1898  var uniques_dict = {};
1899  var formatted_uniques_dict = {};
1900  var list_of_dicts = false;
1901  if (data.length > 0) {
1902    if (data[0].constructor == Object) {
1903      list_of_dicts = true;
1904    }
1905  }
1906
1907  if (list_of_dicts) {
1908    for (var i = 0; i < data.length; i++) {
1909      var results = {};
1910      iterateDict(data[i], results);
1911      Object.keys(results).forEach(function(key) {
1912        if (Array.isArray(results[key])) {
1913          for (var j = 0; j < results[key].length; j++) {
1914            if (uniques_dict[key] != undefined) {
1915              if (uniques_dict[key].includes(results[key][j]) == false) {
1916                uniques_dict[key].push(results[key][j]);
1917              }
1918            }
1919            else {
1920              uniques_dict[key] = [results[key][j]];
1921            }
1922          }
1923        }
1924        else {
1925          if (uniques_dict[key] != undefined) {
1926            if (uniques_dict[key].includes(results[key]) == false) {
1927              uniques_dict[key].push(results[key]);
1928            }
1929          }
1930          else {
1931            uniques_dict[key] = [results[key]];
1932          }
1933        }
1934      });
1935    }
1936
1937    Object.keys(uniques_dict).forEach(function(key) {
1938      key_array = key.slice(1,).split(".");
1939      var newObject = key_array.reduceRight((obj, next) => ({
1940        [next]: obj
1941      }), uniques_dict[key]);
1942      
1943      mergeDeep(formatted_uniques_dict, newObject);
1944    });
1945
1946    if (typeof callback == "function") {
1947      callback(formatted_uniques_dict);
1948    }
1949    else {
1950      return formatted_uniques_dict;
1951    }
1952  }
1953  else {
1954    const unique = (value, index, self) => {
1955      return self.indexOf(value) === index;
1956    }
1957    
1958    var uniques = data.filter(unique)
1959    
1960    var response = {
1961      "uniques":uniques
1962    }
1963    if (typeof callback == "function") {
1964      callback(response);
1965    }
1966    else {
1967      return response;
1968    }
1969  }
1970}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.