From 0f776a6d9fd31668baa4a9e65e0d4097679775d8 Mon Sep 17 00:00:00 2001 From: MatMoul Date: Tue, 3 Oct 2017 15:53:00 +0200 Subject: [PATCH] Large change --- TODO | 1 + src/_locales/en/messages.json | 5 + src/_locales/fr/messages.json | 5 + src/js/background.js | 310 ++++++++++++++++++++-------------- src/js/dial.js | 33 ++-- src/src.zip | Bin 20624 -> 0 bytes src/test/test.html | 9 - src/test/test.js | 21 --- 8 files changed, 214 insertions(+), 170 deletions(-) delete mode 100644 src/src.zip delete mode 100644 src/test/test.html delete mode 100644 src/test/test.js diff --git a/TODO b/TODO index 740ca9f..00adff5 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,4 @@ Config Page Improve screenshot result Add favicon support +Need a solution to update folder and bookmark when it are updated from Firefox \ No newline at end of file diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 2fb0e6a..001e97e 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -34,6 +34,11 @@ "description": "Text of refresh menu item." }, + "menuCapturePage": { + "message": "Capture in a new tab", + "description": "Text of capture menu item." + }, + "menuDeleteItem": { "message": "Delete", "description": "Text of delete menu item." diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json index ac834a8..d9f4c0b 100644 --- a/src/_locales/fr/messages.json +++ b/src/_locales/fr/messages.json @@ -34,6 +34,11 @@ "description": "Text of refresh menu item." }, + "menuCapturePage": { + "message": "Capturer dans un nouvel onglet", + "description": "Text of capture menu item." + }, + "menuDeleteItem": { "message": "Supprimer", "description": "Text of delete menu item." diff --git a/src/js/background.js b/src/js/background.js index e5096de..827b65d 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -1,15 +1,17 @@ var core = {}; // Main app object in background.js var app = {}; // Shared app object with pages -core.init = function(){ // Called from core.Settings.load() - core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root, function(){ // Sync bookmarks with stored data - core.ContextMenus.initMenu(); - core.Bookmarks.initListener(); +core.init = function(){ // Init module + core.Settings.load(function(){ + core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root, function(){ // Sync bookmarks with stored data + core.ContextMenus.initMenu(); + core.Bookmarks.initListener(); + }); }); } core.Settings = {}; // Settings helper object -core.Settings.load = function(){ // Load settings and call core.init +core.Settings.load = function(callback){ // Load settings browser.storage.local.get({ background: '#3c4048', grid: { @@ -39,14 +41,15 @@ core.Settings.load = function(){ // Load settings and call core.init } }).then(function(obj){ app.settings = obj; - core.init(); + if(callback) callback(); }); } core.Settings.save = function(){ // Save settings browser.storage.local.set(app.settings); browser.runtime.sendMessage({ command: 'SettingsChanged' }); } -core.Settings.load(); // Need to be loaded first and call core.init when ready + +core.init(); core.ContextMenus = {} // ContextMenu helper Object core.ContextMenus.initMenu = function(){ // (Called from core.init) Init context menu in all pages @@ -63,12 +66,15 @@ core.ContextMenus.initMenu = function(){ // (Called from core.init) Init context } core.Bookmarks = {} // Bookmarks helper object +core.Bookmarks._onCreated = function(){ core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root); } +core.Bookmarks._onChanged = function(){ core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root); } +core.Bookmarks._onMoved = function(){ core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root); } +core.Bookmarks._onRemoved = function(){ core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root); } core.Bookmarks.initListener = function(){ // (Called from core.init) (/!\ Need filter to root tree only) Init listener of bookmarks - function notifyBookmarksChanged(){ core.GridNodes.sync(app.settings.grid.node, app.settings.grid.root); } - browser.bookmarks.onCreated.addListener(notifyBookmarksChanged); - //browser.bookmarks.onChanged.addListener(notifyBookmarksChanged); // /!\ Need to be removed - browser.bookmarks.onMoved.addListener(notifyBookmarksChanged); - browser.bookmarks.onRemoved.addListener(notifyBookmarksChanged); + browser.bookmarks.onCreated.addListener(core.Bookmarks._onCreated); + //browser.bookmarks.onChanged.addListener(core.Bookmarks._onChanged); + browser.bookmarks.onMoved.addListener(core.Bookmarks._onMoved); + browser.bookmarks.onRemoved.addListener(core.Bookmarks._onRemoved); } core.Bookmarks.load = function(rootPath, callback){ // Load root bookmark and create it if not exist if(!callback) return; @@ -196,92 +202,88 @@ core.SiteInfos.fromWS = function(url, callback){ // Retrieve infos from a Web Se return core.SiteInfos.fromFrame(url, callback); } -core.GridNodes = {}; // GridNodes helper object /* -core.GridNodes.GridNodeType = { - empty: 0, - back: 1, - folder: 2, - bookmark:3 -} core.GridNodes.GridNode = function(){ - this.id = -1; - this.lastUpdate = new Date(0); + this.id = null; // 0 + //this.lastUpdate = new Date(0); this.type = core.GridNodes.GridNodeType.empty; - this.path = ''; - this.title = ''; - this.icon = ''; - this.image = ''; - //this.url = ''; - //this.children = []; + //this.path = ''; + this.title = null; // '' + this.icon = null; // '' + this.image = null; // '' + this.url = null; // '' + this.children = null; // [] } */ +core.GridNodes = {}; // GridNodes helper object +core.GridNodes.GridNodeType = { // GridNodeType + back: -1, + empty: 0, + folder: 1, + bookmark: 2 +} core.GridNodes.sync = function(gridNode, rootPath, callback){ // Sync GridNodes with Bookmarks core.Bookmarks.load(rootPath, function(bookmarkItem){ - core.GridNodes.syncItem(gridNode, bookmarkItem); + function syncNode(gridNode, bookmarkItem){ + gridNode.id = bookmarkItem.id; + if(!gridNode.title) gridNode.title = bookmarkItem.title; + if(bookmarkItem.url){ + gridNode.type = core.GridNodes.GridNodeType.bookmark; + if(!gridNode.url) gridNode.url = bookmarkItem.url; + } else if(bookmarkItem.children){ + gridNode.type = core.GridNodes.GridNodeType.folder; + var EmptyNodes = []; + if(! gridNode.children) gridNode.children = []; + else { + for(var i=gridNode.children.length-1; i>=0; i--){ + if(gridNode.children[i].type==core.GridNodes.GridNodeType.empty){ + EmptyNodes.unshift(gridNode.children[i]); + } else { + var found = false; + for(var child of bookmarkItem.children){ + if(child.id==gridNode.children[i].id){ + found = true; + break; + } + } + if(! found){ + if(i0){ + childGridNode = EmptyNodes[0]; + EmptyNodes.shift(); + }else { + childGridNode = {}; + gridNode.children.push(childGridNode) + } + } + syncNode(childGridNode, child); + } + EmptyNodes.length = 0; + } else { + gridNode.type = core.GridNodes.GridNodeType.empty; + } + } + + syncNode(gridNode, bookmarkItem); core.GridNodes.save(); - browser.runtime.sendMessage({ command: 'gridNodesSynced'}).then(function(){}, function(){}); if(callback) callback(); }); } -core.GridNodes.syncItem = function(gridNode, bookmarkItem){ // Sync GridNode with BookmarkItem - gridNode.id = bookmarkItem.id; - gridNode.title = bookmarkItem.title; // /!\ Need check last update - if(bookmarkItem.url){ - gridNode.type = 'bookmark'; - gridNode.url = bookmarkItem.url; // /!\ Need check last update - } else if(bookmarkItem.children){ - gridNode.type = 'folder'; - var EmptyItems = []; - if(! gridNode.children) gridNode.children = []; - else { - for(var i=gridNode.children.length-1; i>=0; i--){ - if(gridNode.children[i].type!='empty'){ - var found = false; - for(var child of bookmarkItem.children){ - if(child.id==gridNode.children[i].id){ - found = true; - break; - } - } - if(! found){ - if(i0){ - childGridNode = EmptyItems[0]; - EmptyItems.shift(); - }else { - childGridNode = {}; - gridNode.children.push(childGridNode) - } - } - core.GridNodes.syncItem(childGridNode, child); - } - EmptyItems.length = 0; - } else node.type = 'empty'; -} core.GridNodes.save = function(){ // Save GridNode browser.storage.local.set(app.settings); -} -core.GridNodes.saveNode = function(gridNode){ // Save GridNode - browser.storage.local.set(app.settings); -} -core.GridNodes.getChild = function(gridNode, id){ // Return child node by ID - for(var child of gridNode.children) if(child.id == id) return child; - return null; + browser.runtime.sendMessage({ command: 'GridNodesSaved'}); } core.GridNodes.getNode = function(gridNode, path){ // Return GridNode from RootGridNode path if(path.length == 0 || path == '/') return gridNode; @@ -290,6 +292,98 @@ core.GridNodes.getNode = function(gridNode, path){ // Return GridNode from RootG return core.GridNodes.getNode(child, path.substr(child.title.length + 1)); return null; } +core.GridNodes.getChildNode = function(gridNode, id){ // Return child node by ID + for(var child of gridNode.children) if(child.id == id) return child; + return null; +} +core.GridNodes.saveNode = function(gridNode){ // Save GridNode + browser.storage.local.set(app.settings); + browser.runtime.sendMessage({ command: 'GridNodeSaved', gridNode: gridNode }); +} +core.GridNodes.setNodeIndex = function(gridNode, index, newIndex, callback){ // Set Child GridNodeIndex. callback(gridNode, node1, node2) + while(newIndex>=gridNode.children.length) + gridNode.children.push({ type: core.GridNodes.GridNodeType.empty }); + var node1 = gridNode.children[index]; + var node2 = gridNode.children[newIndex]; + gridNode.children[index] = node2; + gridNode.children[newIndex] = node1; + for(var i=gridNode.children.length-1; i>=0; i--){ + if(gridNode.children[i].type != core.GridNodes.GridNodeType.empty) break; + gridNode.children.pop(); + } + core.GridNodes.saveNode(gridNode); + if(callback) callback(gridNode, node1, node2); +} +core.GridNodes.createFolder = function(gridNode, name, callback){ // Create a new folder in a GridNode. callback(gridNode, newGridNode) + browser.bookmarks.onCreated.removeListener(core.Bookmarks._onCreated); + browser.bookmarks.create({ + parentId: gridNode.id, + title: name + }).then(function(bookmarkItem){ + if(!gridNode) return; // ??? Why this method are called a second time with gridNode = null ??? + browser.bookmarks.onCreated.addListener(core.Bookmarks._onCreated); + var newGridNode = { id: bookmarkItem.id, type: core.GridNodes.GridNodeType.folder, title: name, children: [] }; + var EmptyCellFound = false; + for(var i=0; i=0; i--){ + if(gridNode.children[i].type != core.GridNodes.GridNodeType.empty) break; + gridNode.children.pop(); + } + browser.bookmarks.onRemoved.removeListener(core.Bookmarks._onRemoved); + browser.bookmarks.removeTree(id).then(function(){ + browser.bookmarks.onRemoved.addListener(core.Bookmarks._onRemoved); + }, function(){ + browser.bookmarks.onRemoved.addListener(core.Bookmarks._onRemoved); + }); + if(callback) callback(gridNode, id); +} + core.GridNodes.refreshNode = function(gridNode, callback){ // Refresh content of a GridNode if(gridNode.__isLoading == true) return; gridNode.__isLoading = true; @@ -297,43 +391,12 @@ core.GridNodes.refreshNode = function(gridNode, callback){ // Refresh content of if(infos){ gridNode.title = infos.title; gridNode.image = infos.screenshot; - browser.bookmarks.update(gridNode.id, { - title: infos.title - }).then(function(bookmarkItem){}, function(){}); + delete gridNode.__isLoading; core.GridNodes.saveNode(gridNode); - } - gridNode.__isLoading = false; + } else delete gridNode.__isLoading; if(callback) callback(infos); }); } -core.GridNodes.createFolder = function(gridNode, name, callback){ // Create a new folder in a GridNode - browser.bookmarks.create({ - parentId: gridNode.id, - title: name - }).then(callback); -} -core.GridNodes.createBookmark = function(gridNode, url, title, callback){ // Create a new Bookmark in a GridNode - browser.bookmarks.create({ - parentId: gridNode.id, - title: title || url, - url: url - }).then(callback); -} -core.GridNodes.delete = function(id, callback){ // Delete a GridNode - browser.bookmarks.removeTree(id).then(callback); -} -core.GridNodes.setNodeIndex = function(gridNode, index, newIndex, callback){ // Set Child GridNodeIndex - while(newIndex>=gridNode.children.length){ - gridNode.children.push({ type: 'empty' }); - } - var node1 = gridNode.children[index]; - var node2 = gridNode.children[newIndex]; - gridNode.children[index] = node2; - gridNode.children[newIndex] = node1; - core.GridNodes.saveNode(gridNode); - if(callback) callback(); - browser.runtime.sendMessage({ command: 'gridNodesSynced'}).then(function(){}, function(){}); -} core.GridNodes.capturePage = function(gridNode, callback){ browser.tabs.create({url: gridNode.url, active: false}).then(function(tab){ browser.tabs.update(tab.id, {muted: true}).then(function(){}, function(){}); @@ -348,12 +411,8 @@ core.GridNodes.capturePage = function(gridNode, callback){ browser.tabs.remove(tab.id); gridNode.title = tab.title gridNode.image = img; - browser.bookmarks.update(gridNode.id, { - title: gridNode.title - }).then(function(bookmarkItem){}, function(){}); core.GridNodes.saveNode(gridNode); if(callback) callback(); - browser.runtime.sendMessage({ command: 'gridNodesSynced'}).then(function(){}, function(){}); }, function(){ browser.tabs.remove(tab.id); if(callback) callback(); @@ -366,17 +425,18 @@ core.GridNodes.capturePage = function(gridNode, callback){ }, function(){}); } - setTimeout(whaitLoaded, 300); + setTimeout(whaitLoaded, 1000); }, function(){ if(callback) callback(); }); } -// Public functions +// Public members +app.GridNodeType = core.GridNodes.GridNodeType; app.refreshNode = core.GridNodes.refreshNode; app.getNode = core.GridNodes.getNode; app.createFolder = core.GridNodes.createFolder; app.createBookmark = core.GridNodes.createBookmark; -app.deleteNode = core.GridNodes.delete; +app.deleteNode = core.GridNodes.deleteNode; app.setNodeIndex = core.GridNodes.setNodeIndex; app.capturePage = core.GridNodes.capturePage; \ No newline at end of file diff --git a/src/js/dial.js b/src/js/dial.js index 3ac8138..a78201d 100644 --- a/src/js/dial.js +++ b/src/js/dial.js @@ -13,7 +13,14 @@ window.onload = function(){ dial.initUI(); browser.runtime.onMessage.addListener(function(request, sender, sendResponse){ switch(request.command){ - case 'gridNodesSynced': + case 'SettingsChanged': + //if(app.settings) dial.updateGridLayout(dial.Grid, app.settings.grid, dial.styles.grid); + break; + case 'GridNodesSaved': + if(app.settings) dial.populateGrid(dial.Grid, app.settings.grid, dial.Node); + break; + case 'GridNodeSaved': + // request.gridNode if(app.settings) dial.populateGrid(dial.Grid, app.settings.grid, dial.Node); break; } @@ -118,7 +125,7 @@ dial.initMenus = function(){ dial.ItemMenuRefresh.onclick = dial.refreshNode; dial.ItemMenuCapture = document.createElement('menuitem'); - dial.ItemMenuCapture.label = 'Capture' // browser.i18n.getMessage("menuRefreshItem"); + dial.ItemMenuCapture.label = browser.i18n.getMessage("menuCapturePage"); dial.ItemMenuCapture.onclick = dial.capturePage; dial.ItemMenuDelete = document.createElement('menuitem'); @@ -173,9 +180,7 @@ dial.initGrid = function(name, settings, container){ StartIndex-=1; EndIndex-=1; } - app.setNodeIndex(dial.Node, StartIndex, EndIndex, function(){ - dial.populateGrid(grid, app.settings.grid, dial.Node); - }); + app.setNodeIndex(dial.Node, StartIndex, EndIndex); } link.draggable = true; link.ondragstart = dragstart_handler; @@ -269,13 +274,13 @@ dial.populateGrid = function(grid, settings, node){ if(dial.page > 1) iBase = (dial.page -1) * maxCells; for(var i = iBase; iG0?L#a-fs_A7L>69cEo$9sBF5Fe;JvY$ve-J*>$WGwp>s5 zfPXqd-43MQHw=#A9bh1m+Syznb$6Ema8H70hj0;4RpmMtp@k(x%sUpDhUWwp@J76* z*=7E)lIz3cCb>y{#&5zSVFCdK{}ECT@E$LwbYl2GcLnocQa4b%kl42r zUahG_2)15MB`TJEQ;NZnYO+sWfqtG-t;(=xO_?$a7u(!qnMus>*0-6>-u^Ha@?2Jt zC2KqPk&7Vatdx)M1m2rdG`=DIR;$n!RrV@`1ao=5sf}6*;!8k6j*o?Y1^fS`-Pr!$ zXzy-pV&wfxyUf4S{ulXgv`_q{9V6)3D?Ep&wG71Cgt$P-_QXh=fYrxD-=VB6lzp<} zg|<6YOu-yNUc(kWp7(_7Bo>F!7l)Txd?1l}PBFb{neLti=Oc|5)f8qeZ)X%Aw*reC za}TW18@|x~dX#?*SEOS+!Zjd!^pIFdmSvTvpHK7XYrJl>9*$%yc)seK-Y=fH&P{1L zKlqyN<&nv6+g(-{NqkSJOc-H{Zx_%&j&$?K`&6brVb^3EM>`PdD+*5!zY(cQs^6w) z=>_s*(+qBL=sXOY%kMEVMfNi+r}==?y;UJIKik5O(jXN-!zTCYf$Uyn)Bj;_EX?j> zyMO<*E6(xeXC+JeXBS&)w6>ZEJ5xiP6H2WICXJvnzkVsW+uex$=2vuGH!#d)(8bY4BbVyX zf-m&+Tg8ytQX|;*q?2eu9DMarMyTNwK6s95rDjhk2+MczHSfa&Cq=6~ z$GH0B_~$+a?As5Gez(>a$P|cp(f^wd8pBq#7trWyw+LKMlj}yZz?wD>JiFq5Jp`lL zHBD|cc=LVM20pC~Uc17?TCoS4kJ;UVWv6BvJT(n#aroK&9_&|eiu3nTOvmwPs!Lg( z-uu+Ez{r|t9}w!kOBFqEm->J=fN`HsE*K0uwJt!tm)#s_4Q)5lFc-|k4=t6ChJY*n zmW($%fr6%YwgmtH-JZsz*CI>%`|bcSA?e@M0=oYHoAUq6FWdCm(o=uQoc?cwGBN%` z=pUFHhm)iDeSKZs-Ny%8NZ@%Wg2_H`l8B1(ZhCrp=|@L9n6lQ#r|`UIJqW}n_=Br1;Z=TOeK|R5A zMmah0AM2OB$+s{2T^L168cu`b*G{8bD<2!ZTej(PBA)Hfjaj^kGdM}#ne!#p1KYV% znsIS1?#k`HxFGmknQJ4&H?+?)RvjT7=ID0JrFAWqbsE2nZUvEx!O|xwVX)d^aA2k; z1z=Rt;Vc-vTRXG%A|nTEhNzr6HC~gRXrtMGNj&%7H-!CJ9^PEdLD5oEY29JGB;O!9V@Z@bo-?T&hrGzz%;P@yC_(^^D1WIMh)H}{`um&niqrG5RZDZ zEQ4p}7D8~uT_`w+%_d094CR-Kp}K86gWYYBuR_t43kSw8N_q-XM(dNkPPsDJ6*;Q zTF>C`l5qZOuz&5JIFlFR|1Bj%Yh{Q#!2lOXfFQh=t?&`n_28KNqz!Ny6pLk;B=`8x zYW8~F_BBfyq1RzRWVBIa6|lAD5QE%o*ss33lV&g1WY5QPj>ddopd6M*uub3UdtY9E zAzz{vb4*PCz(0d8yEeh!LjT{h`Olb6N1gR3{k#1Bv41{>|I9{T&%ok;h-#d_5ZeEU zYOWqP#=ke<`Vu0)0pI_exm_g*e@7r~Mb#Vt0BGcY3MxD5JtG+KE4R?1iuIN@;ilc=Mcg;$XN{wDw!EMDYHNTDKlAD@O zKaZiYcsDh^M%{k=<@A3@DvGGbO#_4gKq?Uc0QVR5k4KGdEDeq9|MBUPdI(p>4tfkT zWzo{AIAW8?9HmhBth~o!xt2#vdX*|md6BbKok-MbA$fOcSD92Ji~o-%i|_3(%$~zG zne1oo=j>;PU(cBdGhR8*1p&lxEs9=W zFpiJc84L26KUA$-sW9Dvsfxd0k=(W;*?i+BCDgS1Ed3&{&`A5)H%g&E{R0wn#?HFa zh-o=J+dB|z8#@|nCXUZ&`xZu&cy*Ur+Al>n*osdDUzxMT^TXk8{mxOtd^?#;nm9_{ zsisHmyQ=7s;Dv8~#X*1={dw81AMBg%FKFfq&VO4`j^-dQNa#R6Hq{o*ekfeAhtF&R=ZVh zRN9HL;<~0?%En9$ExyjyOgB1Ad%)-~jkTS*tFBC(2lZbIv0k6`tVCPH;8d$oX^J*( zUKmU)MwZnKj!wC5**3ltOCWw#V4o|d!s?ArK21hok~uE3vXY()amxpoCakM!I~6&Z z#ar{8P;9(8{hYI40o%zCANhSI5p1-1(Iy?nGV|8-sHW1`lDPVK*t^;U)3$Yf83&k7 zvWUaf*1~6v0a1f^TpFH;dEm=C%D-qPx!IOmiP^<2$n)Np-ElN$Bh`dA(Q?#0PyY0`|g z)wVU}g(A}_)5e3@yf~N@Go3GpT{eL#dH?;O!{WN=gXHGSp&@66wn}Lbot`bN5uN(c zPuhW<&4`m&K1PD%i8(ekYX69xlN7YgMQz}5u#o;VybEtc>;Wjy@1A>0YdIs$z%KqG za4*^HX>EVI<32yXo~6OGIg~bsK<1Jfnp;@^A@Yce4>KZRIdpnv9Da5q|JFr8XtEmb zKo|BIcCnqD!Wm@RI2|2NJp<0JK{=u_MZ}4zGr7q5tk(4@VyVze<55Pp8nxaPmA*J` zg)8zF@hM4RH~Bn_lGb1+^C3nTM$4VtxZE{5yOQW#$kA@imsB_@YCVzv>*qq8S5=9- zvAe29gD+V)*_&O^hMNG;hB;B%a!1EW?#f0xjzQkxv!}~vy~KdnETexDv;;NQ-W^nA%23~1ff698jiQ}3DGY7=_v%ATJ-6laJT!8|BaG< z^WnodXqss2GxBxDa%@&{9$A$B3N!4Hx@s+yU4Osx=2*#?h|W>n#S*(T z`+l)S%X|Da)8^-Ix{|Xqs_Xpm=WvmPI^!A)e-BL&C9_{ckuNzVh{@a$>P{@^v>Q-T zBKn;((fFI6U2|vW-hbvILXl(^k<7~L^FpP#c4R|a<1!V3HPwW};wCU7w#@eIAL?I^ zxS$-I#&+0r*+i&-Oy*z)cw2jDX!L%neql=kwz>dm)NyRD1Y{v(@CXBd8jqGK=|TOE z-dKyP9!?^hh?1bXW26Z~2mz@J8iQB`EH`H>NOUkd>|zcpUWxBCrD*e4gC$8g;` zc%NLg@HY$voGfYHA9DyA8eF67VtR2SBo%I}3~DIj+4@JVQv8nEBZO^W;h_hygZBki z{Y}F+DmU1CB9Ieb*`Ce8*bHr_$s9Zn7M7J|CS73T7J*dOj& zoo}6H`znFD<HshbnJK{{ulbF!y)>ycAZ_1NU zp2vHsDRB>U%wYd8M)6enB&QVC%D+sza`j?d_|s{w&+vM|rG0$pNnn~nWBY2(7J>D3 z#LKv|J&eO2DwPf*Y|}q8s;jGT4w?T_*ubiFCw4omFvo+FQ(qw7->|pN9IHQD(b^x+ z&l1^P&cKv6hMZFwV=*ZuE>M_~0BcsbfS#d=Fhn~Jy?!{MYHb`Gu?4N!gmv5UwAXX` zQe{D{TS==dDfW_~s(IoRd+ti^L{(|xX@2P?RMFzEF)`*b65L;?Vb!2hoC4<)BEsXW zyBFf6Qr3X)EFTl!|CUi!{-ioD0j4uBY5aAXQOi|HzD&TZ0*-0Y>Xm@$;Mg%rHA;I| zoH!B;fpZPuzj_mUhp_h4M8jR>Z<4DoJPG&lX^U{MZHg_BRbnxRBnWKCnhRZqhCo<> zxw!TvEc6S({TY;LU|kQC(!l9FV9NDqp`6NaGL^P6T@8PZNS$cQGDn*18k^Tu^*;T<++xHg3J$ zv)ML7>9$@FN4j*O2G91qb0ogW?HSY2I|e0fZLEW5Jn=?$Ai#Gi(655q0FyCS!ZW~V zBJ+b<6g(>ovdp)sYNk77?LZQNyy6c<5E-ZJ_}<*{)X2{sup2;CdUP^g53%~UeuK;| z(27{^xG(ZdE?vCANq%}7lD#qkSn^D_cLo()yfuHGLgYM|AxrIcPYQYs~^)VlVrMoWPt4gfUbW1QZobQApDj$!+2Ii1=lh5 z+qlXl&Ee)DnL~|Bq*lC_kT&kr`Lg~41V6q!PkhHy`jCLmFIoQ*=&#rH1YO^Oh!cb0 zal;plQt5FLMY3a|nQ`ko?V6G*hjAL+=k4XEPY@c-Jcq{ihn+tQ|9r2z0Ba;g3$?GP z>0PPgJn7;!_}r^l*8YzqLuHKvL*QWjY%H%-PEcfgHQS@J-&bqQxI!#mszTNTAvXtv z=ZMRCD*GdF0fSwYd-Q5=Tj~fHpD7UAzGekQUi)njseh!StS*JjK(LM)v`XAahiE(e ztFAAV3SU7$5g4uQ|61y_`r0nF#eiiP9y?=2T!$YDc9o*Yc+a<1rvJc7`j z6k@N|;YU5Y;R`hejNT*N&JtsOFr8`r3PN2^#%cbdcH4Ywe^fV=(`km%!9`e$MuB3| z6wTk=PhgNy9t4{~*4D7I#YMnAE|n`B{NO(N`S@JfVIm*$k@7d=Y40++qwTy+#PFUY zQI~hQ2*{1!b;~XvagAX~ewdm+I8ORWhv5%GDCC%Cea|X!#o@j3`P+6~mI3Dlkm@!2BT_jY_0tL->p zAM}RH2xX@mhe_~3QzYpZW4GHyC&@t{q7^U{N)-6T?=pC$qqy)@RapWlYyqs-Kw8&v z>@Bq1I`MT}5wOCvzP;6gjh@|V6R^BLR0v=Rv+X^nb|ch9)FC21I(}hutBBR`@AxwG zN`QX{Jx3>8kNlR$eQWaL*8H`_dcQ-W_(nh6#`%mld6U%?LIWxeaYUUa&XTT`n&;$C zyyQ=4_HF7l(l#g5r<>`eXUWDwSUQ~K1V5Z1t7y+=jtl&Fi(+e}f#>lSakf=zq-b&94j#^KQGa$p1C9NBb3%oK0dFN0O&!jM1N=N-{EC z27U6DEw=3iGAZ?D^3>17%hS>yf`VnW44Bjf_|5 zF7gEJ8`3HXBMXZ^v`?GAPv+I`FzS|5IywT|9x4B)-=rPJV%}Wwe6Fh$5MZTQOy*SXNSydVc#zIdYIi?o=w{Z}QbZWK?uX6uqTH@(#Xy+gz8%kE zQ_~;1NMt}Bdc%V6S04w4)Q$Jnx3sB>c;d9F=u|%zm1$m@f|!N2n%ME6u0Gp|%|9@UcG_=*YX%0rgTCq&`5yg2tW+Ez3=hG!CdjG9XCcv;ML3L%(f^(o!=FF2~IH)KPxpyGT8ASf@tWGzI{fD_qxdMt%LlXSs>J3`;yNqJCU zes_qkvNt}+aUcn0yB}yuU?H&$e7T*-B=qbDXeg(_1dNnF*?$b;yG)VjqX4^mXORq2 z2dBrAVf07iTy9$V0Kk7MU%`dBf9dAG)Nxk zN^CIq`)C{tB1FJD8W>{r_C)r8d6r2x#4fR=BsRB0)Z~LcasLD#LCdD2F+LE=ln#aD zCmJz02!C!7A|h23JsQELH&V=H(C`Ci6hbdcWR#PxZmxE3u7DK9?H&r_iyMFXV|pN{ zuiss>y-wEx^TNHVawEI3fkuxg)Q*^aN8MA(W40Y`AW7iG3LPJMWRbD4@vq8D!@M(3otvW>=q`5^r@VA<;7m z<3gyBS0W|1(5Q^lvd%Y*KYe_t>%x^ExHdBb@9nq)hLv_AGsu@S@q7;RiJIo)FF8DU zVT5PK?9;juoz7Ea@Dto^>AhvgFAwz{7ogZ}I!Bslqv52yOj=N!O0gJB{ct15VdYBX}L4|KG?4?aJ+pjHeIYi%Q`)T zfjB`DTv7@nFJBermnjfJtucx!!GxPP*>DKpKgmF*2FE z(%G&4IujZ>8S z%iP0m-H`bCs-dTOXCHL)AqMXgA^$#l^4Vd;yPL44EH+7V*K!HB4NuIiQ4$HxN>$U$ zL{$A`wX)fKRgX(~9Mi?jRx^mDCky(rOUvT9c6_NZfTHJ+^XeJ7`wMO&OiuY02>r*S zQ6XjrA#mtpR+2$Bnj6OKpd(UwL)}XYpI2~GSZTy7JJf2-bH4!#l{@VlV^^0!nVRPT?P)sFygcn zFfR)a%hJu|>L5SM3$k5TPk$q(Y)#F*>Y)joEn;(1R6@1t&kYtg^1w=Q_lG>wDyz#% zi>^2jW*3%)vCg#+(`HJS7rr8`1Y?P`R~SHcHkt5DZ>$~{sr;Xm-ZB`g9SW~I;U}Jf z>+qzk%ZN1(1{nFJo^GCJj4Q#qr61+_JX$wofmf!+2AgYg%=ZQa5ohiu4{OiQ&q`$8 zwiG|flZ-L8Ris~N&1Pc_!=mi;GDRv~Q_hWya55IMAfj+nu8i7g&uViuz`mBDI-Q2! zUhEM?WIil4k3*Nq}B3L;&1=719ANby16g%6^4?OBk608!A zNwRNmTa`)=Rg8m0FI^Oy<3$_-TIjO$Q(z;`RiC;SSL8Xm3L*+R1IrQcWvU54)VB{I z1r00`ucCG_@pF8YJ0g@Fys98xZfYC_{WOlQwSfbveimZGi59P7RO?}5NzO-T?sR9d zd_Ixk!6^>%sh|X;R#s~Cn@o2nS9d-5lg)%95eWgY{7TrMcs|wA$Bdz2I+ixltWgZ| zTv|yTm{5}U!aN^ocy-Krg{dzCqiXfi@30=7*J!9wpu6V1`fkUj8$SOaa3dM4a z)yYC7j1@XF^vZVH`1Y3jiH53?qaxpp(cx&fPJMB*#-3JtTAWVwR-QtXt}{}l9-~TH ztGIV}ud(mlwend%4o$E&l>&~wjSd5s{jS(jA8P0ffRry*Vx`F8UA73EV*|GTp;fWJ z`O&XyO7BN#LCZ4g?84RkTTY4jt$Shd1zya*Chm@5pAHk+yi!_aykUC@~RxVF!&=R=v8P)96XNuhe0@7sl&6WX`3$vXoq0QnHYj;llV+E1TvrvgJH% zFF!Z8l{6jk*_4H8z##SLVV+4)VR*&etxNw_YR&fH^237kV2KL7v@qLHzNv0Ur^^Y} zeh*1%k2QF>gjmhYmrV`;An-R1_TO#7^(-Pzx!t|EHI^AJX znptH+wV~1G>)k?7A;Abdf0y3=&s}{hW5D?HuPM`A-eT|j+A|E7<;TVS=l<)m=Th6?Ux~+sok*m#;Low>MRcGh3~X#453%j)o#XN^j=Jex2fLFM z5r`&K6yb=$vZJn44xpM~dDEc_NvKD$(Xt5dOwzfp=!S-dFa?3PX(k2v-4ab#o#!yl z8>#gM3bZvCC$h>7z=YxcXpjpv(~b8aF_MkMFy5IY5(XzLQmh(Dlgc3FV&{)!LR8dh zn7{R|s1ph}81u0pO$+$xP)52h@{&yI*3KIFNKvV5jTx=(&KE`#LuF(VLbT28O6!aa z{xq`CpgQ17YKrLWX%@O#Mu|5&`Ygs?(P*cAr#=#TCSP;NYJ5jzVLD`2!aFoU>yWY} zT3wy8BIfGBDbzMdL)kud$jL42WIPnkztpS<@m!LPDL6n<2{3fG*B5C8DE}PZhIFr;Ab%T)z+g!xq!>M^Mf2 z(H@DYNdmjLvGZyyhC;C7k}~0;JVE@ulAC4Ime=&>n5ck0vv+mO(f7Fw5_wu}vbv%M zL7W`r6p}vLkx7<(u%os%j49s=d<@%dfD!tWoZBzY`#X!2_m`i}KYibxCxF(YS-mlM zWNl9)*}^5Fp1DoANsd<25SzHo%cCqMk1bO}JC}6z;s=V+7d+vwG z8tI(3?z%5APvd>};%gO9d<67Saa6ru*pEuBeatvz ztDU>=`FW%*6)FRZ6DLO2K&}q!7oGb=3Lmsm#~{Gil(`<=nFul0WblL;iHW##aEqHu5}`3$azil^f`Z;8>_MnGcQaEJ0Q%G~xA%Arv zyA1cB-3*1EH<*!&AaO!|gUQx4QujQ7?i=R^(?nEK*F|DGUv8IClQpdDh%h#9J}npt zDz*p4eTihXrBlDME1x_<0Yt z6_X5}zt(>hKom1NtkuQ3<`uVpHJ`C8buwA#OVpk6u28EvJ@E?#UAd|7=I0|dVhvs) z^Xp6PqzxnBI@~MbX`K^$;Wug8mBoV2IoQ5&;fQ#PB${!&LPkwCGe5s7BtH1 z0_gVqAKqOoc*;~wd`aF9ZR?LucNE;;HW!i=^m@noBfw|zVMl4mga_5x=d$6Jc#MIY{W_BPO<5c^d!0x7^w*c0GSr=aiKy^Lk!u3aC{2R5p>F_3bb zEDC*Dy3aN?OIw`A1e)#Y%nF9oV3Xjd%koc^J|;#(M3HpfZAQ3^f|K$ovP+eW`&~=a z0u*LCeIFr)Cmx(L+LXHzoQ~@!IYGs{Lqms)Ba7zV_A_2%%=8x!`W^7gkKHnwGbLVU zJUf`d6P>fN&&|rAIA~A69$qGH+2z~VZnJsIM(OS3HXv&W@@7q6VCGNu%Wa` zQgZBUtdY9HO&WS45}yy-lF5pb2rZ+-ln*X+=c3hD{c)8OyC#QIB63ZKhRPZk9KTDv zoOfkqs37R}j(rn}`~*qLLrw54D};8hVQe#^q=3dS*VGMN}qud%cY06XJK_ZX610a=fxCJH4=mt!EcUEiYa5`v5TG|j9NH zU`P;U-)vOs@?I`4-hDM7tZAlLhL@qxc@diS_TbVqcCE4gkPYQ6_QUN{SoSmJtF)y~ zzFTo)I*%iIp$uZu&DPK*_(bqSAX?uzfNZUTBr&azI?r&7Fe_*8d5_|c#GlB;odtms z()Q#9%93EjCB>i6*L*Irrw4$%V^~~0T-68*F6-WmJkGN+^_bI?dd>QQ8Z;FbIY*J| zHDjykXnn34py=P<;cXbbLE#n*Eczw3ABUIGhURpLC=FgL;+T;!>GA^P&%=BKH(5T{z_V(m;5~1zi`#6WotEjgY%d$4 zi7sKvX%0PxHYlj$-^)ECAeyXFIJV2AQ9%Q|J{Hrzyw6lQE!D}=)4crs32D0Fd6#Oh z23VC{P+fPmr$8+>spffNiAX$>@M$!{#&(|#X1+UE)F#JAb^P}qcu`$?x6a4J*_mZ%c@s6s8XE8&xuUbFtU)8m0^ zG4VDa^*Vj&xwl+3*V-MKG<@um8ct|R%Ia4OmaBB|Gz>(fzDbAcivfspk7r7zyBrM`%ev7H-`DUFfahX_E)oq@LzHdM^k$nef__J4-+$EhiAuz zTFFG+Sl!jB>Dk%Y-rinzhhs?!3JQFDd;^1n#>Pge3|59+Ksc|OY8wVS2Fka?ds{Fl z7Z-Rd))^)}6L66u-yMMgrfNN?v^y(ZljyH5C$Gtn-zHPaMfogtbSF|fO=iZ<>2=pt zrR_8uCr53Wh-X~uX}M-*EU%5jdD6HoX)3ARo9YQ8?stL_1H8cw_8Ix%_w_a0k8#-> zX(4czM=NV@wiW@DO)~vQnFFxk>1Aa z!YqtvL}zid92Oq3jm;S2!JuX_z*@z8tDtr)s*okOG(xhC9yE4fTem=)Y>>uo>C<-v z6I=!T${3(#P{e&0_t%u?5|-;nyJb!>|Qq(%P7UH*^b!&xbgK19{ZC zP7G26>02~^)#{{AaZXLJaVyHUBa3~5%Qtg^LmD1Q#x3A8Dt-!se=YL%FoYEDn?$xgtyO#?JCXa) zau|5Zc==xvw*OaX4f1!*ng1V&^?wPc_m}Kp{>sTbSpHKf`WIkmrf2zAE8T=`VY9)0 z*YHW@`peRYr8#r6Bp~ad)=LYdQE1Nbx|%#(pw3i7Lv2yqG1GGQ+nY&HKHpHxd+{qj9oady&7mW7j8I6ZN=f79~X}^o@Tq2fw+FezyGSt_UvQ6#DQp z!PEomd#6v}J~r#)Jo2e@C4-tTJ^5tg#Xh+(WI0b$hX1=S~gHx2^7*#FQJ?2no1)s`ay8W^&dZqMiklg|$FxhqE| zzg%rFsT3YlLNZ0&d50$-!3(DxDU4(Me)PW|HJ-Uv2jxTVMd`T*#uNLd^5~m(z*nFG zP}WNfDRy*e&+ETkglnl*JAdTIHJMqdij_~Omuc5V(8vYkhdCO`W1_1kzK;&-p+v)ej#BzF98fWg* z65DnuCQAO$1|A;Aq=$fY;^t1@3+}AZ!FmVGE+edC2C*(Q0>gbdrccGx6M#+jSD&(WVx+n@2$C}gE@F&n5!w;VmfmS%r9Yi{NP8A^M?An2!qssJ* zldgj$z4T}dIkkK89~_mK@cq<1g)raIY(>kPKW}V<&SyQbkH)Uxg61qfGSD$M#SZh{SUsuIY~;4^=eX zKmYuyKYAP#GmP+*U{1(dmlWTa;{s;>MIQjHAL?|2muds_1TJAbn1tnWOgC_TNUcR;F?z=#8>gtEUt0%(~_Y*@O zqUdvh{6_ml^(<2nUhw`b0*gZ2C(CD}1cx(c8PEO(4Z=iYn!^!gI))m&F99CXy7RdA z!V*Z9rwVR1sZ3?C*SQgGIqz`7>d6R6`*24-Z2tobG`41`v;jnHaDkj!e!G!bBSxbz zgqTzrbo{RT#aSKE+(^kmBY20?arw_RUU=zh5}gc|96)kFD}V#eo*`iNRG-7wo}u2w z=p2$(S%yf5(ZLHx`-5pX1J=uJ^O}%URXSjHL&%oynd$&<&)W&~X<5kcc|EMD{$w7ynvZ+kjVB18dslr9lTtW#4VVOX+{LqKj)SDXl5K}~glcCAqQ!$;pR{GUfF;!|j->L#{d8<7I;L ze$v*8J<1$l-+f+8;b*-ye+7YytT2jfLf^~H@#gxrHs`~eIRe(8rGW4lLYsupq2*@p zj8H_xRU6cd`i?SQrDG*d74VSDK*T81c*Ks?c$WsJm-b0Vc) zF1Il^{fK7vrZY9|rY{~t!1Z#0JY>#Nq0hyxWw)_L!&dHfK_QPXdoYn@o!`K$^&ZV` zC?}DX`o2;>ZAK^5U{GC^r6FA~{DZNq%fwEl$K0e!zuxA2a!&iY++TKw%UTxiMw*sxsxF=N}O%3~9LAhNvcKy#XTzfhaoVp2yT z!`41SbC~AAUrQCiIQ2;NHEqvv*#=KOf@tG`I1)7TdUo%=9te?|>s8JR$>tpKjJ8Xv zZpBS>W7i`q4_1!jL&{|v1zQA{eQtnC>;}_P6YMGrwunM$o zi{uWnEU22a@jLOPA*2Rfe<@|rp6%|eXSnnV0uIDd_@=U>8SZH}ss>w<1IcoK)8QvS z&)=ZbNW^Ys6XRltX*FHc&;Si<{W%0%81B05qV(Kfrb}%ZlnB$ru4HF*Qfi#uspGO| zKIyWd`P9D@FVBo$h^==~vEf`@Nai;|t)IvN9sU_l~=PLc8egtr7WkjB^8;0@}WK2B$?uSKe#fgnW?;JO>tLt5XP+W14Ry$?!l3f z^F{q}Vy{_dL2s13R~#D(aZ>rIGj#*%Pmch-Sc{hNWP_lr)C;r^aQ;?X6%E0H+UK_wHiFtWCBFQ)3#VL7U6%Tl;o!?d5(=}u`Gl=Hymq6VEjD#rFDrQ!nTC~yG~<)kV<$L&WdWVW+C)4Pmv`2Jq3UN`B( z`9Qw08W;5vfkj2D1@n{gMBs>(J~2vP!Jgam4RawcqFFrhKh%Yi^|z*mJh0AZx?08- zIqQgq0zQB0mUhY#XqDaE;BQf2C0b)VryL>kh6MGSJ=c|}&wlhH&8!QUeZ( z7=C1WrCL6R@P&hw|FxbN$(=ANR*A`FM@lL^vSi4oD`pJ}3{$%(7xdkAec8oMJ|4xD zC7C%$=(5vwz24FpE)kDHN-A<_%|%*(=!V^pIrxW#!nkKP5c!2QB4I*E&GL@|0_ z28po_6dNUHX0S7kfSh% z$!mUiJ(2VPf6q_l9vZbbt+;v0a_f5%&|h*zKVH2yxFlEm{?i~el zLf24eP;;E#wKcrJ;#^?9v+?2MEhqb}q>x555WdDGn`Mp&+M}H;A=i>;K)}@^deMF{ zH%A`MWRr%iiQM-@IHb4v@9&Gr`Qa$cN4g^3p^5NgbaD= z7QOQxtvRI9cs6R%T0Z9FMswj&7fsD<*f#ce6T#}lLQ7*gfT}ZqPqj*aZ!`V-mT?-L z8CEpIl5s3F_aj>1<=%giyiZ9|yt2|&A~MdR7M{W^bGsbDg(>KVL)`jBKHS4~7N5-& ztrS;K6iiqxh`ql*Nj$h3Atjj=g2J(;LGhqbg6}NORN#KtjJh~Ka5QoP-;GgvHhRBA zWJ2lbyyDv43CA&t)eFe)=Q%iV!96^G?!dDUkl3qTVDtr|H30B;-sJXB<^mGaI0O-q&>@>WQ1-FWW7Qwb>~SIQOuygEQTxm+9P7FDp4u>wF(x4P zCphVirv9mc+J2>`=^Ti=h*w#*?VNrep1uRJ>~lqGovM}6%|sI!kTq> z+SpmhoUPx;kluEYKe%(^tCy6z;F?N>&K=1f@=;4k;}cD5Ii!TilcBPEhobFDoWhFE zg{(s2V*={}byM6c!xEHaS{a}0O6d98JvF=`FIL10_wiN!_F~KiV~$Rtmav-$z!tE7 zQ0h|!TeIaDH|_QnMi6kPW^>1yCMJ60EiF=qkYlcsOd)(4g0y$`!m}f)Q=iu)fjA^r zjh_*v2cDwDOX+lnw=yLM7_C-lh2_7zwnOTcDJohSqta=4R?V6m+U}lG|F*``P66+; zg5C0*mdQnPRj*yNXwvLHAiP!7cN4ei&Iu6?xU2?Ie6n7sbMsCw`nleP_5Rpzseg-3 zp_Hlr^W=QsMPF3iUvIr9roIiFURs8rZ-YCEO0u$X3xwG<5c7pQyG`zFWS`=QG=Nfw zgdwetjTA4BoJg6Z)DBxt-B3+WmLjCkzo5jeDbRE)e#e`*k-Dy-$vxIDN-_7R|AXp0 z{GXEWq($iAKSnS{!pw?!+{c_0gFq|i`6T^d`~>3c%_<@!vbZ+%y>NFp?Y;T~f*}jB z+}JTnx$~9z=fV38+m#9ru47)JSNgjiMb-$gHcI&q?r;Og#WMt9E4wofBFc4Y!h1ik zm;JT3_TNV9#Z5OPVG%F}$mZAkqzCObkh5EPK#^BKG*d@ZTvZUHf_Xk5fy{bAsOfg< zeBc>y*N+dDc`DuMo#F_wd^UXOk@7bWSUr#)s=2f~y+vv)2&trp!ZxaVqr{|Zc%@d) zQRujZ5Ef~9V+ci?wGdmG%$2cCOFnWDmA{yPKGFbRH;}%LWWF}zu0k$DJ}NIKy)bqi z13KHi1Q&TRGPmK$=qmvbhoH!5t_zMJ$Qh1fn`Uz!tBd_XpPG$@BI=xWBh#-Qr}yE1 zM0HM!DmYY6jeQes>L=BB8uZt@=0pi3IH(1GIEUJc0O*52MUsXfDw_1;249sTy^`Z3 zio0u=!gu=lfI;mOseTFCw*`UUr5Cw^5&VhQW^n(+>k;l`4+t1X*Zp;By~4&1VntCL zi6$eB>q69QM?`$L2xL}L?iZN<0p5(t?rdc5jtDNJP=wPH79Tl$M8TZAS~$={JCY}} zvAa7-+ql!~XUZO}4e);Gr!Fz_q`@Vyyoc(uWa}Y>93P_gd;=!`(*v%27av~MiBfpQ zCT^kK8SeHmaE2XdZ!BTkBxa-JjKtFwFE<;Hk9%SPZ=0mBc|cgRkaI(X)D18t|shHM9fwESz*MeUy@+^px)4+1V$2P|{*^vqACc z1Tu`4tPDU*c|{z;8Nlz5tIP`o+wu0ogGsW=)oo7|+VOzT&~RU}N~yA`BTge>{oi(^L-pHJjZ%0rIcH+8(FQZxEUFuW&DuHad6 z#q+vOxR?%58OU;+)vrp5_vo9Y-Wx^F}@yD?yV&4KM zc#l`9%`@3^GHZt9_5TIR)SY(H?(TEz?JZ+Pr}iT-#OyPr{y0=nlkyE5>u8>%+5Epm=}QLyuRIk zhBz4H8|EXSHVC+R%D(T5oohpo0B`XH8j9I~|6O%xLxNz9)V5fJmmfNGSF zEt>}qyzbst(gU;1@y}cWZ9_c|JDy!{n+1tx=uisENqF^pMG2Jpn zf3!_JE;rT@!EdrBW8EdY+r{BM2P?xWNeu}%IH}W+s|U$wuW*0$$-dinw`QzN*{Ml9 zgaEGd8?K@M=Rku!Oh=Mk=Gkdo2b1r1h-#cgDa7K*=hn93a$|blkLgnI@Ipa{SIsjM zY7cl6RP)O0rHK5N9bE&43})dTfU_K=1(tFF()dFJhfJk%!9Kv^%a@>9Uu1rPCj5!A zKZw1mDWv?~tb8^8u&tYpw6o(>m*E)?3`c@_kwYl1yH|hT_4}~dDxa^u)xq>l*BUD( zQG2~q*u+a^Z%H|G$*@3DWmpD|Xc0x!`7$rwXg6ndlANi&Q~nLyQ-Ut_F(}Eq@YIXv zeIDGUYV+7_3+8qag_7bF$4&j$oegKo9-SA93tm>#*ynXba+&K=etX{oIFGe1pZZgw z>^lY_9U25WL;0UYb?Z2v@{fz1Cmn7S|Nxc^~`qX@$Ayfl?nf5@QqJOrIYq6|@D4Fbe}f(a+cvhxRvn z-$)3xtbghXOL|;i2Elso)eAHQzk?6yh@cBmDZm5lzGg~o4&`yFKC64ZH_bDLHf4=` zDibD0trn}&SS7q#T)6rrS?Px@4ubpM&C8UkudkiWAvE&Jn(130XIk_4b>p72*T0`( zPL$QQuwC-&fWy$@b{$W?BvxqLeS4siUa!SuB?OB;%mRefT#v{YL&p~2IZ3kp zZP6}RalH{&SBbP2iVd*(w9ad?KOuSLEaLjmLUxZOyazXZV!}wCr|IkoP&HsG#ZqAJ~jb~J*a2ox9p8C&{Pd4p^6kq z3GQ!&uP^yJH3m%a{@nuz9qxt$Y93`Vc@OSQSHs>sdnKHOFd7Lu6AC~g*)rB~AKt9O zSF|M4+X|vOeCF&?!=@7MxYqBmwH}2o!kv#B0*Zv}cG8Bh#TGpj}2Ax7ys zkCNxI7$VfoTYqAiH(@3st8(EI%7B+J2VQ|1L~a;Z6|b&x49#Qm&`O_py(0|G1VlTr zZDLm+f^)xnaxR#U%_@0`B4={^IJdN;)ju?B`c(tx%)I`iYb1Hk>zS7@(NG9=W3W6)MRn-pSMi{wlLCq8t0*y z0mq(DUM+t?Gx>_5RZSAhzA=@xAfSc@pD**=QauPCWY4S-qd3of<x`vVp{=rBRxs z=ZrWnEV-X+dh_@hO9+l`Rpqa0NU2Dnm0O=g9@g4fnz4vKl<#FcXJTY-GriGWx^tL- zi8-1rNpc0i)5zKaIr0(|MO{GM5~n*cm#XxKr8pF$^9wL?+)>4G+0*m~)Xp5*qa8%5 z?BnaGk3Bk6BFvW><~!#Zt(Rp4GfpPHIPa>kNYH2OXR3M4V-l(a&&#fuYq@Om83^qU zlSJ{`TA3H6DvXIO5hvyWxTG=1-JFX>YO)hLz2X?QJzu9zBIIWk-X*>l$FH4O#@g@z zk>%OI<0nRIOX&fC@wK#-Tbt{%Fr1kZ^x)S)S;9cDfC%>Pp(?w=V+yZ;fhM_cI0ujA zyvh1Iv`~|=>V;kNp$Na`Cdl#_PYtw_b$Os;#kbAn@hu-|d_>--8Pkt}uhLvDn7?$F zRbGujOgeLjUo6YpAsYyB3gsmp~SmO#`5tu+%=b^Tq8qKJ!Fo7yVS zlx1(0^+L!yh$E2kcCD82I@8cp=J~c4w$z$sT$DPyun@vYmZ zgM^iv&C|kLHBvn;grx|{80uSF+q(`3@H>BKh0`o#15Fo}GRc4A68TB-&rlW&#UpTR z)l&Ndt?N89A~_gTqnMuC+Su;Tf=RS&f5Zc8z#5U z1r8$V%tp8_e96;!@ou!WV`dlFl)vW714x&ROG7Q(fdzh)!}CR>&7`HO(~%>AvR%+X z^%;_}VgD_*qgmtJW&uXKa*7OWKWrXJXU}QJjTopkHt`Wr*#VD?hob@%pN!4S*et;@j4|!q3 zZe(%22FXi0x$O#02r%t#n%_bwhCKR`oiu8Uu!*ut=TwvnPrBTR^r${D9dI`_sLL&v zz2Dso({3G!k%xF(kWyt1kQ=u<`RqdgbVI~>*np2+#XYYm0H*%W$7(lARHZ)rh5STQ z(fT-s=Vg>YyAyI?xE{n`PrMQt!n^WBe{woF>TQ|H5>7>g-YQxr>X5zT9le1lMUob~ zCN!ypWsoiV*<}OabmYUCmg&PG^8^tV`5a&1n7khoSY)>>Rt5Q z4F6sFMc&^($|jid_LBnazhjinW4mmEg~=axupdgWZSv1jux%3UZ%9M_;;Q;zasL`X z61nN@1n@(S^=kmMdMs)HjWp!{9RTHc+b)}6C31&Kv4;E{GDU|*>wnrN(Ec|65?eMX zD)(p25tS<>S4^pCOL|1h(VB9oTsqk+Md5b5IaKt|S{o`VvwI8OmfTRutzc>ODO8e~ z?3ANaN|mY5vb4E4RCZZ(i~Tt>hf4oGcvG?}w#z0MCjM`Z#jg#)nI_9(8$kPqZ2|x0 zTu>`wq5IR7Rw`E^|NC`UD*bzylsU$B*#y&T?94c*f&OXEv5lbp1-Fr%83?tyt - - - - - - - - \ No newline at end of file diff --git a/src/test/test.js b/src/test/test.js deleted file mode 100644 index b6284bb..0000000 --- a/src/test/test.js +++ /dev/null @@ -1,21 +0,0 @@ -var url = 'https://www.matmoul.ch'; -var xmlHttp = new XMLHttpRequest(); -xmlHttp.timeout = 10000 -xmlHttp.open('GET', url, true); -//xmlHttp.setRequestHeader('X-PINGOTHER', 'pingpong'); -//xmlHttp.setRequestHeader('Content-Type', 'text/plain'); -//xmlHttp.setRequestHeader('Access-Control-Request-Method', '*'); -//xmlHttp.setRequestHeader('Origin', url); -//xmlHttp.setRequestHeader('Access-Control-Allow-Origin', '*'); -xmlHttp.onload = function(){ - iframe = document.getElementById('iframe'); - iframe.width = 800 - iframe.height = 600 - iframe.style.position = 'absolute'; - //iframe.style.visibility = 'hidden'; - var content = xmlHttp.responseText.replace('', ''); - //iframe.onload = function(){ pageLoaded(); } - //document.body.appendChild(iframe); - iframe.srcdoc = content; -} -xmlHttp.send();