From 3cf8b96984d7c805285b247e0ce00da77cd2f0fa Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 10 Sep 2024 20:49:16 +0000 Subject: [PATCH] Add token 0x4F7A8B0C35Aa437a8aB1cB414A71FA0950cEeAE1 MINI (MINI) --- .github/workflows/cleanup-branches.yml | 34 ---- .github/workflows/sync-with-upstream.yml | 62 ------ .github/workflows/update-token-list.yml | 178 ------------------ FXList.json | 9 + .../logo.png | Bin 0 -> 19870 bytes 5 files changed, 9 insertions(+), 274 deletions(-) delete mode 100644 .github/workflows/cleanup-branches.yml delete mode 100644 .github/workflows/sync-with-upstream.yml delete mode 100644 .github/workflows/update-token-list.yml create mode 100644 Tokens/0x4F7A8B0C35Aa437a8aB1cB414A71FA0950cEeAE1/logo.png diff --git a/.github/workflows/cleanup-branches.yml b/.github/workflows/cleanup-branches.yml deleted file mode 100644 index fe10747..0000000 --- a/.github/workflows/cleanup-branches.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Cleanup Stale Branches - -on: - schedule: - # Runs at 00:00 every day - - cron: "0 0 * * *" - workflow_dispatch: - -jobs: - delete_old_branches: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Fetch all branches - run: git fetch --all - - - name: Delete stale branches - run: | - # Get the date 7 days ago in YYYY-MM-DD format - seven_days_ago=$(date -d '7 days ago' +%Y-%m-%d) - - # List branches that haven't been updated in the last 7 days - for branch in $(git for-each-ref --format='%(refname:short) %(committerdate:short)' refs/remotes/origin | awk -v date="$seven_days_ago" '$2 <= date {print $1}'); do - # Ensure the branch is not 'main', 'master', or any protected branches - if [[ "$branch" != "origin/main" && "$branch" != "origin/master" && "$branch" != *"HEAD"* ]]; then - git push origin --delete ${branch#origin/} - echo "Deleted branch $branch" - fi - done - - - name: Cleanup - run: git remote prune origin diff --git a/.github/workflows/sync-with-upstream.yml b/.github/workflows/sync-with-upstream.yml deleted file mode 100644 index 11203cb..0000000 --- a/.github/workflows/sync-with-upstream.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Sync with Upstream - -on: - schedule: - - cron: "0 * * * *" # Runs every hour, adjust the cron schedule as needed - workflow_dispatch: - -jobs: - sync: - runs-on: ubuntu-latest - - steps: - - name: Checkout Forked Repo - uses: actions/checkout@v3 - with: - repository: marginx-spot-trade/FXSwap-TokenList - token: ${{ secrets.TOKEN }} - fetch-depth: 0 - - - name: Set Up Git - run: | - git config --global user.name 'github-actions' - git config --global user.email 'github-actions@github.com' - - - name: Add Upstream Remote - run: git remote add upstream https://github.com/FunctionX-SG/FXSwap-TokenList.git - - - name: Fetch Upstream Changes - run: git fetch upstream - - - name: Check for Differences in Tokens Directory and FXList.json - id: check_diff - run: | - git fetch upstream main - if git diff --quiet upstream/main -- Tokens FXList.json; then - echo "changes=false" >> $GITHUB_ENV - else - echo "changes=true" >> $GITHUB_ENV - fi - - - name: Merge Upstream Changes and Preserve All Workflows - if: env.changes == 'true' - run: | - git merge -X ours --no-commit upstream/main || true - # Ensure all workflow files are preserved - for file in .github/workflows/*; do - if [ -e "$file" ]; then - git checkout --ours "$file" - fi - done - git add .github/workflows/ - git commit -m "Merge upstream changes while keeping all forked workflows" - - - name: Pull Latest Changes from Origin - if: env.changes == 'true' - run: git pull origin main --rebase - - - name: Push Changes - if: env.changes == 'true' - run: git push origin main - env: - GITHUB_TOKEN: ${{ secrets.TOKEN }} diff --git a/.github/workflows/update-token-list.yml b/.github/workflows/update-token-list.yml deleted file mode 100644 index 3eb8306..0000000 --- a/.github/workflows/update-token-list.yml +++ /dev/null @@ -1,178 +0,0 @@ -name: Update Token List - -on: - workflow_dispatch: - inputs: - name: - description: "Token name" - required: true - chainId: - description: "Chain ID" - required: true - symbol: - description: "Token symbol" - required: true - address: - description: "Token address" - required: true - decimals: - description: "Token decimals" - required: true - image: - description: "Token logo (base64 encoded)" - required: true - twitter: - description: "Twitter handle" - required: false - website: - description: "Website URL" - required: false - -jobs: - update-token-list: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: "20" - - - name: Set up Git configuration - run: | - git config user.name "GitHub Actions" - git config user.email "actions@github.com" - git config core.autocrlf input - - - name: Determine logo file name - id: determine_logo - run: | - case "${{ github.event.inputs.chainId }}" in - 530) - logo_filename="logo.png" - ;; - 90001) - logo_filename="logo-testnet.png" - ;; - 7000) - logo_filename="logo-zeta.png" - ;; - 7001) - logo_filename="logo-athens.png" - ;; - *) - logo_filename="logo.png" - ;; - esac - echo "logo_filename=$logo_filename" >> $GITHUB_ENV - - - name: Debug inputs - run: | - echo "Twitter: '${{ github.event.inputs.twitter }}'" - echo "Website: '${{ github.event.inputs.website }}'" - - - name: Decode and save image - run: | - mkdir -p Tokens/${{ github.event.inputs.address }} - echo "${{ github.event.inputs.image }}" | base64 --decode > Tokens/${{ github.event.inputs.address }}/${{ env.logo_filename }} - - - name: List files in Tokens directory - run: ls -R Tokens/ - - - name: Prepare branch and token entry - id: prepare - run: | - name="${{ github.event.inputs.name }}" - symbol="${{ github.event.inputs.symbol }}" - address="${{ github.event.inputs.address }}" - sanitized_name=$(echo "$name" | tr ' ' '-' | tr -cd '[:alnum:]-') - sanitized_symbol=$(echo "$symbol" | tr ' ' '-' | tr -cd '[:alnum:]-') - sanitized_address=$(echo "$address" | tr ' ' '-' | tr -cd '[:alnum:]-') - branch_name="add-token-$sanitized_address-$sanitized_name-$sanitized_symbol" - - # Save branch name to be used in subsequent steps - echo "branch_name=$branch_name" >> $GITHUB_ENV - - - name: Pull latest changes from main - run: | - git checkout main - git pull origin main - - - name: Print branch name - run: | - echo "Branch name: ${{ env.branch_name }}" - - - name: Normalize line endings in FXList.json - run: | - awk '{ sub("\r$", ""); print }' FXList.json > tmp.FXList.json && mv tmp.FXList.json FXList.json - - - name: Format FXList.json before changes - run: | - jq --indent 4 . FXList.json > tmp.FXList.json && mv tmp.FXList.json FXList.json - - - name: Append new token to FXList.json - run: | - logoURI="https://raw.githubusercontent.com/FunctionX-SG/FXSwap-TokenList/main/Tokens/${{ github.event.inputs.address }}/${{ env.logo_filename }}" - # Create token entry - token_entry=$(jq -n \ - --arg name "${{ github.event.inputs.name }}" \ - --argjson chainId "${{ github.event.inputs.chainId }}" \ - --arg symbol "${{ github.event.inputs.symbol }}" \ - --argjson decimals "${{ github.event.inputs.decimals }}" \ - --arg address "${{ github.event.inputs.address }}" \ - --arg logoURI "$logoURI" \ - --arg twitter "${{ github.event.inputs.twitter }}" \ - --arg website "${{ github.event.inputs.website }}" \ - '{name: $name, chainId: $chainId, symbol: $symbol, decimals: $decimals, address: $address, logoURI: $logoURI, extensions: {twitter: $twitter, website: $website}} | with_entries(select(.value != "" and .value != null)) | .extensions |= with_entries(select(.value != "" and .value != null))') - # Append the new entry to the tokens array in FXList.json - jq --argjson token_entry "$token_entry" '.tokens += [$token_entry]' FXList.json > tmp.FXList.json && mv tmp.FXList.json FXList.json - - - name: Format FXList.json after changes - run: | - jq --indent 4 . FXList.json > tmp.FXList.json && mv tmp.FXList.json FXList.json - - - name: Check if branch exists locally and delete if it does - run: | - if git show-ref --quiet refs/heads/${{ env.branch_name }}; then - echo "Branch exists locally. Deleting local branch ${{ env.branch_name }}." - git branch -D ${{ env.branch_name }} - else - echo "Branch does not exist locally." - fi - - - name: Check if branch exists remotely and delete if it does - run: | - if git ls-remote --exit-code --heads origin ${{ env.branch_name }}; then - echo "Branch exists remotely. Deleting remote branch ${{ env.branch_name }}." - git push origin --delete ${{ env.branch_name }} - else - echo "Branch does not exist remotely." - fi - - - name: Commit changes - run: | - git checkout -b ${{ env.branch_name }} - git rm -r .github/workflows - git add FXList.json Tokens/${{ github.event.inputs.address }}/${{ env.logo_filename }} - git commit -m "Add token ${{ github.event.inputs.address }} ${{ github.event.inputs.name }} (${{ github.event.inputs.symbol }})" - git pull origin main --rebase - git push origin ${{ env.branch_name }} - - - name: Install GitHub CLI - run: | - sudo apt-get update - sudo apt-get install gh - - - name: Create Pull Request with GH CLI - env: - GH_TOKEN: ${{ secrets.TOKEN }} - run: | - gh pr create --repo FunctionX-SG/FXSwap-TokenList --base main --head marginx-spot-trade:${{ env.branch_name }} --title "Add ${{ github.event.inputs.name }} Token" --body "This PR adds a new token with address ${{ github.event.inputs.address }}, name '${{ github.event.inputs.name }}' and symbol '${{ github.event.inputs.symbol }}'." - - # gh pr create --title "Add ${{ github.event.inputs.name }} Token" \ - # --body "This PR adds a new token with name '${{ github.event.inputs.name }}' and symbol '${{ github.event.inputs.symbol }}'." \ - # --base main \ - # --head marginx-spot-trade:${{ env.branch_name }} diff --git a/FXList.json b/FXList.json index 394f4fb..f3ec3fa 100644 --- a/FXList.json +++ b/FXList.json @@ -1023,6 +1023,15 @@ "twitter": "www.x.com/test", "website": "www.test.com" } + }, + { + "name": "MINI", + "chainId": 530, + "symbol": "MINI", + "decimals": 1, + "address": "0x4F7A8B0C35Aa437a8aB1cB414A71FA0950cEeAE1", + "logoURI": "https://raw.githubusercontent.com/FunctionX-SG/FXSwap-TokenList/main/Tokens/0x4F7A8B0C35Aa437a8aB1cB414A71FA0950cEeAE1/logo.png", + "extensions": {} } ] } diff --git a/Tokens/0x4F7A8B0C35Aa437a8aB1cB414A71FA0950cEeAE1/logo.png b/Tokens/0x4F7A8B0C35Aa437a8aB1cB414A71FA0950cEeAE1/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b081161a564197c92898301f80c50d57b2dc9248 GIT binary patch literal 19870 zcmV({K+?a7P)J72b@9F>)Wav9I?LfwldfJ$z?ic_6{(2+n`TqZPC+q$a8u|MA1+>`*t=oYg z=nAIWe<$VtAPI6G?7Zyq1-sY!!D^2y6Zq%=2LlpmA@29LV>&bTv`{19@BlA6`W2=ZNVU#q$`o<-41s^%?W6bBI&OK(+P`{!j#cIV$}VSnAZ&yxi^X$);*A zC*I7**=uJ(kml9CxcIt+LciV0OvC&HFUaW##>h6`e_0q1 zN#trJ*_I$ZZ)eWx%CD*w6e*-A)#eHxI}HsquG?&-$18lQxFgKMdRQkdOXk(};pXh2 z#L&E-oBGO^(%R#_%GcQ+uU9@x?jU;0SXbA^^^2>;lOxZ{Aj9Szn8~p6Je$t_LmSvlN+c+(iiBFc;kusi@QuImBw^H$Y*JEf^03X9=x%>Q>~4{?p@Z?5U+F1}!uCix z`tR2H>?enSj#q4rUQhJj_ttf2^S5;0=Uu4u?pMF{X#T}FTpsh;0000AbW%=J?fu=| z-QC^p{@q*C@qqvUN<&FRK~#9!wAQ_AQ&Ako@u28%&E;xZ>?A@Vpa>35DP(LrC@#Vs zd;uZS(KS?D%#fx3K$m7{hb{)CV#y+Ou!ETd7okhKwB16wl}>)oOY-F8q`nM3`Q4NF zg7o8a&LM?=$Q8R>Vg8V-SDD}B($z~W|0#t+IZDIk;lqY~k%f!0Jj~K4PbPEw$!(Vx zKJ_~DV3b=XH<`&?yLs(zQ!?RwmPizkcpM57BJ*0{VFHLm%OZgqbK#kXGl{A@je-c5 zJb}&PSP5?zS|tiO=22BnW>pF(UJ*&6s3A1Q!&_Y3L4ul`OPZmrL;#ss(dsl$B(jmp78I8hiqw)4?z&hc zP<*O>(@}{>B1o%c)>t--!w9tOCIBHCg7AbQd6>`?s^X(Gw%a6P3HBQq{n~ZpIJksi zcu7QpZ8r&$$7I~|WPVCVj7(8c@~9w2%e0%0mqcLXitap>q?Yi&8uPdjE4u7nOqxU@ zfrwEA5{C~Z$CAi@v?5|Gc4h3Nc#tj!kHW)v5o16i1p!2)3TtBGi##%^8{XgqaSeG~ zp)iAFRk1R8B(f+a-geXPhIz)3B7Sk zsvz-@k?OHJ!t`XqR1bDuj1no7De*ZX5;@O|TSJgt9|k?~7}Dax^5WvO`}^?{oX3y7 z2@j(yPhT8Zys7R;jMq%N_fmU-r|A@szBEWQ!wBa#pJH2@*nW!yltA|7NQ`BvB}^2h zZCBUMi*G%l(vT!k7%CcxF3*fC{u7Ih>rBT9kwBKji;@=2Gg%UkF^MFQAvqI+#w;QU zl^T}6B=nw|TuW!u*$5@kj4?2(NLei(cDt~&?}Wmm7!gB&z;W+t2@^AZm=q(@mxzh0 z92qN*13C~S2Emv|q9ERL!-fyt&YiirmConY#*oCDM2tv_#-x%gj3K5YAN9lxMIlOM zDgD#I;Iz*!B%_)bOk&NZkV28)bbvgmyHZI=_U!F(8B;?hD;o1K#9N5fj50sZ_^2hf zMhB|yO;Ys-2OHJuM(-4o;@S#=E)>Dx5$ML-EJ=z9Dc0_H%ZL}CJTaf+N&lu-wlbKr_BCFr1L~a*9oHIJjrZOWp|Ft!-jYek)R@Gr@7T`Z{6Em zUJ}QXf|eNLIqw~ilfhX)vK}QJdn??o13fU)r^0x z)=@_d*HMtAotJBwEi`X$+Fd7)_MJL9JK0EVss{tplkRb+x@DjAgo28dYF;T8lWagq z0!1X9qaav}h}_ST%F1!~>)SO<#U$^PgS##yE$_7b9wqssuq9Al;~rW%KS)N|=$%8F z)=~c?ONv=F&ueQr|8@@z+m1CpM22UpRn-h9Pxvwl|Z+z}N%d7mfo>bm!Hk+G4OFMx0+1`En^zl=RkL~5?7)iv~|ND18ey;DkW+B0G zAi{>TAhU<_O6}fZq425}A0(o$4W*Jg3P2;#%p3lVJKgKMkgk87%X5B+_70%qm0Bgs z);bMUw6Mi_XjNNBKexBn_gmE@YmS4)MHY1aoxi_-w7$2u{o~_1L+YLB>$vYKg>81+ zT(hvyXuMkUA`*ibK&4njB=h~f>a$KdQg9H>wGX6^v&(i=TazEtNGSpVPRqC zkd8P<7j=ZlW~vAeB9mW~nome0XBfskPX|V^kT$R)l~rrn5L$#;oKs-C(xi}9rV!mF zc0w*G_TWL9<`Q=avOy0*aSu)ki6BT)(@7(_Ec7rQb_yj~jTG#`uyjZ8&~>GU#Z#a6 zo5XLE)c$#r9W|RJ^PA^=pYQ#~O`;*pfxW%Qu<2dXJ*Ze>!`W%qwO7bj!(7= zc;D?#8ZIEcLOBWhyWwzfCx}aMP{`8tzx%-wFlvgV)Xr}#-2jlHNUFElN4E$r=CGEW zwpn=Ab(9@E`bVNcQx(LR1tb9NnbjB}NirHh)@BhsqUUvsl;=N%cih1sh<+^r*XXf` z#~sUsgWa%u%^eJ*^0p3Af=(vAbP^Ch+&I?-$^;L9mVtEPAs=t_c*FzmT95iUku@s_ znF=F%oG>3-NkW1{;;d=M$gf+xi-gj4IJmafOT@E|M;#FO2tLU845Vq8H7)DBxps3I)Ti7|WJ*GpCvuxB*?KArN^2pQK00C7^J7LkpK*0c%UcJ#p#F5(Hy+%as z(hhLOlSsfP*aaf=QEd6Dk3_M2_T%Bk%5ZoWB_|S*oXMl@WHj`v&-iA~85$guN{g#M zes$=dSldeBd|%zAb+_0wa(#vuqmMTSnUD>{IkjU3;`X$1p_7Pv)JrtzrJ z!wXsBUOJUPWRTLaOe~%w*`}Q{ZoxDs7bb5p%PX;2o3UG0J4|PU7Ob(HW zCEU}V>Zt6?AiDR>MCbqw#E3G{rey_YMFDm9+2!f6F14ZpK+YVL-8?(|YMzMT(aF*W zrxXmvGD8Zab8P_#+0AF5>yq0c0s&|0B^tEG1MFUA$kkby&Eu)A&dg#A* zZ)kcngeF%cff0RSSxv7d>1y$`1{`=tQ2``o5+mB!*jO1Id9J|7r4J~)^G$=qP#h@3 zxOEYb1vKP&uSpO`Vp9+S(bIY033c_6S{>{soGT(|z|No=(||E@fruAvn|iq7zcVp9 z62e-UEgjV*p%{-xEz2HP8x56`PoaIIL`B#pDlDw}eA7O67`}oCaRDO6V*n@JCPFT- zy$YfMNylyC6A(9v5#iB2d2^zKhOC1p4o{nC&x#?L<)SBF%oIv#+U+U#SK!cC5V0kd zUVIc$gyPTfIkRE~H0(cV03gxGfsS#AkPO2U6Vtwt-2>QHJ3Y~9W0h+;lqQiwNb_92 zs0q*svf)2h9dY5iShh=) zQ8QWw_f#Ttc}?U*<f_lUx-A7Bc0xRqizs^RMHi(7_}1sq8+_9K3B0UoZv-V!-WPAWnJn) zXk}x5=)EaK9kPCA#?z=PQa(yROjlolWH^f~CwhY;fv1OvtG|l~(I8hDQi3s6T~+i^ zWn7XPPa9Nv6w2Td%c0SU_ohRS3iK0%Q>!GPid{`6ZOf`ycJ3lt6fw+P;ualpt*|)x z_WJtJr(*}0+0=0~rK+of<{_d^<%nn|!-;xt1@Wxw5HC8u#G3dJAW_^^%tT^bb|v=q zs+xZE+Y1os$IogC<(ODnobn9~Ez-UKRVItbIuH>O$-<-3oGD7Mucqs#=d6uZ=huhs zOj10GXd@A+h@m~-4U~&;qU);edZJ#F2CJ$d$1vMjcC}imYT&CNyX!|UepB%g&z?Q2 ziK3z_g{`Tf^$#bh%NY^ss7=Ja5)d3>`#Ayc$0j!9pZ8CUQqd`O9X{2M8j6^SbOTX< z8&1_7cY4G(<=0kSFA)R^L5o$Bu5pvT6=q`@S(F+_Ixa1UfJ8*ug~<=shbGq8%phY3 z@0;0h;IkHn0$N||iV>6%@m1SqZ5Af{$ zA65>(|MvaT)~XLp6r}gdEKDSb5qSeS&unpSuFV6W0D!nf;OSgrJBa$7XAcoyWNnjF zq)AhdiZ*^Rv23I>0)wfsLk;nzW`CKQxHGh}b^r?%EJrh}>P(1v6bBJnU(7!IZslzA z{`Z@|_AkeT2k?}-{D4?m{IZpsMP%ctL2svHEL!sqRFA<07XFOd*l`7qN zgrt_#SlU>|%_hWLTgN9S$GV()FgEe|{M*A@DX~z}MJ>?GCF}t9pmCdu4nw$zPLWcj zhnow}_wO&B-SbaRxG5WzLO}r%Yrn?RNZbpb>Vo$4X)&LUHjU;CjSD>JI@Y5%dx;nd zKQN%T7!sT7kO?iJuOaI0zxX)2(6-7jj(aB*B`V@fkPryu=rPEFaIlbglbal{uv4Ug zDaBe9QK@xdV_0Dpdl9S&;>`v&*|I=l#s4r}xqLtaW&{wzt09-ntx#tU7KXUrvS1_Uy4qSCt7Jyvc`u1Yk;czIHx!7>zP5g5<2R54}?R!4mPWlOZR zb(!QvtHF0u&dlOsPUuI^oEg1k?YHZHKJwe2*EKVu{#%&8Sgy~M@^3~1R~xC5KmYyn z&vj`~^<(2Q6w}kw!~~TtQ1{k`#&sWoa+`O+974{YCh>$R;~7pS)VYX=C5 zorS4j^h!$4T%P!ntY~9-p0QHJYu(R;iLNyD2}xFbfEVsPT(pnLM7``jtts zTd!?zaJRT?*KY01`~$+t4g#rN2B_zenJ&74NMB^Mt}&J3f)pw`GVNhcKBs-*I(_NKSatQ2TbzJHoWh=(IX3_MDJ6KCSUa-avUxwQ32{r z14Z2!3KIcOgE=B%q_~=Oy?{%lVu}urM9X-Tay^fh#6Z?9qe{Yw4aBnLVTh6g2N*FS z0oEbHAMt3CuoGS0LRj;wSwLe;kZzi_d$o~x^#4((O!wW#qY&j@t8km!JMBsWDEge4 z5m6>z_MLF58PWcpiey*K^4=5>`ONTe)KhoeGL5|hF+V>%G8_$j{z}3N;?aWd98imD zmwy4q5H&Db)X$$Zljy(yic`H3gp@&ntVh-&a@{Tv3)CSZ>iXV+sB-d!w@)sexN^?H zC@xJj9A{W6d{xt$0x{H3P54+66ys5d%05Kdgew*u7|2%QBO?qJVRvfK^$LNPn8Tu5 zYU}H;bf9WF*kJ0dK2`2AM)lTg>0#0AG%QjmhzvrP#sVRjgs9O@rP^;l|H2DEon5$c zF6nsjk>TOtOeV^>LULB>9swdg!_b>37UP*{J_z#BvhOE^h^7uRDzU7W0g~z}narkK zchGf0EE1vyJPoMoIql@5$Yf5d2sW6uuHC6fAXt~gqC1U87O3YD5Qa<704dLXx5@l} zUwsFnlK?5wiG_1cEOl%|fa39DkV;l(8dA+L_%@f2U?U&{*Y_C`(ZZHUrLr+4BJT41 zf*)g!1ZQkk6H09;*Z8Gg`=wE*0x zu|H@tLl=nieU^x1M?-QZ<(J&z?;MQa#XOeD9C4U z2w@T)VG&J-JipIyxn;LQF69|hLTqaR^CGi%IFj;|C8PP7kJChZ;&-5^v&4nSwB^I0h+8 z)Dd$Ma$K%naX@dJ7z|v%lKAH{oF9*(45Et>OG2`+aN@*?rISnTtP{2(GV}epZDxMwlsZkT; zw}6lW2vJ06F$9H!c*Nk=K$ho)LNTrhA@0Xw=fHvI?2>%uj*|=*wMT9&GUbRfPxmB- z4v{TEN@RhMOo-FKs=r#v`b+Q_prxg=3z(D|G)g7?Vw57FChZZKz@zH%UEiaw(gJTJ zd2;-4dOw|wSj;C*g942WUiXp)NO<%nE;z|jlU#S_UDhD2TWv||@~}fhxETsgdx+3` zOc_&y@07BHodr@NkPJ|wpg^jGfTS1_c+|Aa^rgLEqBs$_Nr%b-Ab3V(9^ z8yjbN*cEg}LS#8^H0dL1*hp)(lmKZ*d5lGrBkkw-^yS>5HnlC2M4 zK@!V;HzoJR8>BF$y_9nfA~J%|$mwiCi;<=}b;p`xpBN&EJWKSDfb0PRQ5)a&u_{E4 zf40M8h!7bz(=3*sLJ3qN%D&Ly``)LIoVv38D^Bf{8wtYb!!Df_hL^@`3{Oa5&qr zOM^uBDTYa~Q4tv+g;AR-N#`|f1ep{kyPo9Wyf^NiQ6eNn998)Oj}NF@iPEFT7t5P`(aJb^{((6Ms6R1Mp7n^ekz3{atv zk(2i z9(#d|WI>bkE1P4yeQVS=~s4J{wh}#*C8$ zibw+qq6G=PgyRB~58*KixpoAW9Kgk;`{(7mK$&*;t@BKuX>LeCgdBhdl3F zota{hyJQAyiLuM(aGn?<&Jcav<6-+xq#>66F^aHSN)qvosnOY_5t&UF)_Fc=7p)eSor(L`L z?a{|V#7U(Eii6&f)!n!xlVQ2$%xuV~Vw4dXJvCm;SGhFJ$oWcjt}QIG8|7V9L2#tm z<_&x@7na&(iXHr60VLND#jY$6b#M^`J*2a|6sxY%=ijyoj@@`;WQp`pqL0z8umee2 z;G7Y3FYS}`fK7{2f)tbRbLeH$<}OZDs%;RA=%VSPF$g$`x&8b12ior8C|BC1hst{? ze5a*TFDAw41=HErR7VrFBP`<6W}DI}S5Htc_Sm~j#M~~AI_eS`ECbj@`iL22LT|ab zIwk`e4$2BqHYf&uIm*SV@PU(x)^&h$>HYg5@&kAfHfkHlD4H+LhXtCeDQTQL&VqDO zED=B_#G-JfE=>l#e(Q=k8KZ2_S)$jwF4-0y7U7XFX;=LxnYgbp>a<8J4|A}IQ)+x7 z2#V%vjiQ}%fH#AMVgM0cBbpVWE;M|iC_UUtfm+tx@6wvOBDI{RP!(Ki(di!>(qy>f zPAl8G>+tl5o)MzgjSQ3VM;(I2raZV?6@K$hy=6 z*_G8_)=4mkW<%zY#%2~9Gg)t9d_pf)U`$~$*E$FfDu`EJfftbR$Vidor3xl>h!hDR zb^~RAew>t`=5~e-$D>E2-N8^&FZ3s820|#>!yXj?sS;!SvtK7R5*VB4&8It41kt za9l(ZNTa|E7C;p55~blq!mUKglNS{V0j#{vKNg|{2@fR2QC)EaXkNaWghfiE7FnNq zO>V0rLiE<_R=be2p3>duy_Z@0Cek@`$eLkFc?tnNP`Sb&txRznb%TnmlF-y&lJ4F` z$ByN>1@iALktT0bdsE#~P0cA#?JsClLS+NbSY&B9jvRr=sLNz|c8gUF)62`XT%^Wn zh)0s%K!^I01`LbKdt5gE0G}*~CU=os^ssG|U^OclWDswP>C~V-FPHfB)vExpD-t;j1Sv{`92jMY015%(eMT1~ zQ0M$WyXHRT95~)w{PFnlSr$Iz%-6YzxNi`rJydFv<@s+Sn;igpi*H_!PVamAv-kLc z=7N4vWo2!-!K|ACK{T82D&d@5*Y)dH%@rzADG;KA5UJAg!#G5Rpmb3Ug6aJEqksN+ zNnG*@mWYYw$)?tJ0ut^9fE()IPtOFWm0tQ3@}TPJCml8UFoyY($suU`e} zx8E*Nmclk8{~C4FKC69Qv7&eTFXj1bqgK1T^%qRLq2RGVZ|KhHjhk-%{`+3KUtyx3LX^=&y}_1Gr_7ICX&7yEJTXa3Diu z^zX=%L_oHl9_@z<`;h=`uC}DS-jahzmNutK^IYK9t@RhrA3ekST1rIRRY2&Pls;&P z3hD6T)%CUO@*YC;=%J(MpIu*-z?&;oe2-+u*UNORct7hiut#)ly9OYTRO;V#Bkzdp zM>u!=u~MQ>KmGoDc91O7J{)4f-&0?n8s&*uYe~-DTv@MA@|?B!IjLa%^3G{)cw_Sr z_q)HZezlvGLrOcL#vuWxJ2mlvuh;wf)?pBv&L8^f(4kEQls-K*5-S~Iy1L*?TUvCO3~BJ^JErt3;F$#l1@dOxis2vKOx|_w}vtCPg~>)mMjpTVCfb zNG=f~*Ub*-l8v>R%=cgW>$2t`S*ABVM3`?W5Keu5H^2sL6nlOkwjRSFN-@jawey8FQ0w(6s74hC5xTo^Uwbq=oL1I zpfONAq%*iY^!Ot$Ke}(3iYUby2>+5U%e9BObFG#T{HC=@0YQ6U5A7A`&v}cfp z9VDQrI$-_*vi1-5U6;Q4f5sLtl>WD#xW2KA7 zCx!yPb4iQX|tyc;=hshg`)ibX>0Mu`Z)rZ)8t_QUh+Gh`!4 z-uw3+Ui_%|OxsemTFuJoo>h=ILv%Y2Hu-|-+FL)Ot#B66!q&$tQA0#u1z{&dkBk+c zr63*8Ta_guLrSlk;S}7|61{7G0Mul9Og9J?r3r}Mc?YJZ43S(KH_V=tX<#4}sV_GQ zQ}=NO-!qzy$+>iTjGvfT-FW6gA*wEzCIjMo8X_`x;{%csEhzN|0Z}*)(dt8T*9SC} z(nGgSy-z$4b51*fz@!i&h10N;b(#JLPD=!wAwoNeKvEhdLJ5fS;T7E#K&U+;mrN%W z9$%_2Q)J2AJy%0CTC2T!;Y_@`vf`UFHAGWa0TKwLYsXfP1wKly+qz3;LcG5^y_Y-p zeTqaweoV#?>L6tDYr6xGC=;)6{I3<|6GPPC`9~rYP{9>qmorg_kRcizh(zm@O$of^ zrQ-lSJKWKE%e8w?oG7loe_?;6y7K1Mu>j~;5u$BKcmz@Q?8NZ#%2uTN!jr3aa5uYG zkf>yP?iizzmC8Z}MJtdh6b=v4ZvEt&PlSh!6796;>HD63`e}#)Bxr=HUFY9N69!0$ z1_!LDmj{V@ihCpG?2XAd= zZFT*yBE3axl{?t6DXC=JC_w`WSAkR>NrZd9PecHHvYQ7WUICGTGDLZZtSUqX$RG{c z(eR8S@i2#nejQhKUORsH@QK_k)AqX~TP-Ajs=h`YZMwdI=#FC$ZE0*O5c3Y)!3#h8 zXiEDWAbN|wRYvDde0~dLHKV{Ywt0=ul>T$YacBhM#iL0=~1WIKqWgkV|gBDK$WPnl1qU8pe!w-07!TO zB2|E-M1$dK%nCf>o4~W<@sgxG=EM&}bS*^Vm^3AEm-m=Hb@$rJ$_n%Kwtl~(@9Oz^&|-^VBh&U5@Bh@{x>UmrfX6s>}7X79||?cJ}Po-Ix=hK@m9`}Q@7SWTmCFduTf zjQYdjm8cq()Ub^QqQIMgsL2x`EkQI>jb|LIK@`f^b_t|`b}O2U;Gkr>E4udY-N%EW z@$tijNrpgPOy$1DjLMa8rT%{Ip}pfgrX!r@=l8BJg0^q(;n9irm%^9?5K0Ujf4^AF zl}{WVXP#Ks)k4G&p|Q!?;Y0oTknLF#8Rnxz)fp{F-^wdMQg;G9-XPj;(-P-gs;(p~ z&o-4&DPvo92r_%_y=c;rN%54UF0MR8*l?H*tI5w^d-n5^<9YS^XK$28bI%(co@X<^ zzAicB;K4WESgL!mwfF2yX6ExZPEL-L51u#-Q72DxA-Wc#TSul&9?yp|t`mX;duI3` z$4@U&h`;~jTYz|@-4+4#_~YlCd+tsosY@XWN%CwGWfB0*z30r$RpM^`LT09P=t&Sz zAPLj(NUrdPsC@96gSmMbF=?Rq)AQ@=@C;pZ%@E^*1?f*n0<~a_V1md1@op5S77;f`a}6ZL znp-3L$sa6`SRAP1Du_T*lgQ$@01iCYT{HUJSJRU^!~&x7$Q?ZD$_-tI_*C855PKU*E0HpZ zh7`yUN#{2>qAnIss%_d7Uqke|=S7TPILc$8(Q5)CH3=Zo`azft z6Z6H69zAVkY|lv$-6nIJf)t5ap^9Ip^#u`X0D%O;e-SBCBiAJp1Bzt1kpv9xn`^c? zMu=^qQmIcJpd@YcNP$!bbFYu}GCT!=2GIJ!>l)fYWN;8cci_P6Mm=Lm<0m9YCfX(V zJl7`MRj3Pp7N8c@E}$nKf8v~T@8^Yr;sg=(QPox=>~|cyJ+tji-;V z16F7jqHRD*1d!3|w;o;HbQEad%&%tvG2(z$M9LIlbDZWksiCQ}Ng6l^B5<}LNh_$k z;z!$CO4v?}W@FQ%Qb?_f)TerH2#8GBQR;zGr1jTTM+!}Y1h*M;JBc0w=(OuNE;r%% zGuIiD43KTp27@S-`W%mT5E+{0R*CKp)I>TXOWgRWj8;UdP$J@5`Uepn8RzP?*)D<( zB1zxWK%DKwNEt5#sW7of0UA|819_0@%H;0y4x($v0P6lgb*S|vI|fA{gE?==9}iYK;gp+QOtq*K{o1lD+q2$e^Q1vLX5EaXPZ zEuL#gfyI%s0SY`4o+FE6M{B2JSmZ?J=4`oQ=D_%q(IX}@8Mi7#p9&F7!UGWmyNDh> z+a%-E9_gE_XHywN#GYxYG8H2@dgxHX5ga$!0 zGCf&PAY)M@GaNaxIK8@&41121fMG6TQ*0E2JgY#8=7EHFv}Ppfx;#2EIZ_C4RE5#pFg)30JeiC} z=wG*i;A4AXFJfm(5ZSDWlu0CT$PW9yw(Gw9G9W_#OazW@j8kgaU;W)Y?yvjVq(fyy z7*J~TknDe{0-^$;k{jg;CsV>Sl50SLG&wv1A`qN@Ze)0pyQi|S@NOtKFfXO|#)k{4nVxCIg2>0UhQIgX_5uqx)c z5i2psQ{HyVlcbl4IHV;`1RjHgpqi3mG{GANzA=goFn2Hku~()qA6VsKdDa)8bTlUW zjYJ#|gGdRyR1qAbE$&v5zVFASqxaP>e+r1uSwxr<5W&J*UV;8P!)Y%iSKPTd4&~sF zeVj|7gYY9NTu-Sg;cPZY(JQlurA2EOY+CKFc$|4W z?7~8}mU#2z`i1#*3|h9;C?@^<J=>m62fQ zk|m=RPQtT<7?a#6;e*5^JYrSs;Spm_;MCZaJqD=v%3iU^Pg6XSVNM$-Vo{nw77}+n zXrfRO@evR+AZZ8Wt4gFU1xydh>%m<_fs9v%DD6tKF;TJ&Q3EScvWSpsIz=|1oVgsB zB9KgHeS<{M(eDP)b}btgn)R}gdxgiUeJl5|PLiQN(f;V?9y=+#Ql?U}LM*fydE ze|qr22bBmG1dx7I5bczPphVrK??FT^1*A#E|M3HnCEXlwo2UNU0!t z8Hn8)V!V3Y50e)xspAZgMN;U_!zEIvv?Q!}I2NlIB$yUHILZJyNz`bVx6vX~Ul~-Q zKu1|#`dC(T9hF@itgwg8R00IEP{^^CmMmi4j;yUg6!nvN$qe^`0}tyZ{rTOOVC|9; zf%LMz&emVtBQ5#Kh&XSxR2uAt$g+)T8K5-U2te`?NSq`dO*31+S;4AP0=C%I!y+k| z)N#duqpX-sZs6Y$xoJ&zaIu%L8)4rxfe5*JorB}sduwyHoAkqjhUk@he>(Cr!(?xK z_0NAN3Un3`-6x-?eAj|Vk#u9v5OsX<*47Cxh0=iI>@+XbhI2V?RjFEyQHVFFig^&BAXeDxQX zBywGIAXNk+2jP*lC%mLDUBri;yZ2szXr9S~XI7B<^OXl5eC5GcUg2vO(Qc-pZaN!M z*)T|YsM6qI39#Kf^7pP6RVH+-Hc=QYH*a7K7Y(6YrxG!VrSF!WD@hU^6eSWKqG1<} zx#9?iL8eCMCju~JOKOk%ex;wpaO&RcU-?mZ+MP;dQ0pfIkYR$3&p8)7`lw*A*(OZl z)_ge)(wrnx$>MC!2I5Chq$dDuV?PBLYF{>eFY=Jsp}I2v>N> zEM!bf5*)-vyvZai5;qMJKTBSapu6e%BhQe8m-n1st+ImojeoX?kYKTa2tlQrmPiz0 zQulJoPsZdxaPd(Lxtfqrn^O^*rYt-Z1wq;vo>*Kg7@8Il8ts(HJuLOqC%UDp<3Mlk zY%Qy;Z$xH+3n+n6;f=}n(xD?a-E`_jE^~g*o?m!Xm)b}U|3Gw}5CsD1ZG}>#Zn1b% zFTYW`Do0ijjTGe+Ac#_0y&hYgEK`I6AfvL(weQ-04@)xi$eKtUtW9$TE^S~EGDKK~ zU9$U%?zd4mlgj{IJb(R7*U#UGMN4~r`GxoSm43P%FzMc%M7M1Ndi&A01EfP{F}eKb z%k?yQ+2^Q`G*yXtzz7QF=%MvqqL!mSXqQLj^)8+t@4Kf@7Jp;0icTiLUP0ik);7|{ zANi>J8pFt>8b4Xj%ff^&p1SC!BZs)e1JEFdsG)xRNfJ8xHzI(VL~mmjE+H9Cya|p( zglCMA=CXzaD9CtdplT<}B<~hZtLHAqIv{w&Iv^~^!Xi~nyzh|(;CKjTppuHD5HRUkS^jzM_2d(k96dzMer<@>@bJa zY9FOUn(Kb2524&LDCkfvKO#i3kXWbK#4XKiN~An4k4H;M!HFAz zBtQ^toE#~R3_-EoBzjZ{JBV&zD?~TQk}sXTS6tQCqc?%m)6=uFt4QE#h;C!*?fS(4 z9eVM|shcl7^&)6_@BH0F0S|&mfRrgfYU!!BpZe_#RT@b=CAm#_;!!K#*1wdd*)192 zY#`nn^st&<;%$k6p9+tV8LsUzM9lPOEtD;=c>K?y9`nnlXF zLLC17H(_TJDpMH7aSO#lSCS2-Q=^$0BO{LF$j5AE7Lz%Xh$Nq>YmASHlBC+PDMl&wHc%2f`B2lgW&L*(KTL^v;Ey4XU= zM<00Hh+1&-JwP{bg5#}gpP#>b`tIKRd-J)%%9E=%{z(LmQV9Y?mPcZCl_2T+qQuOX zU*0)&<{&FdgS3+^jsl5Fv_YB7M8>dmD;>wimx?&`sncaJebx|p5r%p^ZTP}sdFKU6 zxCBJCc#wpRnbszVj+#ZZ@JW@b`26crtl;n6(}RcWAJ_eh$c8dliBzL&KPunVV7wC? zh#wIkK9YCllBAs-75CShEUhUNHZnrw`-M;ZW6gAS;^g@VPJ_}yFl4-rUxOopeObP}_b zRXF$(Iz9UO%qeID2_BPobemv}9zS#H*PHr;XVVcz z{#-X5kMoRs$VEn6svvUpDWOIktG}@aH&6&0k7{GQN#1=ucW%+*uREx8n|^nA^au0v zoVgnz8bGo{AZh%Vovl=65sTCCXBS7g%)%r<b$tbib{-+=lm{HD0|lKrE=62c z(`TG*YdpSnqI0ihg81Y+*p0SL8{)25*PUjTf`ntF+MLV zsXndMff0b|DnMMc9`m&8R}A-&=*DJ}uFE80iHJTTtB?{&tS2g5Z&^kVsXoWRI=1&9 ztvTgE(r)zEc*!XjGOH#g+C(Shc1zX|LS&}N@lkagaUp{!C3Y~5jKD~#D8-^dHz9vY ztTiIqPSl^^FDSV_W{4V1HdSYKaQ05gU=l_} z_#g`jpd+K7eGIM(Co)&A7?Dm~smY&)Iy3!xCkyMQ1sWMn1d`?1y}LK(G?Zxd>L1cU za7p6T1(z?sl*`lhYK7@~lP=18m*85(2!gl6?hy^KV>rL@IBF1Gp)h5_l9ERiy`i=I_z zfC!|@7)b4qB6Mf;IP2-l)a~1o*+wAfx?v7`3PQtoC8`z5o=m-_Swz@Uuuen+Y#iNRe$fcfZrNcuABC&^U)qHUaZq3Zd%XBy0ya5l<0kK3djR=utvSL{t zn{ogt5lFL{?<`g+sj_G}OlD0T|H-{OpQCN@*Q6=SUAmGtJVe2lBOnHh#2COBZh_}8 z@eEQVt!|%GJ?u=01QmgWm138RNTKAkymt15&-5>rZ&>wHnq;%I#UhPZCU`87l61ar z+ilB2S0D?dOqEK8z@v^rK_fo;Woo)!F1y7ThOR-W$bOAe;My zp_h~UR0N3-pkRQBGYQ%|5e=io02&3FGp)&N*>`X|k#v{;$6EkF1d}4^k3)$Jl@V!R z65l8q1c=jtSDMmt#+SAD-pdYsHEs&gOEg9*tTKm;9($m5Vtiiv&9gh*GYT ztL2Nr6VU^_r6Fdw#X?txEY7B}xxx5^Q@t{#zO+NtNm)+|zu#u}w}gOcfM}$L$l@r{ zw!yMsh?GY@8jw|tPskN=?EWR1!mdE{zPii(1 zhRA^kvxn2CDJ+tpA#s<+nKa2Ui<{h2S9j{Mn-9OiBS1?4BH9%F8WGB31ESutU~m*j zkyhA1BuddFK>K3RnBWizY*>6bzt7jQzEixbuA|B%2J=w?qHIG15-BGd;cjVWXwAY( zQM(-_@_o;*(h33e{lU>ChR14Tu_Ssl5~OZygGix<69LqLlC-1Gulq%|HN~}tNE)|L z*~fqfAg{Rg06fN5P@GL7bldU=NK8R0M$w2}D?6k}JAib=R923XljWt&tO~T?_Cv)n zOopfnWwAC}je5#mM<7e2F+fCAWDGa&m#~~tJ5Clpy|wrW!;~%fAq=qFKx(NIrx;+L z9UveQ6&d|6VXP***kCH$seDPUuXI5gO#Skg0Mw0sApP{Nquv5;75WE|O}rl&-HKsF zhs*VHL$oWZ=T{!yV7Wk$FLr<+ipM3j!Xbc`=H!V7plY8AFS0qj>l_I)SH_(Ty?w@8 ziz(bpjrA(jhh%v+|D{onOxtW2ARAU9OSEc%z7jQtGNt93bGz7|dZ!66h~U{WGBoQ3x`lSbFjyIW ztbyo>k1hAE5<45?&P!o%KvH{NL#d!b1Q4~&TMAJlTgzrUK-u!rTujH`if#xFn53H! z1A5Ps*KBYiWNGvRkp;1_W%Fh<+HN!&x{mrKvRP+|zHcx@yW$uR3lKzcL=qsBC>k7U zf_hca{m8X708z4$E%2<3;mKATI5=6_k|5GFj z)Ta?hmI#fe#j7PA46_eVpaff_kP>;tj=3A2aQu!+q(n=T<8^>EvO<(&?5aH(5@wH^ zk_al1(@zA@a3a=`A+pP8D3NV}x=aA|WZk%%VAoT+D*tqy)pfPnQ5rDhK`IUnP9jJw z7_t-!LWe97DwH}sG8n{1;H4-8>f+*%C5!zF9Nu3L(=DW*bFSQ*oA*M#-X|pfz|TGB z9`8NiIgZG;QhLK+kTMohSE4sQb8-?;pGn0RCPZ3riqiM`yEw|kALmWQFmQ?8dt~l= zM&u3#yfdmXV0k^)?@>?gqz z@mX5@#m<@4LIbFckH;VATzPDPWK$gphYF^CGP?M8HI)@6?vKusXj*Aqp9s_1UTZ_`$D`y6zzHR3LNxKh`RF5T{5HUmFXTXLb zw9FZCAw`s7A}=z)VlE5B0Ow&~NC&$dE2*vZE@w%fRE-FnSR1*7^T8F%L;8<(IOiBq z7?%$1(y+@H2h`F0pf^zUlR3q(?9qSw6d+F!Wn0N3a{D_aN-ZOJyvU$HySbd^@T9-b z`OJKxo@N91pU!)<7j-)E)pQU@z75Bc_A?|z+soxrF3BVRY_`o?gdz1!P5(55%o9U7 z*IW$v#i$V zs@M1H`R4ZOJ)C9EPto{tf`NP>yJuize#0VvA?+xUk;Ab>9?&jUk_^8gK!&E>XsGF+ zG_yWSlEifL)5F`>Iuexqm5zR$QFP4;i(lR>L^W_wiYVLbGKscQMCsFnHIOi&yRIgP zIL;yplr}!!-&dF0?<}S^8?z~~b%4rsE5lTujL!%KOB|2hFq4}F98MmO-PdvXKxrZb z(N4zsm76t@W5Pl?WxBnqb{nhTBvpCO7RSqM7Oc`=u;;WTxS8xc_>hx)}~V zoJ<=%{e6@Jh~Yw>BEjPmIX!SWLE@$=6mE?QhX^8=Hmgku0OUc9+U;d?{OPEyawc+2 zxEXh~8s5geRd%RLuOpA>p)3u<^EY40V+B&-kYQ9Z`f-ow7_!nP=~P&ZJg;+5MvG^G zUT{50gh2A4-fn?XEGkbCnw%~gKPE6Nj+Fy4Ormd2<>!bNI);ydYThz>1rSOD{V&X3 zZXyPPAPfiMAhcnz+q>ILqeu;S8P6QDgCg0slgvo)^v#rFI#pGNVI4joRiHsdRbu~Ej zv&JB|lRiLAL?qe-x{g`Y5wW9cl*yx|Qw(Cpj*irkHx9}I&F>2q5qU`V&<{hJL>7yf zu_0+f^io4g_HYh^)KR|2jpL+sVd&s?W zhb}qwGkMO3xS}q?aABgRyB~qd=caLbLl!;H#~^jYQz{~>q6K2ceilWZCVJ?*e-UO} zHBljK#cVmRV~U#-a2BGL5K_@2K5_mm!W&Q$TxL(aPSq+rK(vNrWW*NRDe`bE{UgY zUBBq!b!QI@-RvPU3k>tO$jw|7W{S3rQ