diff --git a/package-lock.json b/package-lock.json index 256e5b7..649e4b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "create-permawidget-vue", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "create-permawidget-vue", - "version": "1.0.0", + "version": "1.1.0", "license": "MIT", "dependencies": { "rimraf": "^3.0.2" diff --git a/package.json b/package.json index 9710fe4..1bbfc9e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "create-permawidget-vue", - "version": "1.0.2", + "version": "1.1.0", "description": "🛠️ The Create Permapages widget boilerplate", "bin": { "create-permawidget-vue": "./tasks/cpa.js" diff --git a/template/arweave-storage.json b/template/arweave-storage.json new file mode 100644 index 0000000..ebef471 --- /dev/null +++ b/template/arweave-storage.json @@ -0,0 +1 @@ +{"public/img/metaweave.png":{"name":"metaweave","find":"/img/metaweave.png","ext":".png","mime":"image/png","path":"/Users/anuness/Developments/metaweave/create-permawidget-vue/template/public/img/metaweave.png","stat":{"dev":16777231,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4096,"ino":4425029,"size":36783,"blocks":72,"atimeMs":1668539222218.4456,"mtimeMs":1668532439610.41,"ctimeMs":1668532450134.7437,"birthtimeMs":1668532439609.5896,"atime":"2022-11-15T19:07:02.218Z","mtime":"2022-11-15T17:13:59.610Z","ctime":"2022-11-15T17:14:10.135Z","birthtime":"2022-11-15T17:13:59.610Z"},"url":"https://arweave.net/FXFAoLHTlhTgkyc84cuuBs6q59CGs_KxMxRvD8C86vI","arweave":{"format":2,"id":"FXFAoLHTlhTgkyc84cuuBs6q59CGs_KxMxRvD8C86vI","last_tx":"v9DnjFzmF18YxkRplaZjypbwtB_wQBbEDP_m8iE0su01CkQC74-mj2p7O-xOLZXC","owner":"kAa_Gi-fzGMC5uwBFS5JyVRxXdrwtMByitghWqQW6avrD8EWh1nVytXGr8Ta3z1TBPPRON5Z2LvwiOQNVmdw_y90q0zm0fSDBkkRkHetREBBsp1m6cYjMLMFBd06wBVBlZjARNJAwSd5yZmGeLcXdcoKIKqe2pDGBbfQ_RoQuFtanp1YsGP2M-kJ1otxkbjLbkNuO4gM2AEwdKmKzLi0yOkuk_8NKm6WJLXwPf6wfz54lxrUlFovfr-xYOXa7DNQ0rwIS5myJyE7a2jENvSigT5yVFmUgPOu1s-xWFkkEQwvwaaDRsIv5LiGVdOAGrpg0uKr_8ijg5IRP1uuKkxJdf38hGwCB2qi18Mgj9Ioca0hBPKF-DBqt0dnBvwNeSZ3of8MOecre_1SOVmZkK4WJT0_kLpMZnIO2krVTnFYXXsiBVmVjBVr_eMRUxOpjPHMp6q-hp5RJ3KgN1J1v02l-UwrgLKcxPLRUJ18uuNq5K0NgNcy33BYQlbbeicDIV3rRtLSZiEch4aKDoY0s-PNEC-2v2EWSWdKhlI6cKmGanp9bFpXrISEcROKrKOCe-0FjfLkt1itZGbL_I6FQlyVQQHh12eTo4GPhM_tHhOaHGXdqEDIhOSUQshZ7XapS-jCTNBTjaGjDQ5ZSnbspYX55LEOOnKMmV4edOhVcb9J9_0","tags":[],"target":"","quantity":"0","data":"iVBORw0KGgoAAAANSUhEUgAABHUAAADVCAYAAADZwczQAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw1AUhU9bRZGKgxFEFDJUQbAgKuKoVShChVArtOpg8tI_aNKQpLg4Cq4FB38Wqw4uzro6uAqC4A-Io5OToouUeF9SaBHjhcf7OO-ew3v3AcFaiWlW2zig6baZjMfEdGZV7HhFAEMQMIo-mVnGnCQl4Ftf99RNdRflWf59f1a3mrUYEBCJZ5lh2sQbxNObtsF5n1hgBVklPiceM-mCxI9cVzx-45x3OcgzBTOVnCcWiMV8CystzAqmRjxFHFE1nfKDaY9VzluctVKFNe7JXxjO6ivLXKc1iDgWsQQJIhRUUEQJNqK066RYSNJ5zMc_4PolcinkKoKRYwFlaJBdP_gf_J6tlZuc8JLCMaD9xXE-hoGOXaBedZzvY8epnwChZ-BKb_rLNWDmk_RqU4scAT3bwMV1U1P2gMsdoP_JkE3ZlUK0grkc8H5G35QBem-BrjVvbo1znD4AKZpV4gY4OARG8pS97vPuzta5_dvTmN8PhzVyr47VMH0AAAAGYktHRAD_AP8A_6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfmAR0ULSMKuNT8AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAIABJREFUeNrs3XdcU9f_P_CEJYKCgltbZ91aW6zW1fbT-Wk9gSjDiIotWCeuD9a9Wle1FK2zSnHVDypFUYml1iqugCAKsjeIENkre97fH1_9PfqxCeSGJCT4ej4e_iNJ7rnvc-7NPe-cwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQSJkIAYN4IIfZMJtOOoigBl8ulEBEAAAAAAABgMBgMG4QAwDwRQhzefvtttpub21c2NjZ24eHh_gwGowCRAQAAAAAAAAYDSR0As-Pu7t7pgw8-mP_FF1-s69Onj7O9vT1TpVIx7t27N5qBpA4AAAAAAAA8h6QOQCsjhNjY2dm59ujRY8DEiRMXffzxx5zu3bvbvvg7RVGM27dvP8rKyrqDaAEAAAAAAMALeiV1CCEd27dv7ySRSPhY4wNAP4QQxwEDBowdMmTIZ6NGjfJ4--23hzk6Ov5jnavy8nL5rVu3flAqlbWIGgAAAAAAALygV1LH29t736BBg6bcv38_lMFg_MTlcuUIJYBuPDw8XCZMmODr5ubm179__6F9-vTp2K5dO42vValUjAcPHtxKTk6-igQqAAAAAAAAtFhFRYVcrVZTEolEXVhYKNy-ffs8QgimcgE0wcfHp88vv_xyoLi4WCSRSNRqtZpqTl1dnSogIGA0ogcAAAAAAAAtRgixUSqV_9PxlMlk1N27dzNXr149lc1md0WUABgMQoidt7d37zVr1rhfvXr1VmNjo4qiQalUUkePHg1GJAEAAAAAAEAT2qNrOnTo0Mfa2vp__s_Ozo4xefLkYW---eaVhISEh2PGjDmYkpJy9dKlSzUIMbxqCCEdBw8e_O6IESM8Ro4cOXX06NF97e3tmXQ_Jzk5uSQ6OnoLIgoAAAAAAAAGsXz58n81N8KgsrJSERsbm7Jly5ZZhBAmogavAh8fnz4hISFrb926lVpUVCSSy-WUvurq6lRr1671QFQBAAAAAADAYLZv3z5Pl06pWq2mpFIpFRcXlxcYGDgJkYO2atasWQMjIiIuVlZWKuRyOaXLWjnNiYqK-p0Q0hHRBQAAAAAAAG1oT79ycXEZqMvrmEwmo127dowJEyYMGjly5J2PPvrozxs3bmwvLi5O4XK5IoQeLBUhxN7JyanX4MGDJ02ZMmXFpEmT3ta2e5U-ioqKhHfu3AnhcrkCRBsAAAAAAAC0oZ3UcXV1HUT3PR07drRis9n_Hjdu3L94PN7vI0aMOJmRkXEDyR2wJJ6enj2GDh06ediwYe4jR478ZOjQoT0MmcxhMBgMpVLJiIuLi8rLy7uHiAMAAAAAAIBBXb9-PbEl00rUajVVUlIiuXz58rWvv_76LUQUzN2sWbMGhoaG_pSQkFDE5_NlKpWKdruXSCTqxMTEYqFQ2OTcrMLCQuGMGTNeQ9QBAAAAAADA4B4-fFhKGYBaraYkEok6MjLy8vTp07sjsmBOCCFWgYGBk65du3ZfIpGo9UnkvNiWnMvlxi5cuHAcIcRuy5Yts5p6_aZNmziIPgAAAAAAABhFSUmJRFOCJisrq3bVqlWf79-_f0taWlqlQCDQebXYsrIy6bFjx_b6-_uPIoTYIspgaoQQJovFcvL39x8VHBy86sGDB09kMpleycry8nJ5UlJSydGjR4M9PT17_O0Y7W_cuPFQ2_uuX7_-ADUBAAAAAAAAxur42opEon8ka-RyOfXLL78cIIRYMxgMBofD6Xfo0KEdCQkJRUqlUqfOsEqlojIyMqqPHz9-eNGiReMJITaIOJiCt7d37-3bt8-Lior6PT8_v1GfETlisVidmppacf78-d82bdrEYbPZXV8-zo4dOxZoG_FTUlIiDgwMnIzaAAAAAAAAAF3RSpy0a9fO1dbWlvny_8vlckooFFZwuVwVg8FgnDt3rlgoFG7h8Xhho0eP_uLzzz_fNGrUqG5MJlPrZ1tZWTGGDx_u-sYbbyyaPHmyb2JiYrS9vf2ayMhIPqoJDI0QYtW9e_eR77333vIxY8aQ3r17u3Tu3NnGysqK1ufI5XJGfHx8Wnx8_M85OTm3qqur87lcrvzl182ePXvQF198sVnT5ysUCsbt27cjiouLH6FmAAAAAAAAwCjmzZs3RqFQ_GOUQV1dnWr37t1Lm-hAdwgJCVlbVVWloDONpa6uTnXkyJE9hBAHRB8MJTAwcPKNGzceSSQStVqt1mutnMrKSsW5c-fOe3p69iSEMJs6HiHE-tixY3slEonGg2VmZtYEBASMRs0AAAAAAACA0axatepzTUmdyspKxdatW_2ae7-Pj0-fX3_99WRubm69WCxW6zotKzMzsyY4OHjVnDlzBhNCrFATQIe7u3unRYsWjT9y5Mj3GRkZ1fokceRyOVVaWiqNi4vLCwkJWTtt2rRuuh5_4cKF47Kysmo1fa5CoaCOHDmyB7UEAAAAAAAAdNGafuXs7NxL0xQqhUKhkslkjc29PyIiolQsFn9169atvZMnT140YcKEGUOGDOnU1HusrKwYw4YNcxkwYMAP6enpy-_fv3_C2dn5VENDQyGXy6VQhaAJIcS6U6dO_ceMGeMxdOhQMnLkyHGvvfaaA93pVSKRiEpLSyvMzs6-kZ2dfTUjI-M6l8uV0PmMjz76aN3gwYM7a_rb48ePS69du7YbNQYAAAAAAAB00U3q9NaU1FEqlWqpVCrU5TOeJ2IeV1RUrLx79-6hcePG-U2dOjWwT58-9k29r127dgw3N7c-Q4cO3Th58uSveTzecQaDsZPL5YpQjfACIYTZt2_fCVOmTFkxatSoD_v06dPZycmJ9uiu6upqJY_HuxEXF3egpKQkQygUlnG5XAXdz1mxYsWHn332mbumZJJYLKaOHz_uc-nSpRrUHAAAAAAAABjViRMnfta0e09-fn7jwoULx-n7uZ6enj0iIyMva9pZqymFhYXC77777qsXu27Bq4kQwiSEOG7dutUvNTW1gtKTSqWi-Hy-7NixY3vZbLarAcplV1hYKNB2vPDw8P-i9gAAAAAAAMAkIiMjL2taWDYrK6t27ty5w1r6-YGBgZNjYmLulZSUiDWt3aOJTCaj7ty5k7F582ZfT0_PnqilVwMhxGr69Ondly9f_q9Tp06F5efnN-qz6LFYLFbn5eU1xsTE3Nu8efNMQoidgcpnc-zYsb3ajpudnV335ZdfDkdNAgAAAAAAgL5oTb9ycnLqoen_lUqlUiwWN7a0MAcPHrxXXFz8r2HDhn0yfvz4BRMnTvx3z549m-xk29nZMaZMmTJ85MiRpx8_fpwxduzYYwkJCRGXLl2qQvW2PYQQq969e789atQo96FDh34xcuTI0d27d7el-zm1tbWq9PT0rLS0tEtZWVkxT548SdK0Fbm-Xn_99Xc--OCDrzT9TSgUUrGxsaHV1dX5qFEAAAAAAAAwRWfamsfj5WoadZCcnMxnsVjOhjwei8VyWrRo0fgLFy5wBQKBzkMwamtrlTweL3fjxo0-2CmrTbW_9uvWrZt27dq1-4WFhUKhUKjXXuRPnjwRnzp1KnTZsmXve3l59TJGGyGEdIyIiLggl8s1luHRo0dlHA6nL2oVAAAAAAAATMLd3b1TUlJSiaZO6oMHD54QQmyMcVxCCHPRokXj4-Pj86VSqc6dd7VaTfF4vJx58-aNMVbZwPgIIR327du3Pjc3t0GfJI5araakUimVnJzMf77-kp2xy7x8-fIPqqurFdq2MN--ffs81CwAAAAAAACYDIfD6fv48WONi9Devn073QSde9vNmzfPvHv3bmZ5eblc1_VThEKhmsvlxq5evXoqIaQjatJyzJw5s__NmzeT9Unk1NfXq9LT06suX758bc2aNe6EEFtTlJkQYhcbG5uirWyxsbGPkWQEAAAAAAAAkwoICHgzKyurVlNH9ffff79rqnKwWCynb7_9du61a9fu05mCw-fzZVeuXPlrw4YN3oQQR9SoefP29u7N5XJjJRKJmk4yp7S0VHr16tVbu3fvXu7n5zfE1Duj7dmzZ4VMJtNYvrKyMumcOXMGo3YBAAAAAADApJYtW_a-tu2ZIyMjL5myLIQQKzab3XXNmjXuPB4vV6lU6tzpf_bsmSwmJube_Pnz3VCr5okQYhUdHX1TLBardd2KPC0trXL__v1bvv7667fc3d07E0KYpi73rFmzBlZUVMi1lfHQoUM7ULsAAAAAAABgcmvXrvUoLS3VuKjNqVOnQlsxAWC7efNm36ysrFptIyQ0kUql1KVLl_7gcDh9MR3GfBBC7K5cufJXc_WnUCioxsZG1a1bt1KDgoI-bY0kzkvlto6Kivpd27TAxMTEopkzZ_ZHDQMAAAAAAICh6JzMcHBwcGnXrp3GqSxCobDVtg_ncrkKLpcbnpKS8vsHH3yw8P333w8cNGhQTycnpyZ3NWrXrh3Dw8Pjs_Hjx-dev379v_369TteXFx8n8vlKtEsWgebze46Y8aMA4SQjzT9naIoRm1trbKkpKQyLS3tDx6Pd5jP56dwuVxVa5abEMIcNWqU-9ixY__FZP4zt1RfX6--c-fOIYFA8AS1DAAAAAAAACb3ww8_rGxoaFBpGoXwww8_rDSXcnI4nL779u3bmJiYWKxSqXQataNUKqn8_PzG8PDwswsXLhyHrdBNz93dvdPp06ePa2tjIpFIHRMTw9u2bZs_h8PpZ05lZ7PZXWNiYnjapgHGxsY-njZtWjfUMgAAAAAAALSKgwcPfqdtetOWLVtmmVNZCSE2Pj4-fXbt2rUkJyenXtcpWQqFgiouLhZFRERc5HA4fVHrprN79-6l2hI6FEVRCQkJRTNmzHjNHMu-ZcuWWdoW7VapVNSKFSs-RA0DAAAAAABAqyCEMMPCwg5qWy8kKCjoM3MtO4vFcjp27Nje0tJSqUKh0HnNnaqqKsWBAwe-fb7oLtbcMSJfX98BNTU1yqa2pV-8ePEEM7027LUlDtVqNRUREXEBNQwAAAAAAACt2nENDw8_q63T_fXXX79l7ucwa9asgWfOnPk1IyOjWtdtstVqNZWTk1N_8ODBbf7-_qNaezHetmjGjBmvJScn85tK6AQHBweZ6XVhffr06ePayp6dnV3HYrGcUcsAAAAAAADQalgsltOlS5f-0NZ5NddpMZp8_fXXb4WGhv6Um5ur87QssVisTk5O5v_yyy8H_Pz8hqBFGKxdOV-4cCFa29pHSqWS-u2336IIIdbmWP7__Oc_n9TW1mocYSQQCNS7d-9ejloGAAAAAACAVsVms7v--eefCdqSHoQQR0s6H0KI_axZswaGhobuq6qq0nlOlkQiUWdnZ9cdOnRoJyGkI1pGi-rAavfu3cubmnYVHx9fMGfOnMHmWH4Wi-V848aNh9qmJN68eTPZ09OzJ2oaAAAAAAAAWpW3t3dvHo-Xoy3RYcnn5uPj0ycqKur3qqoqha67ZVEUReXm5tZv2bJlFovFcsJuWfTNmzdvTHZ2dp22-PL5fNnmzZt9zbHshBDmrl27FldXV2tMSJWXl8vNbfFwAAAAAAAAeEX5-voOSE5OLtPUgX369KnE0s-PEGK1ZMmSidHR0TeKi4tF2ram1jQ9iMfj5ezYsWOBl5dXL7QU3bBYLKe__vorSVtcVSoVdeLEiZ8JIbbmWH4Oh9M3Pj4-X1v5r169esvSRq8BAAAAAABAGzV37txhubm5DZo6sKmpqRVt5TwJIbarVq36_Ny5c-fLy8vluo7aqa2tVd69ezdz796969hstitaTJMxtj5z5szppnYiu3HjxiN3d_fO5noOhw4d2imVSjWWvbq6WhEQEDAaNQ0AAAAAAABm4euvv36Lz-fLNHVi79y5k9HWzpcQ4jhv3rwxV65c-Usmk-k8JUsgEKiTk5PLtmzZMstcR5m0tp07dy4UCARadx_Lz89vnD59endzLb-np2fPptZhCgkJWY1d0gAAAAAAAMBsLF68eIJQKNTYEY-Ojr7Rls994cKF42JjYx83NDTovODO82lZuUuXLp1CCOmATv7_rUMzb968MRkZGdXa4lZTU6PcsGGDtxmfg-2NGzceaSv_gwcPnhBCbHDHAAAAAAAAAFPQqQOqUqmUMplM7ejoaK3hb4q2HKCff_45sbS0dNL48eN9Jk-evHzEiBHDu3bt2mTcrK2tGRMnTnzjzTffvB0bG3vr_v37h5lM5p_R0dGNr2xDs7Fx8fDwCBk8eLDG6WlisZiKiYkJf_z48R_mWH5CCHP8-PF-EydOHKPp79XV1crLly9_w-VylbitAAAAAAAAgNnw8fHpExcXl6dpdEJhYaGQEGL_KsTB3d2989atW_2uXbt2X9vIpZep1WqqrKxMeu3atfhNmzZxCCF2r2IbOnTo0I6mpl0lJCQUzZw5s7-5ln_WrFkD4-PjCzRtYa5UKqno6OgbHh4eLrhbAAAAAAAAgFkhhNicOHHiZ027QqnVauqbb7754hWKhRWLxXIOCgr6VFuiS1typ7a2Vnn79u30wMDASa_SlKwlS5ZMbGr6mlgsVi9YsOAdc40JIcTm4MGD34lEIrW2HeBWrFjxIe4UAAAAAAAAYJY2bNjgrW2x5AsXLkQTQqxetZgQQqy3b98-7_HjxxW6jtyhKIoSCoXqCxcucP38_Ia09a2vfXx8-hQUFAi0xUIikah37ty50JzPYe7cucOysrJqtZ3DuXPnInCHAAAAAAAAALPl6enZMykpqURTpzY9Pb3anKfOGNv06dO7__TTT5vi4-MLmppi9LLKykrFuXPnIlasWPFhW9wti81md718-fJ1TSO8KIqi5HI5deHCBS4hxNpcz4EQwjx79uy5pnbr8vb27o07BAAAAAAAAJgtQgjzzJkzv6pU_5xFU11drdi2bVvAqx4jDofTNzg4OCgxMbFILpfrlNhRKBRUQUGBICoq6vdly5a931amZRFCbPfu3buutrZWqW06WmJiYtHcuXOHmfN5rFq16vP6-nqVtlFGGzdu9MHdAQAAAAAAAMzesmXL3lcoFBo76BERERcIIQ6veowIIdYeHh4uu3btWvL06VMJnW3QKysrFRcuXIjmcDj9LD0OAQEBb5aUlIi1nW95ebn8-cLRVmZclx3S09O1bsF-9erV26_KIuEAAAAAAABg4QghzJycnHpNHdyUlJRnc-bMGYwo_U-8HI4cOfJ9Xl5eo1Qq1TW_Q5WXl8tDQ0P3cTicvpaYNGCxWE4JCQlFTSWwfv3115PmPCqJEGJ95MiR77XVW2lpqRSLIwMAAAAAAEBrorWWSW5uLmPw4MF248eP_9fLf3N2dnZMS0u7d-fOnQyE9f_HS8FkMm88fPjwskgkasdgMHq5uLh0sLZuOuwdOnSwfvvtt98dOXLkXAcHh67du3cv79WrV0Vubq7ZnzMhxNHPz-_Up59-OkHba-7cuZMaGhrqzeVyZeZ6Hu-___4YHx-fvT179vzH6DOZTMb4448_Im_fvv1zbm6uHC0dAAAAAAAALAKbzXbVtk5KVFTU74iQZoQQq4CAgNE___zzD_n5-Y1qtW7rKYvFYnV6enrVyZMnj3E4nL7mfo4hISGrGxsbtW5fnpaWVjl79uxBZn4ejmfOnDmtbZROfn5-Y0BAwJto1QAAAAAAAGBx_vzzzwRNnd3q6mpFW9zFycAJAxsvL69eoaGh--hsgy6Xy6nS0lLpkSNH9rBYLCdzPLelS5dO0TY9j6Ioqra2Vrlly5ZZ5r4Y9Ndff_1WVVWVQtt57N-_f0tbWdAaAAAAAAAAXjHbtm0L0LRgMkVR1K5duxYjQrqZOXNm_6ioqBg-ny_Ttu23JtnZ2XXbt2-f5-np2dNctgNns9ldY2JieNrKLJVKqfDw8P8SQhzNuU4IIXaxsbEp2s4jJSXlGRKXAAAAAAAAYLH8_f1H5ebmNmjq9D569KiMEGKDKOmeRAgKCvr04sWLV4uLi0W6TstSqVQUj8fLDQ4OXuXj49Onlc-BGRoa-pNMJtNa3vj4-AJfX98B5l4fu3fvXq5SaZ49VlVVpVi6dOkUtFoAAAAAAACwWCwWyzk6OvqGthEZCxcuHIco0UMIcVixYsWH4eHhZysqKuS6jtqpr69XJSYmFu_fv39za03L2rp165y6ujpVU9OuAgMDJ5t7Hfj5-Q3Nz89v1JZECw8PP4tROgAAAAAAAGDxQkJC1goEgn8MK1Gr1dSpU6fCECH9EEJs_f39R_35558Juo7aoSiKkslkVFZWVu3WrVvnmDLxMHfu3GFPnz6VNLV9-bfffjvX3NegIYRYnz9__jdt0wozMzNrFixY8A5aKAAAAAAAAFi8BQsWjNU2BSspKekpm83uiii1zH_-859Pbt--nVZdXa3QNcEjl8upW7dupa5YseLDadOmdTNmMoXNZne9du3afW3TleRyORUZGXmJEGJvznEmhDCDgoI-KywsFGrbgSw0NPQnc1m_CAAAAAAAAIDBYDD07qT27NmzetiwYdMGDBjQ6-W_MZlM-6KioqS7d-9mIcT6i4-PL6ypqQkvKyvLlclk3Tt16tTTwcHBqskKtbZm9OvXr_sHH3zg1717939RFKXo2LFjcU5OjtSQZSOE2P373_9e__nnn_u0b9_-H4kjiqIYKSkpT8PDw-edP3-eb85xHjJkiNP06dP3v_POO0OYzH_mwDIyMsp__fXXry9evFiHVgkAAAAAAABtwp49e1ZoGtmgUCiokydPHiOE2CFKhuHh4eGyfv16zz___DNBJBKpdV1MuaKiQn779u2051OgDLaA9dKlS6eUlpZKtR27qqpKsXnzZl9LGN2yYcMG78bGRo3DjdRqNbV169Y5aIEAAAAAAADQpri7u3fStuNRfHx8_owZM15DlAyHEMIkhNitWbPGPTs7u07X9XbUajUllUopLpcba4hEGyHEUduCwi-cOHHiZ0KIlQXE1LagoECg7TxiYmJ4lnAeAAAAAAAAALRdvXr1lqbOcENDg2rlypUfI0LGQQix2rVr15KkpKSnDQ0NKl2SO8nJyWWenp49W3jcDlevXr3d1Oige_fuZVvCKC1CiPXJkyePaTuX0tJSqSVsww4AAAAAAACgl8DAwEnadgw6ffr0CUTIuDw9PXuEhISs5fF4Oc1Ny8rIyKieO3fuMH2PRQix279__2ahUKj1OGlpaZV-fn5DLCF2y5cv_4DP52scaiaRSNRHjx4NwRbmAAAAAAAA0GYRQqzT09OrNHWMCwsLhdgxyCR1wORwOH337du3sby8XK4t4ZKfn98YGBg4Sd9jBAUFfdrUVKXy8nL5tm3bAixhupK7u3vnq1ev3lYqlZSWHdxKLCU5BQAAAAAAAKC348ePH9bW0V-7dq0HImQaLBbL6fLly9e01cXTp08la9ascdfns93d3TvdvXs3q6mt1M-fP_-buW9f_sLSpUun5OXlaVwXSCAQqENCQtaiRQEAAAAAAECbt3Llyo9ra2s1DnmIjY19jIVmTWfdunXTysrKpNp2pPruu---ovuZhBDbU6dOhTY1tevhw4elPj4-fVr7_Akh7T09PXvoklxasGDB2Js3byb_ve2KRCL1nTt3MlgslhNaEwAAAAAAAJgzg2xx_ezZs7zs7OyiCRMmDHr5b25ubiNdXFzeYDAYOQi38aWlpV1PTU1N6tWr1z-mWdnb21s7ODi40vk8QghzypQpC729vQOaqH_5yZMnZ0ZERJSa-nwJIbYuLi4DevfuPbxnz56junfvPqpr166DSkpKHvTt2_fkkydPErlcrlLTe48ePZpUVlY2-f3335_v5ubmJ5FIGouLi-8lJSWFR0dHN6I1AQAAAAAAgDkzSFJHKBTy8_Pz777zzjuDbGz-9yPbt29vNX78-LmnT59ej3AbH5fLFfbr12_tv__977sv_83e3p5JN6kzcODA9729vXe2b9-eqenvEomEOnHixLIDBw7cNdU5zpw5s__w4cP_NXDgwI_69u37jouLSxcnJycHZ2dnOwcHByaTyWTIZLIxU6ZMmZmcnHyza9eu60-cOJGhJV4iBoPx0_37988qFAqZWq2u53K5FFoSAAAAAAAAvDI2bNjg_ezZM407CfF4vFxCiCOiZDoCgUDjDlWnTp0KJYTolMybPn1699jY2MdNTbuKiIi4QAhpb8xzIYR03Lhxo09ERMSFoqIiEUWTTCajLl--fH3mzJn90TIAAAAAAAAANCQAkpOT-dp2wVq5cuXHiJLppKSkPNNUF5GRkZcIIR2aez8hxPbYsWN7xWKxxuSQSqWiHjx48MTf33-UMcpPCGkfHBy8Kj09vUrbDlV08fl82enTp48vWLDgHUJIR7QSAAAAAAAAsGQGW8D44sWLFZmZmTc1_a1nz54Ob7zxxkfY3tx0SkpKNE43cnR07GJtbW3X3PtHjRpFWCzWYm3Trurq6pTR0dHrKisr041R_rFjx3r7-PhsGzFiRBdra8M0m549e9rNmTPnq_Xr19-eO3fu6dWrV08lhNihtQAAAAAAAMArb_HixRO0jZK4cePGo2nTpnVDlEzj0KFDOzXVw927dzO9vLx6NfVeX1_fAYWFhcKmRr0cO3Zsr7ESIv7-_qOKi4tFlBEpFAqqtLRUev369cSVK1d-TAhhotUAAAAAAADAK43H4-Vo6kSLRCL15s2bfREh01i9ejXRVA_JycllTa0tQwhpr60OX7h9-3a6scrt6enZU9vaTE1RqVSUXC6nsrKyauvr61UqlUrn98rlcurGjRsP_f39R2E0GQAAAAAAAFgKG0N_4LFjx9hDhw5Nc3Fx-Z_OsYODA3PRokUnampqig8dOhSH0BtXYWHhI7VazbCy-t8Zdh07duxoZ2dnr-k9hJD27u7uO9988803tH1udnZ23S-__DLdGGWeMWPGawsXLozu0aNHsyOAZDIZo7q6WlZTU9NQXl5elJeX92dKSsrF8vLyNFsmVc4ZAAAgAElEQVRbW1dCyObx48dzBg4c6GJvb9_kKBxbW1vGhx9--PbYsWNT7t27d3fIkCG7CgoKkpRKZS12wgIAAAAAAABzZfCkTk1NTc7169cv-Pj4-DCZ_9uX7tGjh92iRYuuyGSyj3_55ZcUhN94pFJpRX19verl5JqTk1N7TUkdQghz5MiRn37yySfzHR0dNSZBysvL5RcvXlxXV1dXYOjyenh4uHh6ev40bty40dpeIxKJqMLCwqonT56kl5SUJJSWliYWFhY-PH_-_NOXXlqpUCiWx8XFhY4bN27uu---6ztixIjuza3N4-TkZPXFF1-8P27cuEkPHjy4n5SUdJzBYERyuVwBWhQAAAAAAAC8EgIDAyfl5-c3apsm89dffyV5enr2RKSMhxBilZaWVqlpe-8lS5ZM1PD6jklJSU_VarXWKUrnz5__TZeds_Rx6NChHdq2YacoikpKSnq6atWqz-fMmTPY3d29k65r4BBCbObMmTP4p59-2lRQUCDQdn6a2mlVVZUiNTW1IioqKmbXrl1LOBxOP6y9AwAAAAAAAG09oWD33__-94xCodCaIDhx4sRRQkh7RMtodcD866-_kjTFf926dWwNr7cODg4O4vP5Mk2Jj-zs7Do2m-1qjHKuXr16qlwu15pgEQgE6nnz5o0xwLE6_vzzzz_U19er9N0m_enTp5LIyMjLGzZs8PLw8HAhhNgRQqyR7AEAAAAAAABTM8qisLm5uSpnZ-ec119_ndWrVy_nfxzU2prx-uuvjykvLy-5efPmI1SD4Q0ePJg5YMCAf40aNWrky39LTk5OvH79-v2X6oyys7O7n5qaeqNdu3ZvdurUqTuTyWTKZDJGRUWFNDg4-JMzZ87kGbKMhBCb4cOHf7527drLjo6OVppeU1NTo9q7d-_svXv3_mWAdinncrnXi4uLT8nlclc7O7vXnZ2d29PZMt3Jyclm-PDhQz788EOfTz75ZNXw4cN9e_ToMdrR0bHTyJEjOwwYMMCqX79-8tzcXCVaIQAAAAAAABiT0Xb6SUlJqXJwcHg8evRoTseOHf-xdk_79u2t-vfv_wlFUfH3798vQlUYVm5uLuO9994bPn78-H-9_LesrKy8K1euxGh6z4MHD57W19dHlJeXl6SmpiYmJib-Hhsbe-Snn36KNWT52Gx2108__XS1t7f3nt69e2scsSUUCqnz58-HfPPNNyHaPicgIOBNX19f33bt2j3Kzc1V6XLs9PT0Brlczs3MzPyrpqZG3q5du4Gurq4OL68B1RwHBwer1157zeXNN998691332WPHj2aM2zYMPYbb7zx0XvvvTd05MiRDj169BBkZWUJ0SIBAAAAAADAohBCmGvXrvVoaq2UnJycej8_v6GIluFt2LDBW9PW3nfu3MmYMWPGa61VrtWrV5OkpKSSxsZGrfuOKxQK6vLly9ebmvLl7e3dm8fj5dTW1ipPnToVRgjpqEcbtfXz8xt65MiR758-fSqhDECtVlNCoVDN5_Nlubm5DbGxsY8PHz68a9GiReMJIVZGutYcKAMhhDi0wXuRbUvjMm3atG64qwAAAAAAwCuFEGJ18ODBbTKZTGsH-ObNm8nGWK_lVbd8-fJ_1dTUKLUtBHz37t3M9evXe7JYLGdCiI2x2wGHw-l74cKFaF3Ws0lNTa3w8_Mb0sTndYyMjLz8Yt0muVxOXbhwIZrNZnfVt4xsNrvrmTNnTjc0NKgkEolaoVBQui6srCuBQKC-efNmcnBw8CpfX98BhBDH5-vyWLUwvgZL6mzevHlmW7wWkNRp098z1ogCAAAAAICReHp69oiOjr6pLbEjFArVJ06c-LktjhBoTfPnz3fLy8trbKqjqlQqqfT09OoTJ04c_eabb77w8fHpY-jRJDNnzuy_b9--jbm5ufW6JEkqKirkq1evntpUgujAgQPfNjQ0qF5OVEVGRl5qaXl9fX0HbN--fd6JEyeO_vnnnwmJiYlFWVlZtXw-XyaRSAyW5ZFKpVR6enpVVFTU7-vWrZtGCLEzh6ROeXm5vK1dC1lZWbVI6rRNK1eu_JiiKAqRAAAAAIBXkY0pDnLhwoVyZ2fn5b169Yp5--23e7_8d0dHR-bUqVMD-Hx-MpfLPYpqMQyxWNxQX19fx2AwtE5Lsra2ZowYMcJ1-PDh86uqqr7Kzc0tyMvLix00aFBkfn5-HJfLlep7fBaL5Txx4sTZ77333nI3N7c32rVr1-x7ioqKhGfPng3KzMz8vYmXWfXp0-edlxdXViqVjIqKisyWxi08PLyQwWAUMhiMXwghTDs7u25du3Z9vUuXLv1cXV37u7q6DunWrdvQHj169Bs1alQvOgst_127du0YI0aM6NKvX79_19fXl6Slpf3JYDBaPaHSvXt3W0KII5fLFbWF64AQYj906NDOuCO0LR4eHi7ff_99PuoWAAAAAMA0HSvmwoULx9XV1amaGqGxYMGCdxAtw5g-fXp3bduaN0Uikaj5fL4sPj6-4Mcff_yGxWI50z22v7__qL_--iuprq5OpcvoHLFYrI6Ojr6xYMGCsbpMpZg7d-6wO3fuZPx9zaC7d-9meXt79zZBW7Zzd3fvPGPGjNeaWi9KF0lJSSWbNm3isNls15Zsi27IkTptbQrWmjVr3A0RE4zUMZvvEqvTp0-feLl-EBkAAAAAABNYt24dWygUau0IFxYWCjgcTl9EyiCdH_uwsLBD1dXVCqlUqvf6MA0NDarIyMjLixcvnkAI6agt6UIIsfLw8HAJDQ3dJxKJdDqYTCajioqKRBs3bvShm9QghHTgcDj9fH19B_j6-g7QJ_nUwvjavDwFTNekWXp6etXWrVv9DFgWgyZ1qqqqFG3lOjDUAthI6rS-pUuXTtG2JheiAwAAAABgoo5waGjoT9p2PlIqldQff_wR5-np2RPRMki8mX5-fkMPHjz43c2bN5Nzc3PrpVKpXp1akUikvn__fuGhQ4d2BAUFferp6dnjRSKGzWa77ty5c2FycnKZph23NO1ulZ2dXRcWFnbQ1MkYA8S0w9KlS6ccPXo0mE4sGxoaVImJicX79u1b35IFnU2R1Hm-C5ZjG2j_BosLkjqth8ViOaelpVU2VT-IEgAAAACAiXh6evbgcrmxcrlc6w5Bx48fP4yFkw2fjAgMDJy0f__-LTdu3HhUWVmp0HfL7rKyMumLrbq3bdvmf_369QfV1dU6fV5dXZ3q3Llz55csWTKREGJrKfHz8vLqtXv37uW___773YKCAsGLnbd0SYbdvn07_YcfflhprK3kjZHU2bJlyyxLb_NbtmyZhaSORd-zrMLCwg7pUj-IFgAAAACACc2ePXtQenp6tbYH9Pr6etXmzZt9ESmjdJSs2Wy2a0BAwJsHDx78Tt-dgdRqNSUUCtW1tbVKXaZ2KZVKisfj5TxP5nSwpGTO8ePHD2dlZdU2NDSo6ExjS09Pr966davftGnTuhl6VzFjJ3XawhSsqqoqBZI6FnufstG2YyKSOgAAAAAAZmDhwoXj6uvrtc7Vqa2tVfr7-49CpIzeeWKuWLHiw6tXr97m8_kykUik1nf9HW1TrZ48eSIOCQlZbSmjrwgh7RcvXjzh8uXL13RdH-jviz6np6dX79ixY4EJy2vwpI6lT8EihHQ0ZCyQ1DF5_dnTqR9EDAAAAACgFWzbti2gqWk7jx8_rvjyyy-HI1Im6UQxfX19B4SEhKy9fv16Yk5OTj3dhMbfqVQqqqioSBQREXHRz89viKXEYfr06d3Dw8PP0l0Eub6-XpWQkFC0f__-zdOnT-9u4rozSlJn69atcyy1Pe_atWsJkjoWfT9CUgcAAAAAwAIe3G3DwsIOatsRSy6XU1evXr3t5eXVC9EybZJgyZIlE0NCQtb-8ccfcRUVFXI6HSyhUKiOjo6--c0333xBCLGxlPNms9ldr169eotOMksikajv3r2btWfPnhXGWjNHl_oyRlLHkqdgtXS7eSR1Wv0ehKQOAAAAAICldKRjYmLuaduqViwWq0NDQ_cRQuwQLZN3rKxYLJbznDlzBoeEhKx-9OhRWXMLBOfm5jZs2LDBm8ViOdHdprw1eXp69oyLi8vTdQFkiqKozMzMmu3bt89js9muxlwzR4d6MkpSx1KnYLm7u3cydByQ1DF5m0ZSBwAAAADAUsyZM2dwZmZmjbYHdoFAoF63bt00S0oStNGOFnPBggVjIyMjLz158kTc2NioUqlUlEqlovh8vuzUqVNhlrZrGSGEOWfOnMF3797N1GU7drFYrM7MzKwJCQlZSwixNpNzMFpS59tvv51rae10__79m5HUsfh7DZI6AAAAAACWJCgo6NPS0lKptof2p0-fSgIDAycjUuaRCPH09OyxY8eO-VwuNzY6OvrmihUrPjSXJAcd8-fPd7t9-3aatpFiLzQ0NKgSEhKKDh48uK21plk1UR-0kjoREREXdH1tTU2N0tLqtLm6pCiKCg8PP4ukjlnfY5DUAQAAAACwNNu2bfNvauHkR48elX311VcjECnz6nxZ6i5JS5YsmZicnFzW1AgdmUxGxcfHFwQHBwdxOJx-ZloHtJI6fn5-Q3Nzc-tpTMGymC3o2Wx21-bORyAQqDkcTl8kdcz7voKkDgAAAABA06zMrUAJCQlnLl68eFAmk2n8--jRo3t5eXkdZrPZrqg-88DlcqVcLldkaeVetWrV56tWrbo-ZsyYXlZWmi-FnJyc-u-___7L77___p1bt27tO3fuXHFbqDOFQiE7cuSIl66vHzdunLelnNvUqVM3NPeaAwcOLBaLxY24egEAAAAAAAxs-vTp3a9duxbf1MLJR44c-R4LJ4M-CCFWa9ascc_Pz2_UthV7QUGB4PmaObYWck60RurMnDmzPyHEtq1NwSKEMHUcedTR3d29M0bqmHVdYqQOAAAAAEAzrMyxUBcvXqyIjIxcnJGRUaHp7-3bt2d6eXkFubm5eaMKgW6n_-233-YEBAScHjhwYEdNrykqKhKEhobOvnnz5m4ul6toq7HgcrmK9PT0Kl1e6-LiYm0JU7Ds7e17Nvea2tpaFZfLFeBqAAAAAAAAS2dlrgULDQ1NPn78-Mzy8nK5pr936dLFJiAgIHTp0qVTUI2gC0KIzUcffbR2_vz5x9944w1nTa-prq5WHj9-_Kv09PRoLpfb5n_9P3r06DRdX2sJU7CmTZu2p7nXHDhw4CtcDQAAAAAA0BZYmXPhCgoKbh04cMBXJBJp7Fy_9tpr7Tdu3HgjMjLy8pdffjkc252DNoQQm88--2zT3Llzt_Xu3budpteIRCJq3759vqmpqVFcLlf9KsSluLg4QdfXLlmyJNTM65jp6-s7q7nXJSUlXcAVAQAAAAAAYJqOmn1YWNhBsVisbmo9BblcTt2_f79wx44d8zkcTj9L3Y0JjNKG2v_000-bamtrte5z3djYqDp48OB3lrKGjoZzpL2mzov3JiUllbSFXbA4HE6_5srP5_P__wrsWFPH_O_9WFMHAAAAAKBpNuZeQC6XK3VwcPi-T58-bh9--OG7Njaai2xra8sYP358fzc3t6MFBQX1KSkp199---1LOTk5d0UiUemrMJUGNPv88883-vr6ru3UqZPGkWkSiYS6cuXKf69fv76vLa-ho01oaKinm5tboi6vHT9-_Awulxtmjucxc-bMo8295sCBAxxcEQAAAAAAACYWEBAwOjMzs0bXX23VajVVUVEhT0xMLDpz5syvgYGBkzA969WzZMmSiXV1daqm2kpUVFSMpY_CaMlIHUKIta7vq6-vV5np-VvpONLI_sV7MFLH7Ns0RuoAAAAAADTDxlIKWlFRkfbjjz_-KyQkJNnJyanZtYCYTCajW7dutt26dev31ltv9XN3d_fNzs4uGT9-_PaEhISzXC5XjOpv851CGw6H84u2EToMBoNx69at1LCwsOlcLlfyqsaJy-WqeDxezqRJk4Y091pnZ2crQkgHLpcrNKdzcHFxGdzca4qKikRcLlfaBts5k8FgdOjcuXPPPn36jBg8ePBnvXv3fqtr166v9ezZs0vHjh1tysrKGisrK8urqqqKsrOzucXFxQkVFRVPlEplLZfLVeFuYdL6smvXrp2Li4tLz169eg3v37__-927dx_u7OzcvUuXLl27devW0dbWllldXS2trq6ubWxsrK6oqMgtKiq6zefzU6urq0sFAkEFg8GQYAQqGOM-cvDgwQgHB4ch1tbW7ZhM5v_8GEZRFIOiKJVMJqsUCoX3BALB5draWu4777zT0FZjw-PxrDp06DCgY8eOHzg6On7g4OAw3t7e_nVra2vb_3vc_Ofvhc9_XFTJ5fIqiUSSJhaL4-rr6y8LhcL0CRMmKNHi2p74-HhbZ2fnd52dnT06dOjwMa4hAIAmbN26dU5paalUIpGoKT2o1WqqqKhIdOrUqbB58-aNYbPZXQkh1ohs23tA3bFjx3xt6-golUoqPj6-YPr06d3byPnqPVKHwfi_kXC6vnf79u3zzO38r1-__qC5cgcFBX369_dY8kgdQoj92rVrPeish6RNeXm5_Mcff_zG3d29synPYefOnQupVvJy-zcmDw8Pl2-__XZufHx8gaHPIzc3t3779u3zWCyWk7HK7-Xl1YtOmf4-Gs5U-Hy-jE57b4XrtaOu5fv222_nWuJ9hKIoSiKRVObm5rrzeDyLHhUdFxdnnZeX5yUUCgvUarVR7kEikagkOzv7Y2PGKj4-3pbm87FZbhBRUFAwh855JCcn9zVV2VJTU4c1NDSkGKpdtJVrqKWUSqVcn_hlZ2d_0lplFolEpXTLq1KpVIb4rMrKyghzrEeJRFKt6zk0Njamafscqg27f_--3avcWbcJDAycFBoa-lNsbGzK06dPJfp-6dbW1iqvX7_-YP_-_VuWLl06xVIXyYV_8vHx6XP79u10TW1DpVJRycnJ_LY0Ja-lSR1dpy-Z4xQsXaePvXx9W1pShxDCDAwMnJSfn99orC8XgUCg_vbbb-eaItHdlpM6np6ePc-cOXPalOckk8mobdu2BRBCbAzd7uiUY-HCheNM_UxAN1am_iFn_fr1nrqWzZgJOlPdRyiKooRCYcGDBw86Wcp3KI_HYxYXFy_RtzPZ0gTPw4cPjfIDk1wuF9IpS1JSkou51Y1CodA5aatWq40-ejE-Pt62uro6xtjtwtKuIUNKSEhor2_ceDyeyXd2zs3NJfqU9cGDB86aPi8tLW0U3c8yw3uqFZ3yp6Sk9EdS59VN7jA9PT17rFy58uOff_75h-Tk5DKlUqlXQMVisTo_P7_x-vXribt27VqMtTMsvm1Y7d69e2ljY6PGtXRKS0ul33zzzRdtaYRWS5M6DIZuo13-1inqaC7nPm_evDHNlTcjI6P65fdZSlKHEMJct27dNJlMZtIvmn379m005jXS1pI6hBDmsmXL3q-qqlK09kPCqVOnwgyZ3Ll69eptXY8dExNzz5TXx-zZswfRjQ-Hw-ln4gf-el0Tc8a-j5i6LUql0lptHRdzcP_-fbuampq_zOHhXqFQyB4-fGjQ75ns7OxP6ZShqqrqsrnVD53y8_n8fcYsiyFH5bSVa8hYioqK9HpGEAqFBaYsZ3x8vI0-5Xz69Ol3TX0u3c9LTU0dasn1Z8hYIKlj2R1aa0KI4_Llyz-4du1avFAo1HtqllQqpYqLi0UnTpw4ymazXRFdy8NisZxSU1MrtD00BwUFfdbWFs02RFLHz89vqK7v37FjxwJzOfe4uLi85sobGBg42RKTOrNnzx5UX1-vaq0vG6VSSS1ZsmQikjpNmz9_vptIJFKb28PCxo0bfQxxfv7-_rR-NTTl_TUsLOwQ3bjs379_iwnvzTo_8B8-fHiXMcpQWlq6p7XbYnV1NdecppTweDxmZWXlWXN8yG9sbMwwZKws-Rd_um3XWB0kXEOtQyqV1usTq7S0tDGmKiPd0XDPE7jNruNZWVkZQXOkdZ451Z1SqdT5B67y8vIwJHVAI29v79779-_f8ujRozI-ny-TSqV6D2e_efNm8rfffjt39uzZgwghDoiu-Tt8-PAubR3UkydPHmujic0WJ3UscQqWrh0mTaMWzDmpQwixiomJuWcuXzrx8fEFhh610xaSOoQQ--TkZL45PzDcuHHjESHEyhTX2Qvu7u4mmzKgzwg2U96_vvzyy-G6lsvQa7wlJiY6qo21KIyeP5wlJSW1-o9lqampQ8z9QV-tVqsTExMNMiK2rq4ugc6xHz9-PMhcnm3otF-5XG7wDVBwDbX6j3bW-sbKFAmwJ0-efKPnM5WtDm2vozmesy4SEhJo9UkSEhIckNSB5h5E2wcFBX128uTJY_Hx8fn6_uItlUqp9PT06rNnz57bunXrHC8vr17YHt08BQQEjNY2_SErK6t21qxZA5HU0d6pjY6Ovknj1_hWn4K1ZMmSic2VMykpqUTTe801qcNisZzNYQrPy0QikdqQMbD0pM6sWbMGWspDw5MnT8QtTexkZGTovODhpk2bOKb6jtc3JoZee0ibCxcucFtjhFN2dvYn5toeCwoK5rTWd0ZpaekuS3rgN8S0m4cPH_agc8yGhoYUc3iuSUpK6kqn3Lm5ue6GPD6uIfOQlZX1gT4xqqurizdmuRITEx31KVdeXp6HrsegM9rl-Wd7mUOdPXv27Gddy6xUKpvdvABJHfj7g5_tzJkz-69evXpqeHj42cLCQoFKRT-_o1arqYqKCnliYmLxV199NQKRNbt6ttM2ukEsFquPHDnyfVtdDNtQSR1fX98Bun7Gzp07F7b2eT9-_LiiuXIuWLBgrKUkdehOc2kNhloI15KTOq2xNklLZWVl1bYkabB69eqpdI5liut_8eLFE_SNhykS_HQWmb5w4QLXUMctLy8PM_f2WFVVdcHU3xetsR6KIcTHx7c4AUl3tIk5PNfQXYzYkKMUcA2ZF4FAkKdPjFJSUoy2ExrdhMvzH8dK6RyjsLDwKzqfr8u0LlOgc7spKChodsdHJHV0Y_Uq3Ay4XK7i7NmzRXv27LkaHh4-e9myZb02bdrklZCQUETnu4vJZDK6detm-8477_R1dnbuzgCz8tZbb013c3Mbr-lvOTk5z-Lj409yuVwFIqVdY2Njka6vXbp06eHWTtaOHj262URLWVlZsiXEfvHixRPCwsJSzb2cR44cSVi2bNn7r-o1smTJkok7d-68aGnlHjp0aOepU6fu1vf9mZmZsXSOZYqF6Fks1g_6vve9995bZOzyWVtbd9b1tVFRUSsMccyqqqrL3bt39zf39tilS5fpNTU1f5kwQcB1cnJ60xLvOW5ubvUt_YyysrLtNK_3ya193q6urv-m8ezyeNKkSRSuobYpNTV1sD7vGz16dJExylNeXn7C2tqadrI1JSXldTqvf_bs2Uk6r7exsbFv7ZEfycnJvZhMJp1YnkbvCwziq6--GnH69OkTjx8_Lq-oqJDruoPWihUrPkT0zAebze56_fr1RE3ZYYlEojbWApTmwlAjdRgMBiMyMvKyJUzBCgoKanZXjzt37mRoe785jdRpyYgDSx2xY4kjdTw9PXtY-q9CLVnvRiAQ6PzzG4fD6Wvkex6zJXEQCARqY9-j6LTxlk6Pe9EZtbT2aIrRBoWFhfMs_brNycmZ2pIY0N2hRywWV7TmM01aWtoIOuVNTk5-zVAJHVxD5iklJaW_OcTn4cOH3fUpR2pq6jB9jicUCgvoHKesrCy4Neuprq4unsbIpRJdPrMtj9Th8XivxAAbk5o2bVq3zZs3-547d-58UlJSSXM7aCGpY1YJDea2bdv8q6urNWbkHj9-XOHp6dkTSR3dOrUcDqevJUzBys_Pb2yufP7-_qPMPakzbdq0bpb6ZeTh4eHyqiR1CCHMmpoapaU_QDSV6GzOjz_-qPOikMZOpLNYLOeWxsLY03F1XRsrPj6-xVvwFhQUzLXUNmnMdSDoboltrtRqdYuTkHR3EmrNzgadjqxarTbICB1cQ-aP7pS8F5KSklwMVQZ9Fs6ura29qe_xUlNTh5r6XtESdMqalpY26lVO6hh6UXobBjAYDAYjKiqqMioqKpwQcrFz586v9-_ff-zq1avPODo6YkFk89f-008_3eTq6mqt4ebLiIiIWHLhwoVnCJPOD1Mlur526dKlh9evX_9zKySx7AcOHNjsKKHKysoMc441IcT23LlzLf5FtLS0VHry5MnAtLS0a89_YVVyuVxKw_GsGAyGfbdu3QZOmjRpob-__-KWHDc8PLx6xowZdlwuV9nWrwtPT88jLi4uLZpSxOPxci5durSysLDwkVwur2MwGApN9fQiicT4vynS7V1cXHqPHTuWM2vWrE0tLcOUKVOGE0I6cLlcId333r179_h__vOfPbq8du7cuWsWL168zlj1MWrUqI9b-hkuLi4DGQxGtpGubbsuXbro9Ix15syZFi16mpyc_NqAAQNOGqLcYrH4aXV19U91dXWRUqm0QqVSyf4-rYXH4zFtbW07ODg4DOrSpUugq6urr42NjX1Ljjlo0KDfHj582N3Nza3S0PXg5ubWYIBOCqOhoSGxrq7uWGNj4y2ZTMZXKpWySZMm_aPzFB8fb21jY9PB0dFxpLOzs6erq6t_u3btWrzYMZPJZGZmZk4aPnw4T9_PKCoqYg8dOlTnaZQ9evSYyWAw_mvqey2Px2M6OjoO0PX1z54929vSY-IasgxdunT5XKVSqaysrGglHN96660qBoPR4inBdXV18Uw6c4ueJyRcXFz0HggwevTobJpLhTAfPnzYw83NrdzU9ZORkUFrBPeoUaPSzL3NPU-UKRUKRaNcLi-VSCTJUqk0SSQSJUkkkjyKolRubm71NJsFIz8_f8abb76Zj16niTT1K1teXl5jVFTU7zt37lzI4XD6GmLoNOgnODg4SFvi_ObNm8mvwk5lhhyp87yTcVrXz2KxWNutLx4AACAASURBVE6mPt_169d7NleuP__8M6GpzzCHkToPHz4sbUmWf9euXUsIIe1bUgYvL69ed-7cydC3DDdu3HhkrMQdnXKY0_X1d3w-XzZ__nw3Q31HEEIc9-_fv7kl7Wbv3r3r9Dw2rSlPhBB7Y9WJLoukNycsLOyQscq3aNGi8TSmjug9VY3H4zFbGgexWMxPTU0drm8Z4uLirIqLiwNbsvWzMX5dTk9Pf6slcamsrDybmJjoaKDOzlipVFrbkvJIJJJqQ3RQdNVai67m5eV50ClnS9cQwTVkWR48eKDXKM2ysrKQlhyX7pRAQ44SKi8vP0HnmMbe-auJhCafxrS4y5beFu_du8fUZ8Hs8vLyMPTezSip83cqlYoqLS2V3rlzJ-P06dMntm3b5r98-fIP5s-f7-bn5zd0xowZr7HZbFdCiAO2QjcsDofTt7KyUmM9VVdXKwIDAye9CnEwdFLHy8urF53EgqnPl8_ny5or15w5cwabc1Jn7dq1Hvo-vAUHBwcZOpHMZrNd6Wxb_XeLFi0a35aTOr_99luUPnFZv369pxGveetTp07ptUOLUqnUO14REREXdD2OoXZK03DuVoYY-iyTyYzWbmJjY1NM0XZbsqOTRCKpNFTS4m8dco6-5amqqooyZFn0edimKIpqbGxMM9bUo6SkJBeFQiHTN0Yt3eGptrb2Np3jxcfHm3zHULlcLtS1fHK5XNzS4-EasjylpaV79ImPvnXF4_H0-s4pLS3dY4jzTUhIoP3DkqnrhG5y9MGDB86W3g7pTmmlKIoSCATZDDDfpI6m-b0CgUBdUlIiTk1NreDxeDl__PFH3G-__RZ14sSJnw8ePLhtz549KzZs2OAdGBg4ydfXdwCLxXJGxGk_2NtFRkZe0tZpiYyMvNyaC_laclKHzi_yplhw9KWyOeo4SsDKXJM6hBC91nnIz89vJIR0MGZ8d-3atUSfJIGhk0zmktShW44XTLWO1_z58930XE9GrxFes2fPHqTrMa5evXrbGOfs6enZ01Bz2gkhdkZoMzrfPxsbG_WeIqrvwqEURVEZGRnjjdUmeTwek84vti91ugzynU13HYoXioqKTLJOXGVl5Vl9ypeWljaihUmlrnSO9_Tp0y2m_H6nu6Bzbm4uacnxcA1ZLn2So0qlUq7PsUQiEe1R1QqFQtaa55uZmWnSH7ULCgrm6Fo2lUqlsvT2JxAIsum2CUMkocHESZ3mRvVIJBJ1fX29is_nywoLCwWZmZk1ycnJ_Hv37mVfuXLlr7CwsEPBwcGrNmzY4OXv7z-KEOKA2vin1atXTy0tLZVqinNhYaEgKCjo01dlZJShkzoMBoPxyy-_HDDHKVjffffdV82VJyoqKqa5z2nNpM65c-ci6N47Ll--fM1U7XnWrFkD6Zbv---_D2yLSR1d2tvLZsyY8Zopr__AwMBJdMs4f_58Nz3rhdYvlsZos3QWbG5OU4upmyLpRHcNgr_TZySKSqVSxcfHm2Q9xdLS0l36TGMxxLGFQmER3WM_efJkrSmvW30Wfa2srDzb0uPSmeJj6s5XSUnJRjrxuHfvXovuL7iGLJe-i6A_efIkiM5xcnNziT7HMfTW4nRHcBliuqaxkk5Pnjz5xsLzA7RHb6vVanVLR1qCmSV19B0qX1FRIU9OTi67cuXKX4cPH961ZcuWWfPmzRtDCLF7Fad0EUI6Xrly5S9NzyYqlYqKioqKIYRYv0LxMHhSh86uTIbu0Delvr5e1Vx5OBxOP3NN6uizPsupU6dMPv92-vTptLftNOQ1Zy5JHTrbeFMURe3YsWNBa9wDrl27Fk-nnD_--KPeD1WJiYk6d5hbsoV6S76bdblPUBRFnTlz5rShyyeTyXQekq3vQ54-68UoFAqZqR8qCwsLA-iWMykpqXNLjqnPGikikai0Na5bumuoSCSSFi-EW1JSso7mNAmT_WijUqlUuparoaEhpSXHwjVk-QoKCmYZM-FCd-TYC3l5eRxDn6s-97W4uDiTrPdKN8EWFxdnsf0zuvfP1pzKCv97w69uaGhQKZXmu4utWCxWFxUVia5duxZvjF8czTSBwVy_fr1nRUWFXFNM-Hy-7Ouvv37rFUtyGTypw2AwGLq2fVNNwWKxWE6GGh3QWkmdyMjIy3SOGxMTc6-12tWyZcvep1PW77777qu2lNSh20b4fL6sFe8BHemU9cqVK3_pe6ylS5dO0fU4mzZt4hj4PHV6yNZ19FJL1hdq6YN3S35JValUtB5MWvNXwpqamr_olFUoFBa15Hi5ubnudJ-lWmv77szMzMl0R4m09JhxcXHWdI5ZUVFxxhSxoLsAbnJycp8WJpBwDbUBEomkUo9pMDrt_iiXy8V69MsqjHWudKf8FBcXLzdFHZSVlQXrWiapVFprqW0tOzv7E3366oZYLBtaKCgo6NPg4OCgkydPHuNyubHJycn8FixMbzRZWVm1W7ZsmfUKTTWyi42NfawtHmFhYQdftbZqrKTO4cOHdR76a4opWD_88MPK5soRHh6u0_D01kjqEEJoPUzX19erWntnPToL44pEIrUB23SrJ3W2bNlC61fA2bNnD2rNuqIzujQ3N7feFHWTlZVl0Ac4Pz8_ndZKIYQwdR2tY8hduuj8-p-Xl-ejzzGSkpJc6D4nJCYmdmjNtkl3mktLkiwCgSCPzrEMtZipvujWpYE6wtWtfX99WWVlpc7TktVqdYvKhGuo7YiLi9NrEeOCgoJZTX0un88_oM_nGjPudNeAUqlUSlPUAZ0Rh5mZmVMssZ09fvx4kD7tISMjYywyKubVYbZesWLFh5mZmTWtndQRi8Xq3Nzc-tu3b6eFh4efDQkJWf18u9xXZgrWjh075kulUm03i5pXcdFpYyV12Gy2q66fuXv3bqP_IiASiZq9AL28vHqZa1Jn5cqVH9M5pq-v7wAzaFu0kive3t6920pSh85uYFVVVYrWriu6W5235Fjl5eXy1piWd_r06RO6jkLSdV0wQ47srKur03kanL5D0OnuYFRaWrrD0h6Ii4uLV5oqSdLa6xzQ3ercQPe28TRHxRh9nTA65SkrKwtuybFwDbUtGRkZ4_ScEqNxbaTk5OTX9Pm8tLS0N80tCWzs6ZNJSUndWvtZzdgePHjQSZ_2YKqRUjrbt2_f-tOnT584dOjQjl27di1es2aN-4IFC8Z6eXn1IoS0J4TYPv9n8_yf9fN_Vs__MS054UAIsQ8ODg6qrq426hwstVpNqVQqSqlUUgqFgpLL5RSfz5fdvXs369dffz25bdu2AD8_v6GEEBvGK4zFYjlp-zVaqVRSW7du9XtFE49GSeowGAyGTKbb2meGHKWhiYeHh4uOHUid7jetkdTRZSv2vw3XLDGX9hUWFnZI13JHRkZebgtJHboLAq9Zs8a9tevJz89viKlitm3bNp3XeeBwOH0NdY66TAl9sZV6QEDAm7qULyIi4oKpH7j13YVFn4d6c7mPKBQKibF_YU5MTHSkE5v6-vpHrR2XsrKykNaoTzrHrKurizdmDFJSUmgtzn___n1bU537q3YNWSp9tqbXNAVW3-3LjX2NvPDs2bNDdMpVWVkZYczy1NTUXDO3GBmSvgtyV1dXx5i6rM0mCLp27Trc19d3lpaHK4ZAIFAJBAK5QCAQi0QigVgsbhCJRHVisbhWJBJVi8XiapFIVDV27NgaqVTaqFAopH_7J3vpn1ylUskoipIzGAwZl8tttRspIcSmT58-b7NYrD0ffvjhe_b29gZJTFEUxZBIJJRQKFSKRCKZWCyWikQiYW1tLb-ysjKzvLw8lc_npz99-jTz4sWLFQz4e53Yent7_9SlSxcbTXHl8XgZaWlpfyJShnX48OH1K1as2Nnc6xwcHJgsFss5Ojq6wRjl-PTTT5vdseD48eOHW_O-0Uz7tevZs6fOuyEEBwebzRDVy5cvb_D391-sy2s9PT3d20K753K5ahaLZcVgMNp16NChx-DBgydMmDBhySeffDLJ2vqfAywyMjL-aO0yC4XCelMdKzExMZLBYPyiy2vfe--9hefOnVtngGvIQVPsX1ZaWprGYDAYFRUVebp8rre393RDxOTBgwc6jxJ99uzZdn2O8fjxY1pT_J4-fbrJXK6pwsJCr8GDB3N1ea2VlZV1XFyc1cSJE2n9WDBu3DhRfHy8raOj4xudO3f27tSp0xxHR8eBTCZT4zNccXGxZ2vHRSaTpdF5PY_HY06aNKnF33M1NTV_uLq6_luX13bq1OldY8ZgwIABl-gkNt599129R0biGmqb0tPT35owYYJay6Wukb29vWtOTs7UIUOGXH3xf2PHjqX9PUpRFNW5c-cJpjjPJ0-erOzRo8diXV_ftWtXb2OWx8XF5VNdX1tUVDTdktoUj8ezGjdunJTu-yQSybMuXbp8bnZJnZiYmK1Tp06d6ezs_I85gjY2NozOnTtbd-7cuT2DwWjPYDBcm_osuVzOkEqlarFYrJRKpUqpVCqTSqVSmUwmlclkYrlcLpZKpUK5XC6Sy-WiGTNmSGUymUAmkzXKZLIGiUTSIJVKGwQCQaVIJPp_7Z15eFNVGvBP0nRP95ZCKZRCoRXKvhTooOiojM5tQUA2AXH0sywqKsgAAgpYHQUE2YRRxEHFDazQMAyibDZN9yWhCy1Nl6RNl3RJs7TZbr4_Br4PO13uublJbpv39zw848C5957z3vOenPPed2nt6OhQ63Q69b2EVzqmDnOLFi0a8vjjj7_xxBNPrB01apSPNQYclUpF1tfXq1pbW5ubm5tlLS0tla2trRVtbW3y1tbWmubmZnlbW1u9QCDQIKBXIiMjZ86ZM6fbHAQtLS0moVB4VK_XN4KkmOX69eufUjHq3Du8_S01NfWgLfqRlJS0ncJBfDdb5RgeHj4J84DOGk-dixcvtpnNZkTlQI0QQrY07tnZsGNBCHUihKru_fn2nnGBy-FwfIYMGRIVGxtLTJo0aYlAIDA4ur8Gg0Fnr2elpqaqqM6J559__u_r16-32qgzYsSIKX21MZvNSCAQdNzfW1G9t0QiGT9-_HiJNf0bMmTIFqpt6-rqaIWPhIWFfYjTXi6Xf8AWfVIqlZfHjBmDc1j4M0LoKu5zZs2aZUIIlSCE9tz7gxBCKDs729fHx2dmYGDgC76-vk-5ubn5Tpo0yeEJZfV6PVYf7hmorN7vVlVVrQgKCqKc86qoqGjauHHjcmwhAx8fn1iMg6FVh1TQoYFJfHy8JT8_P3zSpElYlezGjBkjEAqFLvHx8WRjY-O3bm5u2Oe-vLy8UHuNc-bMmQaj0djJ4_Eo54ITi8UxEyZMKGW6LzjhZhaLxTJlyhRFf5lPaWlpnLi4OD0Hx0r43z2I0cvLK4y1A7t06dINR-SPIUnSotfrLVqtllSpVObm5mZTQ0ODQSaTdVRWVmrLy8vbS0pKWm7fvq3Mz8-vTUtLK71y5Yrop59-uvTVV199eeLEiX0HDhx4a_fu3c9v2bLlr2vXrp2xYsWKkQRB-PQUorFu3bq4W7duFWk0GqzkOUaj0VJZWam9detW0blz534-fPjwO5s3b34qKSlp-urVq2OWLFkSnpiY6E8QBJQ0owFBED4__vhjitFo7Hae3Lx58_b8-fMDnVg-Ngu_QohaLhtbhmBRKa-NW8XG3uFXOCWnHVHCvC9OnjxJOURg27ZtzzAwpz36o3u8g9cBTxyZWRsajROWx0Qy4qtXr2b39ZwzZ86cfvAaquXXm5qaUqztn9Fo1FPc29BeJ3ESUhqNRj3b5ihONRlrS1b3F8Ri8VjMPCCM5ajCKSGu1Wpt8qGhtLQUK9dcWlqaVesW6NDABifh9n00Gk1FUVHRdDpnVYVCcczeYywvL5-P00e1Wl1ui35oNJpKqn1wdEJ6XPR6fRsNuwXJ-gTlmzZtelKn07Gv7JMVtLe3m6urq3UFBQWKW7duFQkEguvnz59PpWrMMZlMloaGBsOxY8fev5eo2A0BNmPjxo2PKhQKfU_Jo3fs2LHEmeVja6POP_7xj1eo3tsWiapPnz59oq_nHjt2DCuRob2NOjjPYjJxK1O8_PLLU6n2_8qVKyIG5jQYdWy8Dlhr1FmyZEk41WclJSVNt3JslEqFr1mzZuyD17377rurKOafsKpUNE4eBrolonFzPdirFDXmgetbnA2yM-itRCKZxERyVzpUVVW9gfNsWySVxkkUbW0OJNAh5wDHWGkN1uRGs3Iec3D7yrTu4vYhIyOj35yTcSso3iczM9PTkf2mZE2qqakpys3NLR1ICu_j48MdPny458SJEwfPmTNn7F__-te5CxcuJLy9vXud9CaTCVVVVenOnTv34_r164dv2LBh-z__-c9cNrjeD-CDCm_evHl7Bg8e3O2CkJGRUVhQUHAeJGU70tLS_kW17cMPP_w3ht8_Z82aNUl9tfvll18OsHgOY3noKRSKu2wbQ319fQXVtk8--eRM0Br2_qYzhU6nq6PaNjEx0apqNVwu159KO6VS-Ycvkrdv3_6N4v251nxhCwoK-jPVtnK5fBOdZ3h7e2NVIGppafmcbRO0tbWV8iEZ1-29v-Li4uKNeQljcqmtrf0Ep_2gQYMYzZmWnp7OdXd3D6DavrKy0qrngw45B7m5uf52eo6vI8YXHx9vaW9vL8TUXUbzh-Hc714erH5xTm5qarrA5_OjcK8rKCgYFhcX1-HIvlPawHR0dDSIxeIUrVbr1F9DNRqN5dKlS1eOHj36zNdff73y_Pnz9XCGsD0TJkyY__DDD8d392_Nzc2mM2fOPCcQCMwgKdshEAjUKpWK0hef9evXM2pc8fLy6rNEtsFgQBcuXGhhq_w8PT1xvXw62DYGkiTVOO2ZLGMN9Clrz02bNs3bt29fjZ3XBfLatWv5VNo-_fTTD1vjGTRx4sR5VH6jBQLBHxKobt26lXIFGH9__6l0-zd06NDjVNtOnTqVVhEEf39_rCSTOp2umG1zVa1WY3nx5eTkDMiwaqFQyJFIJONbW1tFDz30UJqj-hEfH092dHRQzkUYERHxDZPPDwsLo5zw1WKxWCZPniy35nmgQ87BjBkz1LZOcC2VStfExcV1OmqMUqk0Aaf9iBEjvmLy-REREWeotq2url7eH-aNTCbbFRwcjG04vnPnzjxr1yYmoOTCKRAITEOHDk2pq6vbMHr0aL9uNvsoLS2tqKKi4hafzx_s6-s72MfHJ9jX19ffz8_PJzAw0N3Ly6vfGoxJkkQZGRllP_zww9rKysr8ixcvtiHALiQkJPi-9NJLX_bkQZWamvrFl19-WQySsj1Hjhx5eceOHX1-tWK6CtbChQs_7qvN0aNHt7BZdqNGjZqG0z41NdXY3-cLh8PhI4RUoDnMcs8w4jlkyJDoOXPmvLZixYo1VBNY24Lvv__-_zz22GOUkqdyuVw_hBCt388VK1b0aTRxc3Nr7_p306ZNa6QanRcaGroHIUSrYgXVL3ttbW1ZdGUdEBDwPE77KVOmNPT3yEQ-nz8NIdTvq1qKRCIen8-PHTRo0ObAwMBneTwea0IRpFLpX8aNG0cprMnV1dVbJBK5zJo1i5EPaeHh4ZQLK9BNLg46NDB0CJfhw4e_ZzAYtru6ujIeEtPZ2dk8atSofzlyfJMnT5aRJGmherjm8XgeGRkZbkx4zIhEIh6OXBsbGy-yfb7cuXPnqfDwcOxiK7W1tftiYmJYoV88jE7n3rlzJzcqKuqxrvOHy-Witra22pSUlK2pqantPWxEXd3c3AIDAgIGh4aGRgUGBkb6-PiE-fj4DPHz8wsLCQkZ7u_vHxgYGOjt5ubGuQficDiIy-UiDofDufe_9_8_srWRyGw2o_r6ev358-eTr169ekAgEOgQYM_Di0tiYuLeyMhIfg8K2Hb9-vWPQVL2ITMz8ztEsYTxI4888lJqauoBBuYAZ-nSpX1Wurhx48Y_2Sy7yMjIR5xtvnh7eweAUcf6NZDD4XiHhoaOjI2NJebNm_dmTExMAJv6WFdXR9kFfOLEiX-5ePHidzTkwKUy7sbGxm5_D0wmk4HKITowMHAeHRnk5eUNodpWLpe_RFfWnp6eY5xwHZnZnw6kQqGQ4-bm5ufj4zMtICBgtZ-fH4ETXuQIYmNj83EMF2FhYa8jhKz-fc_KyvJ2cXGhfA6RyWRvW_tM0CHnIjc3188WYT_5-fmD2DA-hULxcVhYGOVw3vDw8PcQQlZ_BA0PD6esixqN5k58fDyrLaOFhYVRY8aM-TfudSqVKj88PJw1H5UpL6YCgcASHR394RNPPPGYu7v7__z7iBEjJgUEBAxBCLX3cL0RIdRw709hb4c4Ho8X6OPjE-Tr6xvM5_OD-Xx-CJ_PH-Tt7T3I29s7xMvLK4jP5we5u7t7u7q6eri5ubm7urq6uv0XV3d3d567u7vLvT8cV1e8glNmsxnJZDJdXl7etQsXLrx15syZAZVPqD-wfPnyyLi4uOVPPfVUt7lUOjo6LLdu3fqypaWlEqRlHwQCgVapVJqCg4P7XDfWrVu3b_PmzVZv-nx9fftM6KzRaCxsL58dExPzhLPNl-Dg4HD03zLgQB-GG4SQJ5_PDxo6dGj0mDFjnpwxY8aKSZMmDekn64KpoqJCPWrUqD7LwK5YseL43r17sY06VMuDNjQ0HO3u75VK5enBgwf3mZeLw-Fw0tPTubNnz8ZKLhoWFvY-1bbWlE3HKWE7UPD09JzFtj6lp6e7uLm5-Xt5ecXw-fyHfXx8Er29vce7urp691c5K5XKn4ODgxdQPNB9yIRRZ_jw4YeptjUajdpZs2ZZ7cEKOuRczJo1y1heXr4gKirqZ6buWVxcPAP3N8JW1NTUbMMx6oSFhW1mwqgzdOjQd6i2lUqlBJvnSE5OTsCECROwq4MZDAaVv7__FDaNBSuD_p07d64XFBRUxsXF_c9Ba-TIkSGhoaGjEEJ3rNwgWhBCzff-lPWxGfbg8XjeHh4efA8PD29PT08fT09PXw8PD193d3e-u7u7j4eHh6-rq-v9__bz9vYO8fb2DvT09PS5d423r6-vt4-Pj5uPjw9Xq9WSt27dunnr1q39JSUl_xEIBE6ZOd5RzJ8_P3DOnDl_i4-PXzt-_PiRPYVdVVRUKEUi0eeQoNq-HD58eNWePXu-pXAIYyQEa_ny5X16Bh05cmQ92-U2bdq0cc42V8LCwmIRQmmgNf_1VOXxeL6hoaEjR44cOTs2Nnbhww8_PIfP5w-IJJZffPHFC8nJyef6ahcTExNAEAQX93d19uzZayjqWbd5terr65OpGHUQQsjf33827rwNCQlZTaWdTqertUbOzpj01NPTc7wjnisUCrleXl5D-Hx-vJ-f31I-n_8nd3f3YC6Xyx2Icq6qqno-ODiY0u81l8t1yczM9IqLi7PKe33QoEGUiypUVlY-y8Q4QYecj9GjR1_Q6XQKT09Pqz-UqFSq_HHjxmWzZWyzZs0yGgwGLVWDMofD4eTm5g6eOnUq7ZywOTk5ATh6NHHixLtsnRsZGRluU6dOxc7HSZIkmZOTwzoPTCyjjkAgMEZHR6-Li4v7T9d_4_P5nOjo6KcQQv-2V-cFAkEnQqgT_dcA1NuGmoMQckEI8TgcjpuLi4srl8vlubi48FxcXFxdXV3deDyeq4uLi6uLi4urQqG4S5Jk2z0DE2CnQ8_EiRPnL1iw4MCYMWPCfX19e9w4mc1m9Pvvv59qamoqAcnZl_z8fMpxsXPnzn05NTV1nxVzgksQxKN9tUtPT_-a7XLz8vJyuo1kUFDQGGfUEYIguJ6enkMmTZpE_OUvf9k5ZcqUoQN9zGKx-ArVtnw-fxhCqBrn_hs3btzbV5uOjg5FT_82efJkGdXwksGDBycjhCiHS4pEIleqB325XJ5EV8a2KCXdH3B1dbVLktesrCzvQYMGvRwSErKJSnL-gcb06dPbzWazmcvlUkrQNXz48H0IoQ1W7CXCcewr0dHRl60dI-iQU-9dw2fPnm1VHiiLxWIpKiqayraxSaXShdHR0ZR_g0eOHHkOIfQnus-LiIj4gmrbxsbGr9g6J4RCIXfGjBm0El1nZWW5sT2kjDIFBQWK7uqzZ2VlVVlT3QJwygOQx7Jly0akpqb-ptfrLVSoqqrSEgThA9L7gxy9LBgsX748ku6zZDJZB5VnaLVaq7zc1qxZM7avZzQ3N5vo3j8xMTEAR2bPPPPMIJrvhmNxQr755puvrV0bcJ7nYP3jrFq1asxvv_2W15_eEZO_11qtlqTyzOPHj3-AuRkfRuW-Uqn0xd7u09nZ2ULlPiRJYq1bFRUVz1GVtzUl09PT012ccR0xmUw288YViUQutbW1-0mSJPuTTEQikast5FFZWbmWah9IkrRqzW1tbRVRfVZbWxsjnhGgQ86NRCIZb40cc3NzB7N1bLhjsdezsrKyWBmSKhQKOSaTyUhnHmRnZ_uydR7Q2mBcu3btE6Pxf0NbY2Njh0dHRz8JSwdA4RDktmHDhtnLly___NNPP60gCOIxN7fe81iaTCZ09-5d9eeff_6CQCBQgxQdw9GjR5dSaefl5cVJTEz0p_uc559__mxfbQ4fPvw8vBF2wufzQ5xgHePu3r37-Z9__pk8c-bMnccee2yys77vU6dO7aao13_Hue_gwYMplaVVKpW95uppaGigZEzicDgckUhE2Ys5LCyMUvUeo9HYER8fT9vQTdWDYqDB4XAYH3dWVpa3RqOpmDlzpiksLGyTM4bkdEddXd0_Md4Lys3NpZ0s1t_ffyaGsWkBE-MDHXJuxo8fL1GpVPl0rtXpdLXWhCzZGtyqisXFxfF0niMWi2OotjWbzaYZM2Zo2SivadOmqXCStN9HIpGMnT59ejtb5wEto45EIkmtqKho7fr3np6enKSkpB9Wr14dA8sH0BPPPffcqCVLlpx87bXX_r1kyZLn_P39-5yHTU1NppSUlJ-OHj2aWFBQJjCs0AAAIABJREFUcA6k6DiKioooV1GYO3fuWpqHZZe5c-dO7Ktdbm5uSn_YUznjPPH19Q0dyOPbtm3bM6mpqeZdu3Z96ciS4mzhxo0bJ6i08_Ly4hAEQTlZaUhIyBoq7fraPDY2NlI-sAYEBMyl2tbDw4OS8bKurm6blQdSV2ecV0waXIRCIVelUhVMnz5d4-3tPRJ-zf9IfHw8iZP3acSIEbRCK4qKiuKotrVYLJbJkyfXMjE-0CGAz-fTyi_k5eU1NDs724-t45JKpfNx2kdGRtLaO0dGRlJOOF1TU7OOjbLSaDQVbm5uPjRkvHrChAmsTvtBy6jT1NQkLSwsvNqdl3JUVJTv0qVLTxIE4Q3LB_AgiYmJ_seOHXv__ffflyxZsmTNmDFj_Hg8Xl8_6CgtLa10z549c8-cOfP8J598cgOSVzsWgUDQWVFRQclTasOGDR_QecbQoUP79HhQKBQGgUCggzfCTlxcXAbkBjohIcFXKpVq3n___Z_gLf9_DAZDI9W2X3zxxTcUD-EcKvNIrVYX99Vm-vTplJO2h4aGJlNpJxaLo6nes76-_lMrD2Y8mGX0KS0tfXz27NlmX1_fiSCNXg8u86i2DQwMpOWZj3OgrKur28-gcQN0yImpr68_Tcc74z5TpkxpYevYpk6dWo8TVuXh4RGSnp6OZQMQCoUcPp9P-TdPoVB8wTY5KZXKy3QM-k1NTd-NGjXqK7bPcVpGHYFA0CGRSH5saGgwdLNoopkzZ8bPmTPnJYIguLCMODcEQXASEhJ8t23b9kxycnLZunXrtg0fPtzT3d291-s6OjosYrG4cefOnc_OmTPnoaNHjwoFAoEGJMoOjh8_vohKOzc3N0QnBOvFF1_8sa82hw8fXgJvgr3o9foBZ3B74403Hr948aIqMjISPlr8777A8vPPP_-HStugoCBK4RT-_v7TKG7WKXnBaLVaKZV2fn5-M6i0CwsLO0SlHUmS5MyZM63Ka2GxWEwwy-jR0tJyMzo6-ipIom_Gjx9fhNNeLBY_hHswxKlCJJPJ3mZqbKBDzktubu7g0NDQNVYdmLlcblNT03m2jrG2tvY9nPZhYWGv4rQPDg7-C9W2HR0dCmvCjW2BTCZ7Jygo6C-412m12qpBgwYt7w_znLbRRSKR_CaVSiu7-7fAwECXefPmbQ0NDY2FpcR5WbBgQdDkyZOXvv7669d37979U2xsbEhfXqCdnZ2WgoKCutOnT3-we_fuCVTK5AL2p6ys7AbVtrghWARB8KZPnz6ir3a3b9--0k_E5ZRV9Do6OlQDaTzvvffeSx9__DHrDoYZGRnSzZs3z0tISPBeuHChQ0Pefv755zepbo5FIlGfMWtDhgz5kMr9mpubKVXGUSgUlIw_HA4HUUlGGxgYSGmD2NjYeMJa2ZIkaXTGdcTapJ5arbYmICDgYRaOC7W1tWUUFRVNkUqlq9nUt6ampu-otsUN4xg8ePBKqm2NRqN21qxZjM170CHnRCgUciZPnlzHxL2Cg4MX5ufnD2PjOOVy-R6c9sOGDTuA037EiBHfU21bWVmZyLIzCxEeHv4u7nUmk6mTz-dHOoWi7N-_f3Mv2dYtqamp18BbxznZtGnTvMuXLwsbGhoMVApLmM1mS3l5efuJEyf2rV69OgaqqOFhz-pX9ykqKlJSeZZer8faULz66qtz-rrn3bt3rU5UxtbqVxs2bJgNM5pd1a927ty5jA1VTNRqNfnNN998_corr_wpISHBt-s6mZCQ4Ouo6lcIIZSTkxNI9dl37tz5K4VDGEmhCg_lr4EZGRluVPtXVlZG9HavrKwsb6r3ysnJsbqksEgkwqrco1QqBc6-hqjV6lI2VSBSKpWXS0tLH8_IyPiDwbC0tPRRNlS_ojO3LRaLJS0tjfI6YjQa9VTvW1paymjhFdAh50SlUhUwqcskSVqEQiErzyidnZ1tmNWpKOWWwa0cxyaZiMXiGJrvmWTre7bVptunoaHB0Nthbv_-_ZtgSXEeVq5cGXXp0qUbSqXSZDKZKCmO0Wi0fPfddz-sXr06miAIV5Bi_zDqUDG-3CcxMTGASWPRm2---UR_MeoghFcCcs-ePS_AjGaPUWfp0qXD7H0AbGtrM1-4cOHK7t27n7-3LvKpfCBxtFEHZ663t7cXMWGAaW1tTcPpH9Xq1SqVqqC3-1RXV79lz7kpFAqxjMMajabSmdeP6urqrY4w3pjNZrNGo6mora39uLi4OD4zM9Orr76yzaiDEEImk8mAYXx5nGmjqi3WdNAh56O4uHi2LfS8r98HR1FSUjIXZxwNDQ1nKK6nlH_vlErlZbbIA-dDU1cyMjLcnE5hPv3003-YzeZevywmJSVNg6VlQB--XJYsWRJ-_PjxD-rr6w0UNz4WlUplvnnz5u3Vq1dHgxT7n1GHIAge1ecdPHhwG8V7ulE8jFq9qbWnUUer1ZJUn_Ovf_3rFMxodhh1CILg6vV6mxz-cnNz5Z9--ulHmzdvfmrlypVRCQkJfgRB8KwxtCQkJPg52qjT2tqaxsQ7Ky8vX0zlHrilWZnqn8Fg0FC5R3Nz86_2Npjd-1iid9a1Iysri29Lw43BYNC0trZmyuXyj0pLS5_My8sbIhKJaCdgLS0tfYJtRp2KiopVVPvT0dGhpHLP2tra_RiG7WxbjAt0yHnA9S7BpaioiJVnW9xxULmnubeDvg08U5kgIyPDw4r92SCnVJqEhAS_jIwMaU_vmyRJy_Xr1wsWL14cBkvMgDt0cVetWjXm0KFDO8RicQPVL6Dt7e3m69evF-7Zs-cFqJLWf406CCGUm5srZzIEa9OmTfP6updEImlkou_2NOrcvHlTQvU5dXV1sJFkiVHnyy-__Ke1Gz-tVkt-_vnnR15--eWp90KmbBaSvGDBgiBHG3XEYvFYqs_vrUSsWq0up3IPoVCIJU-cL7eZmZme3d0D54t_YWFhFFOyJan-yLLQBd6e4IT49GG80TU2Nn5bWlr6eHZ2tq-t-lteXo4V3mkPow6uVwsVPcSZv_n5-TY5M4AOOQ-4oUh0wP39sQctLS03ccaQl5c3pA8juQ9OyBJLDHpcXF1_4EORc6dAWLduXVxOTk5NT_JTq9XkmTNnvkhISPCFZWbAHLj4Bw4ceCszM7Oyo6ODpLhBsmRlZVW9__77a8HINzCMOmvXrp3BZAiWVCrt8-v3K6-88qf-ZtQ5efLkfkcftsGoY1ud6pI_w7J3794XCYLwsKfMFi9eHMaGeUb1-TKZbJc19zCbzWYah1Uu1f5VVFQ814NhaI4j5iVV76AHDv9OV8JZIpFMstIIW4Nb0claqqqqXsEMC7BLmLpGo6mwVlfuk5OTE8KGgyHokHNQVVW1wR7hljqdroFtY8fRNSrepA0NDV9TvVdNTc0OR49fKBRyzGazic77rKmp2eb0ykMQBPf1119_rLKyUtvb18qjR4_uhaWm__Pmm28-UVhY2KDRaCgbQhUKhf7gwYPbFi5cGAoH1oFj1CEIgrJ768cff7yViUM8QRCMbLLsadTZvHnzU5iHbT7Maccadb7--uszdDYFBw8e3OaoNW716tUxmPPMJv3U6XR1VMNYurueavhMY2MjrfKyVDd8Wq22prvrqSbgVavV5UzKtbW1NRO-OPYOTi6YriFEjsqhUFdXd4iNuR7EYnE0Tkhab_dSKpWXqd5LLpd_YKsxgQ4NfDIzM73orgF0risvL1_MNhkw6ZGGaQR1cfTYcQ2392lpabkG2vMAu3btWt7W1mbu7evlRx999DpBEG4grX5zsOIQBOGRmJgYkJSUNF0gEFynmmPCaDRa6uvrDSkpKZcXLVo0GKQ58Iw6CCGUlpZG6YDTVwjW1q1b51OI1a1hqt_2NOosXLgwFOdZGzdunAtz2nFGHYIguHQ2BatWrRrjSJnt2LFjCRuMOuXl5fOp9qG76hJSqfRFKtfS9ahoaGg4Y828wjgQzmFSrlTl4qybVJwwgQepra3d78h-t7e3F2EadezmAYjTr_T0dC5DB0ObeceADjmFYddI1-OGativI0IicaipqdmG0_-ewoTz8_MjqN5Dr9e3OXrcON6FXQx6jaA53ZCcnJxUV1en7-XLFbl___7NBEF4gbRYeZByW7p06bB169bFbd--fdGBAwfeOnPmzOlffvkls7a2tpOqgtTX1xsuXrz462uvvfYIlLUf2EadF198cSLV5yYkJPSYQ0Mmk3X0dT2TSdftadTBSSptsVgsWVlZlTCnHWfUWblyZRTupuCll16a5GiZffPNN1_j9LmnnDHWkp6eTtkoJpFIxnW9XqvVUsrVRbfcaGFhIeX3m52d7d9lkxtujcHKGnJzcwfjzktnWjPkcvlHuPKhWv3FxodQAxv0tjvq6-tPY4RgreruHjgeP3q9vt2W4wEdGtjghAp1lxtHKBRy6ORiMRgMOjbJATdJdE_VvHA826hWwbMVON6AXRxOjKA5PW_EOR9__PGWpqYmYy-ulZ0ffPDBeihf7fB35bJo0aIhGzdunLt___7N33777XdXr17NysrKqiwpKWlRKBR63MovGo2GvHz5ctrWrVvnz58_PxCkPPCNOjghWB9--OHGHu7hSdGzgDHXTnsadRDCr0jAVJgZGHXwOXXq1DGcZ1-4cOEKG2SGU2XtnvHQZonqqR5Uuyt_StETVG8PfewaY9_Y2PgDles6OzsZ_2qJm7zWYrFdwlk2YjQaO3BkQycnky3Afae21NuuZGZmelp7sFWpVAUYB8MnbDke0KGBS35-_lA6h_quVayys7P96NyHbflYcMPJrF2bHDlWuVyeTOedkSTZq4chcG8z_tlnnx3SaDRkT0JUKBT6TZs2PQnSsut74b_yyivxR44c2Z2amvrb7du3lUql0tjW1mbWarWk0Wi00IUkScvt27eV27dvXwT5QJzLqIMQQr_99lsexRwT3SZAfPvtt_ssX3zr1q0iJvtsb6MObo6WnTt3LmPTHFuxYsXIS5cu3Xz33XdXrVy5MoogCG9b5o5xpFGnt48SPXig-bJgDfCgcTj0sVV_ZDLZOxR_O0g6G-q6uroj1vSPatx9V-MM1a-4FRUVzzvSWPbAmlvKpnVELpcnm81ms0ajqZDL5R8VFRVNY8rzBHf-O_rLMkIIicXiGDbpbQ_GMspf97o7ILHtYAg6NPC452GDfXbpyUOFbqLlrKws1px_ioqK4qwJwcJJOt_W1pbtqHGWlZUl0j272tNA3u8PmefPnxcYDIZeQ3TWr18_C8JzGJE3hyAIr_nz5wcuXbp02OrVq2O2bNny12PHjiVfvHjx1-Li4ubOzk4L03R2dloqKyu1x48f_wCMOc5r1FmzZg3lMsYEQfzPhrS3kM37vPDCC-P6s1EHN6RHr9ezqgpWWVlZt-VBtVotmZKScnnHjh1Lli9fHkkQhCcT_XaUUYcgCOwvuWx4P--9995LuP3uGlrEJFSTHd_LEeL2wGZ6I8Wv5-FWGp324L5fHK8FW-UFoRNixKZ8D314zpja29uLZDLZOxKJZDxOQmCRSMTDlQvT4XF00Gq1NWzS2-4oLy-nnKurawiWRCKhHJ7d2tqaaSejCOjQAAM3L9X9j9G9rQEdHR2NuPc0m80mNskFp-9KpVLw4LU4-Wms_T22wij-EN3za0FBQSQCqJOQkOB78eLFX3sz7EilUs3mzZufAsMO9sHDe9WqVWNef_31x_bs2fPCkSNHdt8Ln8qWSCSNSqXSZLEhJpPJUlJS0vLVV1996ejkoIDjjTo4iWX37t37YpdrqYZeMbpG2NuogxOmdp9du3YtZ8P8WrJkSThu36018jrQqIOVJLmkpKTF0e8Hx9jwIDk5OYNs2S-qX07v3r37_-a5TqdrsMf7zsnJCcLYsA5DCKHq6upNjo7Rz8nJCcR9z0xX4aJLdXX1WzRCI-Ko3Ds7O9u3vxlj2aq3XcEJWero6FDSPWzn5eUNscd4QIcGFsXFxX-io0d9GSJwcsM9CBvydN0HJ8_Mg16zaWlpHIzrHLKW0tHj-5SXl8-HkyMNFixYEHLx4sVfTSZTj5OhsLCwYePGjXOh1HXPh4xly5ZFbNu2bcHhw4d3nTt37udbt24V5efn10mlUnVzc7PJbDZb7EVLS4vp7Nmz36xdu3YGQRAe8IbAqIMQQpcuXbpJ5dnNzc1_-JKxffv2RX1dc-XKFRHT_bW3UQchhG7evCmhYRxx-BdCqVSqwdwAkwzMaUcZdXiYG2alo98PTnhEd8YKW9HU1HSBSj-0Wq38_jV0QqLoQlVOCoXiGEIIGQwGHZX2tizJfM9YRrLtXfcFbuLO-6SlpVHaF-bl5Q3pb0Ydtuptd-AYZ-joWNcwTFsDOjQwoCuTxsbG81TuX1pa-gSd--fm5rKi4m92drY_Tr8zMzO9EEKopKRkLtVr6urqDjnAIO5hocn933OAJsuXL4_8_fffi3taQ81msyU_P7926dKlw0BafzhceB47duz9mpoaXVtbm1mj0ZCdnZ2WngxktsBoNFru3r3b_ssvv2SePHly_5YtW4hFixYNhrL0YNTpCk540YPV76hUvVq5cmXUQDDqLFu2bASNmF-HVsLat2_fG7h9Tk5OTnIWo46jD4c41Wm6IhaLo23Zt4KCgggcGebk5FDSyZqamh1M9I9qlS2TyWTA8Vawdc4TmUy2i877dmS4EVUPrJ6MfX3R36oasVlve9DlSKr9k0gk4xHCq3oll8uT7Tke0KGBgV6vb6cRImXGlHsdjdAuki0yMmN89a-urn4Ld8wZGRl2_bifnp7OpZM_yWLpOYcSgElSUtI0iUTS2MfEkD777LNDQVr_73DB_-STT3bm5-fXNTY2Gpn2xjGZTBaNRkMqlUqTXC7vLCsrUwmFwrLvv__-x_37929-9dVX5_RWghoAo06XPlA-9GzdunU-zsHdFuGZjjDq3NuEYOvqp59--pEj5tWCBQuC6KwtTHjwEQTh1h_Cr5gaLx2qq6u3WvMb0LXqhy3A-bJJNbQgJyeHkcqKFRUVz1PtX1VV1StscUWnGxZgMBg0jpin5eXly2xtvKATfuUI40h_0dvuoHqQamlpuYkQQi0tLTepjslWOahAhxwzx-1BVVXVG3Rkkp2djVXYQCgU0porra2tIpbIaSPG_NbhfMCwtgolLkKhkGM2m2l5Ngx0A6fd2bhx46OlpaWtvQn9999_L1m9enUMSOuPh88dO3YsSUlJ-XdJSUkLnUOh2Wy2KJVKU1lZWVtGRob0ypUrom-__fa7Y8eOvb979-7nN2zYMHvhwoWhkNsIjDrWcP78eQGV50ulUg1CCG3ZsuWvfbVNSUm5bCu9coRRZ-vWrfPp_CD1VA7ehnPKg85aw1SVMlyPGSbDd3HHvG_fvjfsrfNyufwDaw37ti4fjBBCarW6nKIL9xGqJViZ6ltmZqaXhWGamprO2-P945SJfhCdTtdgz3lKN5El7pduOod0e8uiP-ltd9TV1R3BMbJTbavX69sdMR7Qof5LVlaWNx2ZyGSyPXSehxOO1MVrbZyjZYVrlMIxlpWXly-x51ioVq3sClMh20AXXnvttUcqKirUvYX7_PLLL5m2OnT284O7d1JS0rTDhw-_k5OTU0MlDKuwsLD-5MmTH7_77rur33rrrafXrl0747nnnhuVmJjoDzmMwKjDNMuWLYvAOIR79FRR6UGWLVsWMZCMOgRBcLRaLS3f0c8---yQneaTG25Z7_ssWLAgiKE-YMXKEwTB2Jfe-vp6A-647VXWXCgUcui4g3dHRUXFc7buL9XNMNWvb0x_bWPaqGOvKiAikciVbh_vf421dR9xQna6OSwss8e7LC0tfRT0lhoZGRmUvSelUukLGO_AIaXlQYf6L3S8Naz1KqFTqe5eyJ7DP5YztfY4MhyRrvyNRmMHnBJtd1jgvP32288qFAp9b2FBKSkpl7srfQz8NzyAIAiv119__bGsrKzKnlxiNRoNefjw4V0EQbiA1MCoYw-jDk4I1sWLF3-1twcGG4w6CCH06quvzqH7IyoSiSpsmTx52bJlEXTzdqWnp5c7Yi5ZLBbLwoULQ5l69tGjR_fgjr2urk5v66TWpaWljzK5IZPJZLvscZhlss9SqfQFJvvX1taWx2T_7LnuNzc3X6HbT5IkbWqAqqmp2WFN3-g8U6_Xt9F5XkFBQQToLTWoJgtnq86ADvV_Ghsbf6AjE2vLu9MNw2JD2M_t27cnM623Go2mwo56-iudPppMJqMj82A5ywHU5eDBg9uUSqWxtwXp7Nmz3yQmJvqDxHrms88-O9RTrp2Kigr1hg0bZoOUwKhjL6MOQgidPXv2W6Z-NL755puvbdVPRxp1EEIoPz_fqi8nW7dunc-kwYsgCJdjx44lW9Mna8uYdwXn2ZcvX05j0LA1gubmjWTSuHQfsVgcYzQaO5jelNmr9Cpdl-nuuF-dg8ED9-NM9c3eSRiZMJipVKqC9PR0xj78ZGdn-9FJXvogxcXFtPYtdJPf2sJYOBD0tjvKysoSmRyLo_OOgA71L_Lz88Md6bVUXFw8m87z79y581dHy47pdUgsFtslVYpcLv-IbvghG7yknOUQ6nnixIl9vYUhmEwmS2pq6rX9-_dvfuWVV-IfrJgD9G3UuX79eiHIDIw69jbqLF68OIypH43FixeHDVSjDkEQntbKR61Wk1u2bCGs8cYjCMJtz549L1jbl8OHDzP-9Ri3Dzt37lzG0LuxaqN__vx5gbVrb0ZGhkdVVdVGkm6ZBwq0tbXl2WN9oppk2BFf9emWxO0ORySwlUgk4xiaC9k5OTm0QycLCwujNBpNpbX96OzsbLFCZ9ysebbZbDbdvn17Muhtz6SlpTHqeceG0s-gQ32TmZmJvV9hOomuUCjk0FGrjo6ORib7odFoKmh6WfMcOc-bmppS-puHXXl5-TN0PdVEIhFEqTjCsNNbMk6SJC1qtZosLy9vT0tLK_3ss88Ovfzyy1OZzJ8wEI06JElaDh06tAMkBEYdext1rD0Q2yP0ig1GHYQQ2rRp0zymZCUSiSo2bdo0LzExMYAgCJfuZEcQBIcgCN6iRYuGbN26dX5JSUkLE88uKytrs8W7otO_CxcuXGEiZ9jx48c_YEI27e3tRVVVVRsKCgoiRSKRa1dXYKFQyM3IyHAtKCiIkEqlL7a0tFyz5YHwQfR6vV2SB1p72H5Qlrbon5mh0pJpaWkOcfNubW0VMTUnSJK0tLa2isrLy-fn5OSEdPVAEAqFHJFIxMvLyxtSWVm5lm6y2Z6w1uPBWg8H0Nu-YeqdsymRL-gQ-406arW6lKY8GPXWoOvd5ajKafehUyGwJxobG3-wdX_z8vKG0O1fTk5OSGZmpmd-fv6wkpKSudXV1ZsaGxvPq9Xq8s7Ozjaj0dhhMpmM5H-xsIGsrCzvgXAY9Thz5sxpqjkcTCaTpbOz01JSUtJy4sSJfbZwdR8IRh2TyWRTLwcAjDq9cfr06RPWLnCff_75EVv2kQ1GHYQQOnny5MeWfg5BEJ62kM2ZM2dO26K_r7766hwKOuVqGeDYM-8CEzunsrIywhZ9Y-ILpiMqKT2ILXKd2BuJRDLeWjnk5-dHgN7aFrohMF2Ry-XJbNpHgQ6x16hDNy9VUVHRDFvIo6ioaDqd_lRVVW105Bw3mUxGJuZZVlaWzXPeVlRUPG9xIpgw6jg81kwgEHRevHjx7StXrtwyGo19tndxcUHu7u4oJiYmICkpafPXX3-tSEtLKz106NCOdevWxT377LNDCYJwQwMYgiB4iYmJAcuWLYvg8_nduq7eunWr4Ny5c3Vg7gAcQWpq6jvW3uPSpUt7nUFWSUlJb169ejWrv_Z_-fLlIwQCgU2qCxQWFn5ni_vGxsbOp_DbZNy_f_-bA3nucTgcZK8kgo2Njf-y9h7Nzc1XbNE3hULxtrX3qK2tXevId5mdne1tL5d4WyCTybaPHz9eYu19Jk-eXM10uIUz620PMpYzMddkMtk7bJIr6BA7EYlELtHR0ddwr1Or1cXjxo2zyd5q3Lhx2RqN5i7udREREYeYzguHQ01NzTpr70GSpHnGjBlqOOmwD1aEMJ07d67Oy8vrZT6ff-7hhx-OxbnW09OTEx8fHx0fH7-3qanpnTt37pRLpVLh1KlTb9y5c0eo0WiqBQJBv12kCYLgubu7hwwaNGh4SEjIyMDAwMjAwMCooKCgkUFBQcMjIiKGcrl_tM1ZLBb0n__8B0KvAIfx008_WfXV2mw2o5SUlEZnkdfhw4dnGo3GG08__fTD_anf69ati_vuu--qbXX_u3fvZtvivo8--uhLCKHNfbW7efPmoUWLFu2NjIzsF26xer2-tb6-fndERMQhqte4u7uHIIRsrmu1tbV_Dw0NXUP3eovFYpk1a5bRFn1Tq9Ul1t6jqanpgiPffXx8vCU9Pd01Li7OwO26KWA5SqXyp-HDh3_A1P0KCgrCZs2aZeov42ez3vZEXV3d_qFDh75F93qDwaBi2zsCHWInU6ZMaaXxe4EkEkmsLfslFovHzJ49GzuEcOrUqSqEkKsjZKlQKE5FRkZ-Zs09ZDLZ63DKAfpkxYoVI1NSUv4tk8k6rPHUNhqNloaGBoNEImkUCATX9-7d-7f58-cHsn38BEFwn3322aFvvfXW0wcPHtz2_fff_3jz5k1JYWFhfXl5eXt9fb1Bo9H06cVeUVGhHujeSsD_zB1WhV8hhNCnn376EV0dPnbsmM3dstkSfvUg33333Q_9xVX0b3_723g7zGuOrfqP0QcPuiXe7UlNTc0OhPDj5qurqzfZa52yZnwtLS3XbNk3o9Got2LPoWfLb4FQKOQw5WJvD-rr60_Z6MAV3R_G3x_0tjtEIpFV4amlpaWPsnU_BTr0vzgq_Kq6uvotOjLJz8-PsMdckUgkk-j0T6FQnHDU_NZqtTXWzDd7VZSC8KuBcTjlEATh9fcvcGI6AAANVklEQVS__z3x6tWrWQaDwWpBmc1mS3t7u_nXX3_N2blz5zKCIDzYMNZFixYN2bVr1_JTp04du3btWr5MJuswmUwWs9lsIUnSQtewdfbs2W_BzAFGHUcbdRYsWBBEV2ftYYRlo1EHIYR27ty5jM0_PGq1mlywYEGQveb222-_vdhGeYAoe6revXt3OVvfh8lkMmZnZ_vRNZ7YolJKT7S1tWXTHaetS_TW1tbSzm1VXV29lW2_CXSTitoTpsoMg946BoPBoLG1UR10yLE65EijTlZWFp-OTJqamlLsOU_a29sldPppTaU0Kw3eY-nON3vmjgOjDj6sqyB1L1RKJxAILn744YcXn3nmmUEzZ85cPmnSpGXDhw-PDgkJ8Q0ICHDB8YzkcrnIx8eH--c__3nqY4899m1dXZ0-Ly8vLS8v74xcLhc3NTXVmM3mNoFAwEgmfoIgXLlcrreXl5eft7e3n5eXl19QUNCIIUOGTA4NDR07dOjQhyIjI8OCgoIYl79Wq7UUFhaCUQdwOD___HOzwWBAbm54TmMGgwFduHChxVnltnfv3u8kEsnVU6dONQQGBrKqJOONGzcKDxw4MFUgEJjt9czCwsLzlZWVWqZDoHg8nh9CqJlK26ioqG_Ly8uNUVFRP7LpfVRXV785YsSIg13_3mQyGXg8HiXFc3d3D7BXf-Vy-ct-fn60yjG3trZm2LJvDQ0N-8LCwt6gc219ff0nbFtHfHx8YsrLy5dFRUWxbj9gsVgseXl5IdOmTWu25XNAb22LVCpdGB0djZ3nqq2tLQP1A0CHHMvUqVOxq7yRJEmGhIQ8Y89-SiSSCXTCsKZMmdKEHJDbdsKECcV07aqVlZWJcLoBmDCUuKxevTr6_fffX_vjjz-m5Ofn12q1WquqaZAkabl792775cuX044dO5b8xhtvPJ6QkOCH2S_vVatWjXnzzTefSE5Ofvn48eMfnD179ttLly7dSE9PLy8rK2tTqVRme5RMI0nSIhKJKuzhhQGwTj9Y56mDEEKHDh3agTuPDxw48JY9-sZWT50H3iknOTk5iQ1fEPR6vWX9-vWzHDi_GQ-BojMepqq-WEtra6uot7K1uF4nxcXF8fY8jNDwtjWxtW9sKsvcHSKRiKfVauVs-RrpiNxDoLfs0pnc3Nx-VbUWdMj-njpNTU3n6cimq_ebvaDr_WLrsOKeaGho-JrtHnbgqYMPr78sqve-DN9BCN0hCOKrgICAoaGhoaMmTpy4dNq0aYlRUVEBPB7ecDgcDho1apTPqFGj4nU63WylUvlGQ0ND4-LFi3-rqakR8ng8Ty6Xy3N3d_d2c3PzcXFxcXV3d_d1dXX14vF47v7-_sOCg4PDvby8vLy9vT28vLzcvL29ue7u7hwOx_6FCaqrq3Wpqalb1Gq1DMwcABu4du3a0Y0bN2JVsbpx48Y_QXL_9VoUCAQnRSLRF_Pnz9_30ksvOaQUZnJy8v_JyMg45ciE8wKBoHPBggVep0-fbg8ODmbkd-vgwYOXjx8_7o9zzeTJk-VCoZAbGxub7-vrO9Hecmhvby8sKSmZMXPmTENv7Wpra9_B8TqJiIj4HiEUbo8xdHZ2Nnt4eGC5nTc3N_9kp741eXh4hOBcw0RVL1tyLxlteEFBQcTYsWNLXF1dPR3RD51OJ7t9-_aYuLi4Tns_G_TWdrS1tWX5-_tTLhttsVgsU6dObUD9CNAh-1JQUBARHBy8EPe62traf0yfPl3liD5PmDChWKVSFeKuLwEBAY8WFhZGTZw48a49-1tdXZ00aNCg53CuaW1tvQ47c8DmEATBefHFFyecPXv2W6VSabSHV4wjuJ9nx2w2Wzo6OkixWNzw008_Xdq_f_-mDRs2zIbkyE6tA6z01EEIIRyPOrVabbev3mz31OnmHbts3759UVNTk80TOFZXV-vurSkctq31X3755T-ZGqc1fcnOzvazx9dbkiTJmpqaHbjJCXETfYpEIruE-tHJcyIWi2Ps0beqqqpXaORFGNSffitycnIC6OaAoINSqRRkZmZ6sGX8oLfMkpubOxinvzKZbE9_3285ow7Zy1NHKBTSKo7AhmT1dPtusVgsQqHQ7nstk8lkwPytC7Fn_8BTB0AEQXjv3LlzWUpKyuXCwsL62traTiaSLdsLs9ls0Wg0pEKh0N-9e7ddLBY3_P777yXnzp27cOTIkd3btm175rnnnhvFtsMWAEadnti3b98bVPuVnJycBEYdauvc9u3bF-Xk5NQwtfb89ttveW---eYTbEkk39d8__zzz49YO2YmNlLp6eku1dXVW62pntTdBlUulydnZ2f70u1XcXHxHJxn2qOCCkIIiUQiF7ZueLOysnzY7I7ONEVFRdOYPpySJEm2tramicXiaDaPHfSWOUiML6kikYiHBhDOokP2MupoNJoKOjLLyMhgxUdtulX3NBpNhb37KpVKX2BzmDEYdfAZsIYBgiA47u7ug8eMGTNz9OjRT4wcOfJP48aNe4gp132GfghRS0uLqbGxUaVUKuvb2toULS0t0ra2tqqWlpbK5ubmaqVSKdPpdA0CgcAIpgsAALpb6xBCnj4-PqFhYWGjIyIiZo0aNeqxkJCQ4cHBwSGhoaFeCCGkVCo7lUplS01NjaSqquqWXC7Pk8lkRTqdTokQ0jsyvMrK8fsMHTo0euTIkfFjx46dHx4eHjNp0qQhXdZas8FgaNFqtbnt7e0_qFSqX3Q6XV18fDyjYxYKhRxvb--R_v7-if7-_is8PT1H83g8H243mf0tFgsiSdLY2dlZq9PpMlQq1QWVSnVl2rRprTCrAXsjEolcfHx8Jvj5-T3D5_Of8PT0fMjV1bXbufuATrV1dnaWt7e3_6RSqQQajaZs9uzZ5v42dtBbAHQIcDYaGxt_CAkJeZZKW7lcvnfYsGG7QGrsxim8PQiC4Lm7u4eEhIQMi42NTZgxY8bK2NjYCE9PT7uN32QyoZqaGo1cLq-qra29rVAo8urq6sRarbZVp9O163S6dr1er7VYLBp7VpYBAAAAAAAAAAAAnAMcT9OMjAzXe7mlABbjtCE8ixcvDnvkkUeSHn300fWjR48O5vF4CKdMehfFuP_1BlksFmQwGCx1dXXtd-_elUil0huVlZVpd-7cSRcIBGqYcgAAAAAAAAAAAIC9KSgoiJw4caKUSlu9Xq_y8PDwB6mxH6fPy0IQhGtERMT0adOmrR43bty8QYMGDQoJCfH08vLqVjadnZ0WtVpt1mg0nWq1WqfVatubm5tlDQ0NRQqFIl8mkxXW1dXdEQgEGpheAAAAAAAAAAAAABtQqVQFVCt1lZSUzBk7dmwaSI39QLLdB0hISPAbPXr0jJEjR86Jiop63N_ff3BHR4e6s7NTrdPpWlUqlUytVitaW1urW1paqpuammrUanUTGHAAAAAAAAAAAAAANoMTesXhcMBW0E-AF9UNBEG48Hg8f3d3dy-TyWQ0mUwGs9lsQAh1QL4bAAAAAAAAAAAAoD9RUlIyNyYm5jqVtkql8qeQkJBFIDUAAAAAAAAAAAAAAAAHo9fr2-1ZZhsAAAAAAAAAAAAAAACwEpFI5ErVoGM0GjtAYv0LLogAAAAAAAAAAAAAAAYmI0aMOEa1bUVFxdMgsf4F5NQBAAAAAAAAAAAAgAEKJEge2ICnDgAAAAAAAAAAAAAMQCorK9dSbVtfX38cJAYAAAAAAAAAAAAAAOBg0tPTXSwYpKenu4DUAAAAAAAAAAAAAAAAHIzRaNRTNei0t7dLQGL9Ewi_AgAAAAAAAAAAAIABglAo5Oj1-nYej-dG9ZrS0tLZIDkAAAAAAAAAAAAAAAAHIRaLx5IkiRN1ZdHpdA0gOQAAAAAAAAAAAAAAAIYQiUQ8s9lsampqSiktLX0yOzvbTygU_iHaJj093SU_P3-oXC5PNpvNJgsNsrOz_UHa_RcoVwYAAAAAAAAAAAAALASnHDkdNBrNHR8fnxiQdP8FcuoAAAAAAAAAAAAAAAuxsU0HSSSSsSBlAAAAAAAAAAAAAAAAhjEYDDqLjZBKpS-ChAEAAAAAAAAAAAAAAGyASqUqsIVBp6OjQwnSHRhA-BUAAAAAAAAAAAAAsBCtVvs70_e0WCwoLy8vBKQ7MACjDgAAAAAAAAAAAACwEK1We5Ppe-bk5PjEx8dbQLoDAzDqAAAAAAAAAAAAAAAL0Wq1-UzeLycnx3_GjBkakOzAgQciAAAAAAAAAAAAAAD2odfrFUzchyRJc3Z2ttfMmTMNINWBBRh1AAAAAAAAAAAAAICFmEymDmvvoVQqfw4JCXkGpAkAAAAAAAAAAAAAAGBHdDpdHZ0KV62trWkZGRmuIEEAAAAAAAAAAAAAAAAHkZaWxhGLxTEKheKYTqdrIEmSfNCAQ5Ik2dHRoVQoFCckEsk4kBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOIb_C1HddAr_TfpLAAAAAElFTkSuQmCC","data_size":"36783","data_root":"DG17YjtDsc-YaoZEXsqc4_R1h7ak6RlhHfwc_moB-KU","reward":"47126870","signature":"iQuHU6xI8n40OKRQNexIhIFSmiHmTEsD5LHNT9cgCdZngsYHWhNYUZR07orwt9Xdk8hcDhq_MRGnwBBKT26r9CwOmh9hRlXqI0B1RT-vTRHRx7ictZh9kdZtod5n76Jocx_P6SwOYXDI1Hwx9rRziLMp1YDu6MU18aHldzvaJJT1q4KfHsvm_avFFG9j45IWFhtW3VZFpmx6LmHjJho6pgjaA0CVDb4eULaGvIFfLIOOngkODygplZt0s3rX-njt4cnyotMriE-DOhnx1IcTaxVq8iVUBQlvGlx3SuKMDixfS8IqN1KwTcB9FBUjJspUku4XqIWw_sOQPVmXfSDTWXVIgBWdVmzyq8AIwYecG-RR4BQtXyyTuhIlPXcyc65Hmaf_JZ9xsbLLntztyr6RrakV5cyVzJBzH2pBGyezW31Jen2TXE9tOefVgdL5fOMc-VnhNuaWbI7k77uG_xDDzdYUq9ggqlDCoIxlhvvT3PPP6KyHgS4P9bDyr4ukch94kAhGSP7OMd64NVwhLyjgtfvGVFihPXEn4pwSyRqI1Cqosa8vJG9QHRWydWbE7nTmdLGTJQW5wm_CYRMfByJj0r2Hf78mLrdZlycWYZXGDgNqS45_HfgvWcQpxspOCdROvLPIe5dPyMivM2NbJa692skImt8vLJToyLaf-S8cUm4"}}} \ No newline at end of file diff --git a/template/deploy.mjs b/template/deploy.mjs index 9635bdf..28fd83c 100644 --- a/template/deploy.mjs +++ b/template/deploy.mjs @@ -1,33 +1,81 @@ import Arweave from "arweave"; +import path from "path"; import assert from "assert"; import fs from "fs"; +import mime from "mime-types"; const walletFile = process.argv[2]; +assert(walletFile, "Wallet required!"); -console.log("Wallet file:", walletFile); +const rootPath = process.cwd(); +const dist = path.join(rootPath, "dist"); +if (!fs.existsSync(dist)) { + log( + "Error: Build not found!\n\t\x1b[0mPlease run `npm run build` first.", + "error" + ); + process.exit(); +} +const widgetPath = path.join(dist, "widget.js"); const pkg = JSON.parse(fs.readFileSync("./package.json")); +const jwk = JSON.parse(fs.readFileSync(walletFile).toString()); +const arweave = Arweave.init({ + host: "arweave.net", + port: 443, + protocol: "https", + timeout: 20000, + logging: false, +}); -assert(walletFile, "Wallet required!"); +main(); -try { - const jwk = JSON.parse(fs.readFileSync(walletFile).toString()); +function main() { + log("Starting Deploy..."); + deployPublic() + .then(() => { + log("Deploying Widget..."); + return deployWidget(); + }) + .then((arweave) => { + log( + `Widget Deployed!!\n you can check here: https://arweave.net/${arweave.id}`, + "success" + ); + }); +} + +async function deployPublic() { + const files = readFilesSync("public"); + log("Deploying Public Files..."); - const arweave = Arweave.init({ - host: "arweave.net", - port: 443, - protocol: "https", - timeout: 20000, - logging: false, + files.forEach((file) => { + log(`Deploying ${file.relativePath}..`); + deployFileSync(file).then((file) => { + editWidget(file); + }); }); +} - const data = fs.readFileSync("./dist/widget.js"); +function editWidget(file) { + if (file) { + const widget = fs.readFileSync(widgetPath).toString(); + const widgetNew = widget.replace(file.find, file.url); + fs.writeFileSync(widgetPath, widgetNew); + return widgetPath; + } + throw new Error( + `Error Edit Widget: File not found!\n${JSON.stringify(file)}` + ); +} + +async function deployWidget() { const tags = [ { name: "Content-Type", value: "application/javascript" }, { name: "App-Name", value: "Permapage-Widget" }, { name: "App-Version", value: "0.0.1" }, - { name: "Widget-Id", value: "latest-arprofile" }, + { name: "Widget-Id", value: pkg.name }, { name: "Widget-Name", value: pkg.name }, { name: "Widget-Version", value: pkg.version }, { name: "Widget-Desc", value: pkg.description }, @@ -37,15 +85,200 @@ try { }, ]; - const tx = await arweave.createTransaction({ data }, jwk); - tags.forEach((tag) => tx.addTag(tag.name, tag.value)); - await arweave.transactions.sign(tx, jwk); - const result = await arweave.transactions.post(tx); + const tx = await arweaveDeployFile(widgetPath, tags); + + if (tx) { + return tx; + } + + throw new Error("Error Deploy Widget!"); +} + +async function deployFileSync(file) { + if (file) { + const filepath = file.filepath; + const fileMime = file.fileMime; + const isDeployed = isFileDeployed(file); + + var result = false; + if (!isDeployed) { + await arweaveDeployFile(file, { + name: "Content-Type", + value: fileMime, + }); + } else { + log(`File ${filepath} get from storage!`, "success"); + } + + result = getStorageItem(file.relativePath); + + if (!result) { + log(`File ${filepath} not deployed!`, "error"); + } + + return result; + } + + throw new Error( + `Error Deploy File: File not found!\n${JSON.stringify(file)}` + ); +} + +function isFileDeployed(file) { + if (file) { + const relativePath = file.relativePath; + const stat = file.stat; + const storage = path.join(rootPath, "arweave-storage.json"); + if (fs.existsSync(storage)) { + const storageData = JSON.parse(fs.readFileSync(storage)); + if (storageData[relativePath]) { + const storageFile = storageData[relativePath]; + if ( + storageFile.stat.mtimeMs >= stat.mtimeMs && + storageFile.stat.size === stat.size + ) { + return getStorageItem(relativePath); + } + } + } else { + return false; + } + } + + throw new Error( + `Error Check File Deployed: File not found!\n${JSON.stringify(file)}` + ); +} + +function getStorageItem(relativePath) { + if (relativePath) { + const storage = path.join(rootPath, "arweave-storage.json"); + if (fs.existsSync(storage)) { + return JSON.parse(fs.readFileSync(storage))[relativePath]; + } + return false; + } + + throw new Error( + `Error Get Storage Item: File not found!\n${JSON.stringify(relativePath)}` + ); +} + +function addStorageItem(file, arweave) { + if (file) { + const storage = path.join(rootPath, "arweave-storage.json"); + var storageData = {}; + if (fs.existsSync(storage)) { + storageData = JSON.parse(fs.readFileSync(storage).toString()); + } + + const find = file.relativePath.toString().replace("public", ""); + storageData[file.relativePath] = { + name: file.name, + find: find, + ext: file.ext, + mime: file.fileMime, + path: file.filepath, + stat: file.stat, + url: `https://arweave.net/${arweave.id}`, + arweave: arweave, + }; + fs.writeFileSync(storage, JSON.stringify(storageData)); + return storageData; + } + + throw new Error( + `Error Add Storage Item: File not found!\n${JSON.stringify(file)}` + ); +} + +function readFilesSync(dir) { + var files = []; + + fs.readdirSync(dir).forEach((filename) => { + const name = path.parse(filename).name; + const ext = path.parse(filename).ext; + const filepath = path.resolve(dir, filename); + const relativePath = path.relative(rootPath, filepath); + const fileMime = mime.lookup(filepath); + const stat = fs.statSync(filepath); + const isFile = stat.isFile(); + + if (isFile) { + files.push({ filepath, relativePath, fileMime, name, ext, stat }); + } else { + files = files.concat(readFilesSync(filepath)); + } + }); + + files.sort((a, b) => { + return a.name.localeCompare(b.name, undefined, { + numeric: true, + sensitivity: "base", + }); + }); + + return files; +} + +function arweaveDeployFile(file, tags) { + if (file) { + const filepath = "object" === typeof file ? file.filepath : file; + const data = fs.readFileSync(filepath); + + var transaction; + return arweave + .createTransaction({ data }, jwk) + .then((tx) => { + if (0 < tags.length) { + tags.forEach((tag) => tx.addTag(tag.name, tag.value)); + } + transaction = tx; + return arweave.transactions.sign(tx, jwk); + }) + .then(() => { + return arweave.transactions.post(transaction); + }) + .then(() => { + log( + `${filepath} deployed! + \x1b[0mTransactionId: ${transaction.id} + https://arweave.net/${transaction.id}` + ); + if (file && "object" === typeof file) { + addStorageItem(file, transaction); + } + return transaction; + }) + .catch((e) => { + throw e; + }); + } + + throw new Error( + `Error Arweave Deploy: File not found!\n${JSON.stringify(file)}` + ); +} + +function log(message, type = "info") { + type = type.toLowerCase(); + if ( + type != "info" && + type != "error" && + type != "success" && + type != "warn" + ) { + type = "info"; + } - console.log("Deployed!"); + const color = { + info: "\x1b[36m", + error: "\x1b[31m", + success: "\x1b[32m", + warn: "\x1b[33m", + }; - console.log("result: ", result); - console.log("TransactionId: ", tx.id); -} catch (e) { - console.log("ERROR: ", e); + console.log( + `${color[type]}\x1b[1m[Permawidget VueJS]\x1b[0m${color[type]} ${message}\x1b[0m` + ); } diff --git a/template/package-lock.json b/template/package-lock.json index 8aac4c1..886de4c 100644 --- a/template/package-lock.json +++ b/template/package-lock.json @@ -1,14 +1,17 @@ { - "name": "vuejs-widget-template", - "version": "0.0.1", + "name": "create-permawidget-vue", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "vuejs-widget-template", - "version": "0.0.1", + "name": "create-permawidget-vue", + "version": "1.0.0", + "license": "MIT", "dependencies": { + "arweave": "^1.11.6", "daisyui": "^2.31.0", + "mime-types": "^2.1.35", "pinia": "^2.0.21", "vite-plugin-css-injected-by-js": "^2.1.1", "vue": "^3.2.38", @@ -1301,6 +1304,14 @@ "node": ">= 8" } }, + "node_modules/arconnect": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/arconnect/-/arconnect-0.4.2.tgz", + "integrity": "sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==", + "dependencies": { + "arweave": "^1.10.13" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -1321,6 +1332,38 @@ "node": ">=8" } }, + "node_modules/arweave": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.11.6.tgz", + "integrity": "sha512-D6N6e2z7oZoxFhu/qElLwQ2T8DxZ8xIqDB+Y16KHvZbassIrrS9iALwxLdaFYNInuyElg6i7qotBMcShWbFSTw==", + "dependencies": { + "arconnect": "^0.4.2", + "asn1.js": "^5.4.1", + "axios": "^0.27.2", + "base64-js": "^1.5.1", + "bignumber.js": "^9.0.2", + "util": "^0.12.4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -1353,12 +1396,59 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1367,6 +1457,11 @@ "node": ">=8" } }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -1425,7 +1520,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -1580,6 +1674,17 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1699,6 +1804,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", @@ -2667,6 +2780,46 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -2743,7 +2896,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -2829,6 +2981,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -2886,7 +3049,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -2898,7 +3060,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -2983,8 +3144,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { "version": "1.0.3", @@ -3000,6 +3160,21 @@ "node": ">= 0.4" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3049,7 +3224,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -3091,6 +3265,20 @@ "node": ">=0.10.0" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3204,6 +3392,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -3400,6 +3606,30 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4236,6 +4466,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -4649,6 +4884,18 @@ "punycode": "^2.1.0" } }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4864,6 +5111,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -5849,6 +6115,14 @@ "picomatch": "^2.0.4" } }, + "arconnect": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/arconnect/-/arconnect-0.4.2.tgz", + "integrity": "sha512-Jkpd4QL3TVqnd3U683gzXmZUVqBUy17DdJDuL/3D9rkysLgX6ymJ2e+sR+xyZF5Rh42CBqDXWNMmCjBXeP7Gbw==", + "requires": { + "arweave": "^1.10.13" + } + }, "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -5866,6 +6140,35 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "arweave": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/arweave/-/arweave-1.11.6.tgz", + "integrity": "sha512-D6N6e2z7oZoxFhu/qElLwQ2T8DxZ8xIqDB+Y16KHvZbassIrrS9iALwxLdaFYNInuyElg6i7qotBMcShWbFSTw==", + "requires": { + "arconnect": "^0.4.2", + "asn1.js": "^5.4.1", + "axios": "^0.27.2", + "base64-js": "^1.5.1", + "bignumber.js": "^9.0.2", + "util": "^0.12.4" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -5879,17 +6182,46 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -5929,7 +6261,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -6040,6 +6371,14 @@ "simple-swizzle": "^0.2.2" } }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6129,6 +6468,11 @@ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", @@ -6752,6 +7096,29 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -6802,7 +7169,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -6861,6 +7227,14 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -6905,14 +7279,12 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -6970,8 +7342,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { "version": "1.0.3", @@ -6984,6 +7355,15 @@ "side-channel": "^1.0.4" } }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7020,8 +7400,7 @@ "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { "version": "2.11.0", @@ -7045,6 +7424,14 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -7116,6 +7503,18 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -7267,6 +7666,24 @@ "picomatch": "^2.3.1" } }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7800,6 +8217,11 @@ "is-regex": "^1.1.4" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -8103,6 +8525,18 @@ "punycode": "^2.1.0" } }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8240,6 +8674,19 @@ "is-symbol": "^1.0.3" } }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/template/package.json b/template/package.json index 2df4d11..34dbf9f 100644 --- a/template/package.json +++ b/template/package.json @@ -1,11 +1,11 @@ { "name": "create-permawidget-vue", - "version": "1.0.0", - "description": "🛠️ The Permapages widget boilerplate", + "version": "1.1.3", + "description": "🛠️ The Permapages widget boilerplate sample for Vue.js", "author": { - "name" : "André Nunes", - "email" : "hello@anuness.dev", - "url" : "https://anuness.dev/" + "name": "André Nunes", + "email": "hello@anuness.dev", + "url": "https://anuness.dev/" }, "repository": { "type": "git", @@ -24,7 +24,9 @@ "deploy": "node deploy.mjs" }, "dependencies": { + "arweave": "^1.11.6", "daisyui": "^2.31.0", + "mime-types": "^2.1.35", "pinia": "^2.0.21", "vite-plugin-css-injected-by-js": "^2.1.1", "vue": "^3.2.38", diff --git a/template/public/favicon.ico b/template/public/favicon.ico deleted file mode 100644 index df36fcf..0000000 Binary files a/template/public/favicon.ico and /dev/null differ diff --git a/template/public/img/metaweave.png b/template/public/img/metaweave.png new file mode 100644 index 0000000..0f3e1bc Binary files /dev/null and b/template/public/img/metaweave.png differ diff --git a/template/src/components/WidgetComponent.vue b/template/src/components/WidgetComponent.vue index 393dbac..593cfec 100644 --- a/template/src/components/WidgetComponent.vue +++ b/template/src/components/WidgetComponent.vue @@ -1,101 +1,8 @@ - + - - Fake Register - Click - finish - - - - Hello {{ getName() }} - your age is: {{ getAge() }} - - - - What is your name? - - { setName(e.target?.value) }" - class="input input-bordered w-full max-w-xs" /> - - - - What is your Age? - - { setAge(e.target?.value) }" - class="input input-bordered w-full max-w-xs" /> - - - Next - - - - - Total Clicks: {{ getClicks() }} - Click - - Previous - next - - - - - - Thank you for your time {{ getName() }} - your age is: {{ getAge() }} - your total clicks is: {{ getClicks() }} - Please reload the page - - - - Reset - User Details - - Clicks - - - Social Medias - - - - - - - - - - - This template is open source!! - fork it!! - - - - - - + @@ -121,18 +28,4 @@ const { getClicks, resetClicks, increaseClicks, decreaseClicks, getUser, getName rgba(188, 0, 255, 1) 19%, rgba(248, 23, 181, 1) 100%); } - -.loading { - display: inline-block; - width: 2rem; - height: 2rem; - border: 0.25rem solid #fff; - border-radius: 50%; - border-top-color: #1a1a1a; - animation: spin 1s ease-in-out infinite; -} - -a { - text-shadow: 0px 0px 20px #000000; -} diff --git a/template/src/components/icons/GitHubIcon.vue b/template/src/components/icons/GitHubIcon.vue deleted file mode 100644 index 99657d0..0000000 --- a/template/src/components/icons/GitHubIcon.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - diff --git a/template/src/components/icons/TwitterIcon.vue b/template/src/components/icons/TwitterIcon.vue deleted file mode 100644 index 4f51736..0000000 --- a/template/src/components/icons/TwitterIcon.vue +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/template/src/main.ts b/template/src/main.ts index 5069639..aa67257 100644 --- a/template/src/main.ts +++ b/template/src/main.ts @@ -11,4 +11,4 @@ const app = createApp(App); app.use(createPinia()); app.use(router); -app.mount("#widget-template"); +app.mount("#create-permawidget-vue"); diff --git a/template/tailwind.config.js b/template/tailwind.config.js index eac9507..b48d16c 100644 --- a/template/tailwind.config.js +++ b/template/tailwind.config.js @@ -4,9 +4,6 @@ module.exports = { theme: { extend: { colors: { - mtw_purple: "#f817b5", - mtw_white_alt: "#f9f9f9", - mtw_white_alt2: "#f3f4ff", }, }, }, diff --git a/template/test.mjs b/template/test.mjs new file mode 100644 index 0000000..184f6ab --- /dev/null +++ b/template/test.mjs @@ -0,0 +1,147 @@ +import path from "path"; +import fs from "fs"; +import mime from "mime-types"; +import Arweave from "arweave"; + +//joining path of directory +const currentPath = process.cwd(); +const directoryPath = path.join(currentPath, "public"); +const walletFile = process.argv[2]; +const jwk = JSON.parse(fs.readFileSync(walletFile).toString()); +const arweave = Arweave.init({ + host: "arweave.net", + port: 443, + protocol: "https", + timeout: 20000, + logging: false, +}); +const files = readFilesSync(directoryPath); +files.forEach(async (file) => { + const isDeployed = isFileDeployed(file); + + if (!isDeployed) { + const res = await arweaveDeployFile(file.filepath, [ + { name: "Content-Type", value: file.fileMime }, + ]); + const storage = path.join(currentPath, "arweave-storage.json"); + var storageData = {}; + if (fs.existsSync(storage)) { + storageData = JSON.parse(fs.readFileSync(storage).toString()); + } + storageData[file.relativePath] = { + name: file.name, + find: file.relativePath.replace("public", ""), + ext: file.ext, + mime: file.fileMime, + path: file.filepath, + stat: file.stat, + arweave: res, + }; + fs.writeFileSync(storage, JSON.stringify(storageData)); + } else { + console.log("File already deployed"); + console.log(isDeployed); + } +}); + +function isFileDeployed(file) { + if (file) { + const relativePath = file.relativePath; + const stat = file.stat; + const storage = path.join(currentPath, "arweave-storage.json"); + if (fs.existsSync(storage)) { + const storageData = JSON.parse(fs.readFileSync(storage).toString()); + if (storageData[relativePath]) { + const storageFile = storageData[relativePath]; + if ( + storageFile.stat.mtimeMs >= stat.mtimeMs && + storageFile.stat.size === stat.size + ) { + return storageFile; + } + } + } + } + return false; +} + +function readFilesSync(dir) { + var files = []; + + fs.readdirSync(dir).forEach((filename) => { + const name = path.parse(filename).name; + const ext = path.parse(filename).ext; + const filepath = path.resolve(dir, filename); + const relativePath = path.relative(currentPath, filepath); + const fileMime = mime.lookup(filepath); + const stat = fs.statSync(filepath); + const isFile = stat.isFile(); + + if (isFile) { + files.push({ filepath, relativePath, fileMime, name, ext, stat }); + } else { + files = files.concat(readFilesSync(filepath)); + } + }); + + files.sort((a, b) => { + return a.name.localeCompare(b.name, undefined, { + numeric: true, + sensitivity: "base", + }); + }); + + return files; +} + +async function arweaveDeployFile(filepath, tags) { + const data = fs.readFileSync(filepath); + + var transaction; + return arweave + .createTransaction({ data }, jwk) + .then((tx) => { + if (0 > tags.length) { + tags.forEach((tag) => tx.addTag(tag.name, tag.value)); + } + transaction = tx; + return arweave.transactions.sign(tx, jwk); + }) + .then(() => { + return arweave.transactions.post(transaction); + }) + .then((res) => { + log( + `${filepath} deployed! \n\x1b[0mTransactionId: ${ + transaction.id + }\n${JSON.stringify(res)}` + ); + return transaction; + }) + .catch((e) => { + throw e; + }); +} + +function log(message, type = "info") { + type = type.toLowerCase(); + if ( + type != "info" && + type != "error" && + type != "success" && + type != "warn" + ) { + type = "info"; + } + + const color = { + info: "\x1b[36m", + error: "\x1b[31m", + success: "\x1b[32m", + warn: "\x1b[33m", + }; + + console.log( + `${color[type]}\x1b[1m[Permawidget VueJS]\x1b[0m${color[type]} ${message}` + ); +}
Please reload the page