From 1a16aa2bdd4519abfceddbf8b0c369bd7cc57360 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sun, 17 Jun 2018 01:55:26 +0300 Subject: [PATCH 001/737] Fix example indentation in the Unit Testing Vue Components recipe (#1683) --- .../cookbook/unit-testing-vue-components.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/v2/cookbook/unit-testing-vue-components.md b/src/v2/cookbook/unit-testing-vue-components.md index f990e5763e..7bdfa5aae2 100644 --- a/src/v2/cookbook/unit-testing-vue-components.md +++ b/src/v2/cookbook/unit-testing-vue-components.md @@ -149,22 +149,22 @@ import { shallowMount } from '@vue/test-utils' describe('Foo', () => { it('renders a message and responds correctly to user input', () => { - const wrapper = shallowMount(Foo, { - data: { - message: 'Hello World', - username: '' - } - }) + const wrapper = shallowMount(Foo, { + data: { + message: 'Hello World', + username: '' + } + }) - // see if the message renders - expect(wrapper.find('.message').text()).toEqual('Hello World') + // see if the message renders + expect(wrapper.find('.message').text()).toEqual('Hello World') - // assert the error is rendered - expect(wrapper.find('.error').exists()).toBeTruthy() + // assert the error is rendered + expect(wrapper.find('.error').exists()).toBeTruthy() - // update the `username` and assert error is no longer rendered - wrapper.setData({ username: 'Lachlan' }) - expect(wrapper.find('.error').exists()).toBeFalsy() + // update the `username` and assert error is no longer rendered + wrapper.setData({ username: 'Lachlan' }) + expect(wrapper.find('.error').exists()).toBeFalsy() }) }) ``` From f55d69362a60766b7b038acc00a3f58c4a637d31 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Sun, 17 Jun 2018 02:01:14 +0300 Subject: [PATCH 002/737] Update debugging-in-vscode.md (#1662) --- src/v2/cookbook/debugging-in-vscode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/v2/cookbook/debugging-in-vscode.md b/src/v2/cookbook/debugging-in-vscode.md index fd2f0eb5af..9e9751c838 100644 --- a/src/v2/cookbook/debugging-in-vscode.md +++ b/src/v2/cookbook/debugging-in-vscode.md @@ -53,19 +53,19 @@ Click on the Debugging icon in the Activity Bar to bring up the Debug view, then 1. Set a breakpoint in **src/components/HelloWorld.vue** on `line 90` where the `data` function returns a string. -![Breakpoint Renderer](/images/breakpoint_set.png) + ![Breakpoint Renderer](/images/breakpoint_set.png) 2. Open your favorite terminal at the root folder and serve the app using Vue CLI: -``` -npm start -``` + ``` + npm start + ``` 3. Go to the Debug view, select the **'vuejs: chrome'** configuration, then press F5 or click the green play button. 4. Your breakpoint should now be hit as the new instance of Chrome opens `http://localhost:8080`. -![Breakpoint Hit](/images/breakpoint_hit.png) + ![Breakpoint Hit](/images/breakpoint_hit.png) ## Alternative Patterns From 912d564e694995524e6f66aa60ac2a66860a3fe4 Mon Sep 17 00:00:00 2001 From: Kevin Young Date: Sat, 16 Jun 2018 19:05:04 -0400 Subject: [PATCH 003/737] Added link to vuemeetups.org to the ecosystem drop-down menu on website. (#1685) --- themes/vue/layout/partials/ecosystem_dropdown.ejs | 1 + 1 file changed, 1 insertion(+) diff --git a/themes/vue/layout/partials/ecosystem_dropdown.ejs b/themes/vue/layout/partials/ecosystem_dropdown.ejs index b81da2dcfd..5a137e774f 100644 --- a/themes/vue/layout/partials/ecosystem_dropdown.ejs +++ b/themes/vue/layout/partials/ecosystem_dropdown.ejs @@ -5,6 +5,7 @@
  • Tooling

  • From 4fe97c474286e59b9801d7caf3c19e4618d1effe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E7=BF=9B=E7=84=B6?= Date: Sun, 17 Jun 2018 07:27:02 +0800 Subject: [PATCH 004/737] Correct mistake of Migration from Vue 1.x (#1686) --- src/v2/guide/migration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v2/guide/migration.md b/src/v2/guide/migration.md index 60c4ba7e8f..9802143ede 100644 --- a/src/v2/guide/migration.md +++ b/src/v2/guide/migration.md @@ -364,7 +364,7 @@ computed: { Or with component methods: ``` js -template: '

    message: {{ getTimeMessage }}

    ', +template: '

    message: {{ getTimeMessage() }}

    ', methods: { getTimeMessage: function () { return Date.now() + this.message From 171e1985775baea7d3b5f13643ea3584a10f572b Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sun, 17 Jun 2018 16:25:54 +0300 Subject: [PATCH 005/737] Fix code style in Form Validation recipe (#1682) * Fix code style in Form Validation recipe * More style code slight improvement in Form Validation recipe --- src/v2/cookbook/form-validation.md | 139 +++++++++++++++++------------ 1 file changed, 82 insertions(+), 57 deletions(-) diff --git a/src/v2/cookbook/form-validation.md b/src/v2/cookbook/form-validation.md index c525dd5a81..0832c632db 100644 --- a/src/v2/cookbook/form-validation.md +++ b/src/v2/cookbook/form-validation.md @@ -54,19 +54,28 @@ The final thing to note is that each of the three fields has a corresponding `v- ``` js const app = new Vue({ - el:'#app', - data:{ - errors:[], - name:null, - age:null, - movie:null + el: '#app', + data: { + errors: [], + name: null, + age: null, + movie: null }, methods:{ - checkForm:function(e) { - if(this.name && this.age) return true; + checkForm: function (e) { + if (this.name && this.age) { + return true; + } + this.errors = []; - if(!this.name) this.errors.push("Name required."); - if(!this.age) this.errors.push("Age required."); + + if (!this.name) { + this.errors.push('Name required.'); + } + if (!this.age) { + this.errors.push('Age required.'); + } + e.preventDefault(); } } @@ -122,26 +131,33 @@ While the change here is small, note the `novalidate="true"` on top. This is imp ``` js const app = new Vue({ - el:'#app', - data:{ - errors:[], - name:null, - email:null, - movie:null + el: '#app', + data: { + errors: [], + name: null, + email: null, + movie: null }, - methods:{ - checkForm:function(e) { + methods: { + checkForm: function (e) { this.errors = []; - if(!this.name) this.errors.push("Name required."); - if(!this.email) { - this.errors.push("Email required."); - } else if(!this.validEmail(this.email)) { - this.errors.push("Valid email required."); + + if (!this.name) { + this.errors.push("Name required."); + } + if (!this.email) { + this.errors.push('Email required.'); + } else if (!this.validEmail(this.email)) { + this.errors.push('Valid email required.'); + } + + if (!this.errors.length) { + return true; } - if(!this.errors.length) return true; + e.preventDefault(); }, - validEmail:function(email) { + validEmail: function (email) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); } @@ -197,29 +213,36 @@ Note the set of inputs covering the five different features. Note the addition o ``` js const app = new Vue({ - el:'#app', + el: '#app', data:{ - errors:[], - weapons:0, - shields:0, - coffee:0, - ac:0, - mousedroids:0 + errors: [], + weapons: 0, + shields: 0, + coffee: 0, + ac: 0, + mousedroids: 0 }, - computed:{ - total:function() { - // must parse cuz Vue turns empty value to string - return Number(this.weapons)+ - Number(this.shields)+ - Number(this.coffee)+ + computed: { + total: function () { + // must parse because Vue turns empty value to string + return Number(this.weapons) + + Number(this.shields) + + Number(this.coffee) + Number(this.ac+this.mousedroids); } }, methods:{ - checkForm:function(e) { + checkForm: function (e) { this.errors = []; - if(this.total != 100) this.errors.push("Total must be 100!"); - if(!this.errors.length) return true; + + if (this.total != 100) { + this.errors.push('Total must be 100!'); + } + + if (!this.errors.length) { + return true; + } + e.preventDefault(); } } @@ -237,16 +260,16 @@ In my final example, we built something that makes use of Ajax to validate at th ``` js function main(args) { - return new Promise((resolve, reject) => { - // bad product names: vista, empire, mbp - let badNames = ['vista','empire','mbp']; - if(badNames.includes(args.name)) reject({error:'Existing product'}); - resolve({status:'ok'}); - + const badNames = ['vista', 'empire', 'mbp']; + + if (badNames.includes(args.name)) { + reject({error: 'Existing product'}); + } + + resolve({status: 'ok'}); }); - } ``` @@ -280,22 +303,24 @@ There isn't anything special here. So let's go on to the JavaScript. const apiUrl = 'https://openwhisk.ng.bluemix.net/api/v1/web/rcamden%40us.ibm.com_My%20Space/safeToDelete/productName.json?name='; const app = new Vue({ - el:'#app', - data:{ - errors:[], - name:'' + el: '#app', + data: { + errors: [], + name: '' }, methods:{ - checkForm:function(e) { + checkForm: function (e) { e.preventDefault(); + this.errors = []; - if(this.name === '') { - this.errors.push("Product name is required."); + + if (this.name === '') { + this.errors.push('Product name is required.'); } else { - fetch(apiUrl+encodeURIComponent(this.name)) + fetch(apiUrl + encodeURIComponent(this.name)) .then(res => res.json()) .then(res => { - if(res.error) { + if (res.error) { this.errors.push(res.error); } else {            // redirect to a new URL, or do something on success From 779c5d5d332a645ed38c9e1d6beabe96fd0158cb Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sun, 17 Jun 2018 19:21:31 +0300 Subject: [PATCH 006/737] Fix code style in Client-Side Storage recipe (#1690) --- src/v2/cookbook/client-side-storage.md | 37 ++++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/v2/cookbook/client-side-storage.md b/src/v2/cookbook/client-side-storage.md index ffeb70fb77..364e67dbbc 100644 --- a/src/v2/cookbook/client-side-storage.md +++ b/src/v2/cookbook/client-side-storage.md @@ -22,12 +22,14 @@ This example has one form field bound to a Vue value called `name`. Here's the J ``` js const app = new Vue({ - el:'#app', + el: '#app', data: { - name:'' + name: '' }, mounted() { - if(localStorage.name) this.name = localStorage.name; + if (localStorage.name) { + this.name = localStorage.name; + } }, watch: { name(newName) { @@ -75,12 +77,16 @@ Now we've got two fields (again, bound to a Vue instance) but now there is the a const app = new Vue({ el:'#app', data: { - name:'', - age:0 + name: '', + age: 0 }, mounted() { - if(localStorage.name) this.name = localStorage.name; - if(localStorage.age) this.age = localStorage.age; + if (localStorage.name) { + this.name = localStorage.name; + } + if (localStorage.age) { + this.age = localStorage.age; + } }, methods: { persist() { @@ -106,7 +112,7 @@ As mentioned above, Local Storage only works with simple values. To store more c

    Cats

    - {{cat}} + {{ cat }}

    @@ -122,14 +128,14 @@ This "app" consists of a simple list on top (with a button to remove a cat) and ``` js const app = new Vue({ - el:'#app', + el: '#app', data: { - cats:[], - newCat:null + cats: [], + newCat: null }, mounted() { - if(localStorage.getItem('cats')) { + if (localStorage.getItem('cats')) { try { this.cats = JSON.parse(localStorage.getItem('cats')); } catch(e) { @@ -140,13 +146,16 @@ const app = new Vue({ methods: { addCat() { // ensure they actually typed something - if(!this.newCat) return; + if (!this.newCat) { + return; + } + this.cats.push(this.newCat); this.newCat = ''; this.saveCats(); }, removeCat(x) { - this.cats.splice(x,1); + this.cats.splice(x, 1); this.saveCats(); }, saveCats() { From 9969aad615d4c7c0608e95ca2a981fb6bd068332 Mon Sep 17 00:00:00 2001 From: "Bruno J. S. Lesieur" Date: Sun, 17 Jun 2018 18:24:19 +0200 Subject: [PATCH 007/737] [Doc EN]: `typescript.md` (#1679) * New in with + symbol Signed-off-by: Bruno Lesieur * Review of 2.5.0 doc Signed-off-by: Bruno Lesieur * Review Signed-off-by: Bruno Lesieur * Fix syntax typo Signed-off-by: Bruno Lesieur * Add space between new line of documentation Signed-off-by: MachinisteWeb * Add @posva review Signed-off-by: MachinisteWeb * Add french str Signed-off-by: MachinisteWeb * Change directeur to director Signed-off-by: MachinisteWeb * Fix EN doc Signed-off-by: MachinisteWeb * Subtitle for typescript.md Signed-off-by: MachinisteWeb * Revert instance.md Signed-off-by: MachinisteWeb --- src/v2/guide/typescript.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index 80a13033ce..b4d7723208 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -35,7 +35,7 @@ See [TypeScript compiler options docs](https://www.typescriptlang.org/docs/handb ## Development Tooling -## Project Creation +### Project Creation [Vue CLI 3](https://github.com/vuejs/vue-cli) can generate new projects that use TypeScript. To get started: @@ -47,7 +47,7 @@ npm install --global @vue/cli vue create my-project-name ``` -## Editor Support +### Editor Support For developing Vue applications with TypeScript, we strongly recommend using [Visual Studio Code](https://code.visualstudio.com/), which provides great out-of-the-box support for TypeScript. If you are using [single-file components](./single-file-components.html) (SFCs), get the awesome [Vetur extension](https://github.com/vuejs/vetur), which provides TypeScript inference inside SFCs and many other great features. From edbbf1a4a01a50492da9bcdf8f49b999ef2d58da Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Mon, 18 Jun 2018 18:48:47 +0100 Subject: [PATCH 008/737] [cookbook] Dockerize Vue.js App (#1483) * First draft with 'Simple Example' section * Fix typo on Docker 'build' command * Fix copy of multiple files * Remove unnecessary whitespace * Fix typo in webpack template link * First draft of 'Real-World Example' * Update 'Real-World Example' with multi-stage build * Add 'Why Dockerize a Vue.js App?' section * Rename 'Why Dockerize a Vue.js App?' as 'Additinal Context' * Add 'Alternative Patterns' section * Minor fix on 'Alternative Patterns' * Fixed typo * Update order to avoid collision with other cookbooks * Clarify why NGINX in real-world example --- src/v2/cookbook/dockerize-vuejs-app.md | 134 +++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/v2/cookbook/dockerize-vuejs-app.md diff --git a/src/v2/cookbook/dockerize-vuejs-app.md b/src/v2/cookbook/dockerize-vuejs-app.md new file mode 100644 index 0000000000..3491268038 --- /dev/null +++ b/src/v2/cookbook/dockerize-vuejs-app.md @@ -0,0 +1,134 @@ +--- +title: Dockerize Vue.js App +type: cookbook +order: 13 +--- + +## Simple Example + +So you built your first Vue.js app using the amazing [Vue.js webpack template](https://github.com/vuejs-templates/webpack) and now you really want to show off with your colleagues by demonstrating that you can also run it in a Docker container. + +Let's start by creating a `Dockerfile` in the root folder of our project: + +```docker +FROM node:9.11.1-alpine + +# install simple http server for serving static content +RUN npm install -g http-server + +# make the 'app' folder the current working directory +WORKDIR /app + +# copy both 'package.json' and 'package-lock.json' (if available) +COPY package*.json ./ + +# install project dependencies +RUN npm install + +# copy project files and folders to the current working directory (i.e. 'app' folder) +COPY . . + +# build app for production with minification +RUN npm run build + +EXPOSE 8080 +CMD [ "http-server", "dist" ] +``` + +It may seem reduntant to first copy `package.json` and `package-lock.json` and then all project files and folders in two separate steps but there is actually [a very good reason for that](http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/) (spoiler: it allows us to take advantage of cached Docker layers). + +Now let's build the Docker image of our Vue.js app: + +```bash +docker build -t vuejs-cookbook/dockerize-vuejs-app . +``` + +Finally, let's run our Vue.js app in a Docker container: + +```bash +docker run -it -p 8080:8080 --rm --name dockerize-vuejs-app-1 vuejs-cookbook/dockerize-vuejs-app +``` + +We should be able to access our Vue.js app on `localhost:8080`. + +## Real-World Example + +In the previous example, we used a simple, zero-configuration command-line [http server](https://github.com/indexzero/http-server) to serve our Vue.js app which is perfectly ok for quick prototyping and _may_ even be ok for simple production scenarios. After all, the documentation says: + +> It is powerful enough for production usage, but it's simple and hackable enough to be used for testing, local development, and learning. + +Nevertheless, for realistically complex production use cases, it may be wiser to stand on the shoulders of some giant like [NGINX](https://www.nginx.com/) or [Apache](https://httpd.apache.org/) and that is exactly what we are going to do next: we are about to leverage NGINX to serve our vue.js app because it is considered to be one of the most performant and battle-tested solutions out there. + +Let's refactor our `Dockerfile` to use NGINX: + + ```docker +# build stage +FROM node:9.11.1-alpine as build-stage +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# production stage +FROM nginx:1.13.12-alpine as production-stage +COPY --from=build-stage /app/dist /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] +``` + +Ok, let's see what's going on here: +* we have split our original `Dockerfile` in multiple stages by leveraging the Docker [multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/) feature; +* the first stage is responsible for building a production-ready artifact of our Vue.js app; +* the second stage is responsible for serving such artifact using NGINX. + +Now let's build the Docker image of our Vue.js app: + +```bash +docker build -t vuejs-cookbook/dockerize-vuejs-app . +``` + +Finally, let's run our Vue.js app in a Docker container: + +```bash +docker run -it -p 8080:80 --rm --name dockerize-vuejs-app-1 vuejs-cookbook/dockerize-vuejs-app +``` + +We should be able to access our Vue.js app on `localhost:8080`. + +## Additional Context + +If you are reading this cookbook, chances are you already know why you decided to dockerize your Vue.js app. But if you simply landed on this page after hitting the Google's `I'm feeling lucky` button, let me share with you a couple of good reasons for doing that. + +Today's modern trend is to build applications using the [Cloud-Native](https://pivotal.io/cloud-native) approach which revolves mainly around the following buzzwords: +* Microservices +* DevOps +* Continuous Delivery + +Let's see how these concepts actually affect our decision of dockerizing our Vue.js app. + +### Effects of Microservices + +By adopting the [microservices architectural style](https://martinfowler.com/microservices/), we end up building a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms. These services are built around business capabilities and independently deployable by fully automated deployment machinery. + +So, committing to this architectural approach most of the time implies developing and delivering our front-end as an independent service. + +### Effects of DevOps + +The adoption of [DevOps](https://martinfowler.com/bliki/DevOpsCulture.html) culture, tools and agile engineering practices has, among other things, the nice effect of increasing the collaboration between the roles of development and operations. One of the main problem of the past (but also today in some realities) is that the dev team tended to be uninterested in the operation and maintenance of a system once it was handed over to the ops team, while the latter tended to be not really aware of the system's business goals and, therefore, reluctant in satisfying the operational needs of the system (also referred to as "whims of developers"). + +So, delivering our Vue.js app as a Docker image helps reducing, if not removing entirely, the difference between running the service on a deveveloper's laptop, the production environment or any environment we may think of. + +### Effects of Continuous Delivery + +By leveraging the [Continuous Delivery](https://martinfowler.com/bliki/ContinuousDelivery.html) discipline we build our software in a way that it can potentially be released to production at any time. Such engineering practice is enabled by means of what is normally called [continuous delivery pipeline](https://martinfowler.com/bliki/DeploymentPipeline.html). The purpose of a continuous delivery pipeline is to split our build into stages (e.g. compilation, unit tests, integration tests, performance tests, etc.) and let each stage verify our build artifact whenever our software changes. Ultimately, each stage increases our confidence in the production readiness of our build artifact and, therefore, reduces the risk of breaking things in production (or any other environment for that matters). + +So, creating a Docker image for our Vue.js app is a good choice here because that would represent our final build artifact, the same artifact that would be verified against our continuous delivery pipeline and that could potentially be released to production with confidence. + +## Alternative Patterns + +If your company is not into Docker and Kubernetes just yet or you simply want to get your MVP out the door, maybe dockerizing your Vue.js app is not what you need. + +Common alternatives are: +* leveraging an all-in-one platform like [netlify](https://www.netlify.com/); +* hosting your SPA on [Amazon S3](https://aws.amazon.com/s3/) and serving it with [Amazon CloudFront](https://aws.amazon.com/cloudfront/) (see [this](https://serverless-stack.com/chapters/deploy-the-frontend.html) link for a detailed guide). \ No newline at end of file From e93b8371d73e4467dd8152703ddf1db423f489a2 Mon Sep 17 00:00:00 2001 From: Alexander Sokolov Date: Mon, 18 Jun 2018 20:49:38 +0300 Subject: [PATCH 009/737] Update debugging-in-vscode.md (#1663) --- src/v2/cookbook/debugging-in-vscode.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/v2/cookbook/debugging-in-vscode.md b/src/v2/cookbook/debugging-in-vscode.md index 9e9751c838..2e133dc5a6 100644 --- a/src/v2/cookbook/debugging-in-vscode.md +++ b/src/v2/cookbook/debugging-in-vscode.md @@ -24,6 +24,16 @@ Go to `config/index.js` and find the `devtool` property. Update it to: devtool: 'source-map', ``` +With Vue CLI 3 you need set `devtool` property inside `vue.config.js`: + +```js +module.exports = { + configureWebpack: { + devtool: 'source-map' + } +} +``` + ### Launching the Application from VS Code Click on the Debugging icon in the Activity Bar to bring up the Debug view, then click on the gear icon to configure a launch.json file, selecting **Chrome** for the environment. Replace content of the generated launch.json with the following two configurations: From 53b11fbbef932f3ba2cf0596fe198d6be8d70e23 Mon Sep 17 00:00:00 2001 From: Chris Fritz Date: Tue, 26 Jun 2018 10:27:38 -0400 Subject: [PATCH 010/737] remove outdated information about polymer from comparison --- src/v2/guide/comparison.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/v2/guide/comparison.md b/src/v2/guide/comparison.md index f0f11eabf7..2c606826f3 100644 --- a/src/v2/guide/comparison.md +++ b/src/v2/guide/comparison.md @@ -216,15 +216,9 @@ There also seem to be philosophical differences in the API design which if you'r ## Polymer -Polymer is yet another Google-sponsored project and in fact was a source of inspiration for Vue as well. Vue's components can be loosely compared to Polymer's custom elements and both provide a very similar development style. The biggest difference is that Polymer is built upon the latest Web Components features and requires non-trivial polyfills to work (with degraded performance) in browsers that don't support those features natively. In contrast, Vue works without any dependencies or polyfills down to IE9. +Polymer is another Google-sponsored project and in fact was a source of inspiration for Vue as well. Vue's components can be loosely compared to Polymer's custom elements and both provide a very similar development style. The biggest difference is that Polymer is built upon the latest Web Components features and requires non-trivial polyfills to work (with degraded performance) in browsers that don't support those features natively. In contrast, Vue works without any dependencies or polyfills down to IE9. -In Polymer 1.0, the team has also made its data-binding system very limited in order to compensate for the performance. For example, the only expressions supported in Polymer templates are boolean negation and single method calls. Its computed property implementation is also not very flexible. - -Polymer custom elements are authored in HTML files, which limits you to plain JavaScript/CSS (and language features supported by today's browsers). In comparison, Vue's single file components allows you to easily use ES2015+ and any CSS preprocessors you want. - -When deploying to production, Polymer recommends loading everything on-the-fly with HTML Imports, which assumes browsers implementing the spec, and HTTP/2 support on both server and client. This may or may not be feasible depending on your target audience and deployment environment. In cases where this is not desirable, you will have to use a special tool called Vulcanizer to bundle your Polymer elements. On this front, Vue can combine its async component feature with webpack's code-splitting feature to easily split out parts of the application bundle to be lazy-loaded. This ensures compatibility with older browsers while retaining great app loading performance. - -It is also totally feasible to offer deeper integration between Vue with Web Component specs such as Custom Elements and Shadow DOM style encapsulation - however at this moment we are still waiting for the specs to mature and be widely implemented in all mainstream browsers before making any serious commitments. +In Polymer, the team has also made its data-binding system very limited in order to compensate for the performance. For example, the only expressions supported in Polymer templates are boolean negation and single method calls. Its computed property implementation is also not very flexible. ## Riot From 9fa45f08194f9b80d07d5d6332ca7930afd9217c Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 28 Jun 2018 10:55:46 -0400 Subject: [PATCH 011/737] update React comparison status --- src/v2/guide/comparison.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v2/guide/comparison.md b/src/v2/guide/comparison.md index 2c606826f3..072bbe69dc 100644 --- a/src/v2/guide/comparison.md +++ b/src/v2/guide/comparison.md @@ -22,7 +22,7 @@ Being so similar in scope, we've put more time into fine-tuning this comparison With that said, it's inevitable that the comparison would appear biased towards Vue to some React users, as many of the subjects explored are to some extent subjective. We acknowledge the existence of varying technical taste, and this comparison primarily aims to outline the reasons why Vue could potentially be a better fit if your preferences happen to coincide with ours. -The React community [has been instrumental](https://github.com/vuejs/vuejs.org/issues/364) in helping us achieve this balance, with special thanks to Dan Abramov from the React team. He was extremely generous with his time and considerable expertise to help us refine this document until we were [both happy](https://github.com/vuejs/vuejs.org/issues/364#issuecomment-244575740) with the final result. +Some of the sections below may also be slightly outdated due to recent updates in React 16+, and we are planning to work with the React community to revamp this section in the near future. ### Runtime Performance From 78be5fca77ede2ae7e20036947b34f9f60efa126 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 1 Jul 2018 09:45:07 -0400 Subject: [PATCH 012/737] chore: adjust sponsor placement --- themes/vue/_config.yml | 7 ++----- themes/vue/layout/index.ejs | 11 +++-------- themes/vue/source/css/index.styl | 3 +-- themes/vue/source/images/bit-wide.png | Bin 28222 -> 28340 bytes 4 files changed, 6 insertions(+), 15 deletions(-) diff --git a/themes/vue/_config.yml b/themes/vue/_config.yml index 6a3f09a718..a997f01584 100644 --- a/themes/vue/_config.yml +++ b/themes/vue/_config.yml @@ -6,13 +6,10 @@ vue_version: 2.5.16 special_sponsors: - url: https://stdlib.com img: stdlib.png - - url: https://www.bitsrc.io/?utm_source=vue&utm_medium=vue&utm_campaign=vue&utm_term=vue&utm_content=vue - img: bit.png - wide_img: bit-wide.png - big_width: 120px - big_height: 120px platinum_sponsors: + - url: https://www.bitsrc.io/?utm_source=vue&utm_medium=vue&utm_campaign=vue&utm_term=vue&utm_content=vue + img: bit-wide.png - url: http://tooltwist.com/ img: tooltwist.png - url: https://vueschool.io/?utm_source=Vuejs.org&utm_medium=Banner&utm_campaign=Sponsored%20Banner&utm_content=V1 diff --git a/themes/vue/layout/index.ejs b/themes/vue/layout/index.ejs index aa01560739..af60370265 100644 --- a/themes/vue/layout/index.ejs +++ b/themes/vue/layout/index.ejs @@ -29,17 +29,12 @@
    diff --git a/themes/vue/source/css/index.styl b/themes/vue/source/css/index.styl index ba607920ed..347a87b7fd 100644 --- a/themes/vue/source/css/index.styl +++ b/themes/vue/source/css/index.styl @@ -79,12 +79,11 @@ body margin 0 a color $light - margin 8px 0 a, span, img display: inline-block vertical-align: middle img - margin: 0 15px + margin: 15px #highlights background-color: #fff diff --git a/themes/vue/source/images/bit-wide.png b/themes/vue/source/images/bit-wide.png index d6bb2b04c9d4d1911d31c105fc940336a1c51210..574b9de4030c3c0d51d5f2187abee626f8142691 100644 GIT binary patch delta 27615 zcmZ^KV|XA-w{>jWwr$(CZ5xwx?1^p6#C9^VHL-0cGqEPgH|MHb!m{p03%@+6KCgQ=N9GW#mE;lS z<&Y8;Ws#JUl;9Q@m1Io`1S9yLPQ3r$PMu&@DcN9T(C!{;mR5WgDe_<(DJkHhFq>RL zq#z)6>nWSyj(`XW3Je5Tu*j^?;y3tzjK9}mCb0jt`qBPvBtZ$G{7<+4V?oIO_g0wn z{~6?eEfj`-2Z8`2)%nkm|Hl%m|37Yk|1|%vpJv3ZtJ>drqxnnQaN~bM$4{QgQ6vjc z9`>K1DWIiLb2+=Q zjIK&^O*8GtE|l{8msraj*n@XpZU&M1%D2j@TA{C1Y}FG;Er3JS>knPVox+dpl8L;^ z&8i8$yNs?@lXlhdo3hA|W18ssZSrrI28BQ&hBwSN!Vs?~s`nhPCOddv&z}q2sSQRr z+t!3}S3N?n41XgO@)FrJBjkUL&LA2Vpy~UKF0#U{oDQ0Xts#Sq@I5y`0)ooST|-s8VWpU|e5+Q@R-KSxh0upynsNE9HLvA= z^i60UiMrKuJ|z zNj1#5?DdTL{H|@$?Sb2k{eN66sa}?hjaFge`i1W^R*^O^u%e@KYoV^)s6`Lcm1stA zQQ}jA?%IrQQ(s5~zeQ+R-W+5`m{Dr6$CbP<1brgheE7uin~tn67Ld05kvu<$g>kLY zD~`g-Et&9iJBI`d{+s_ch-3?i@O+@nZ*jl9hUK@v3)L+TMO0^nTIl98)RDN!g^%BN z#W{R$(7tiD9m8t;nu7W8lqzzgn~HTYG0@dlosfvy*Br?HHV5JSU4Yq0bjC_RG2ppL z&nNBm4_b%Rf1|Y&|KXEHM%PB)c%v@Kmk*}!((eXK2E6rS2;s7Lf|9YsYKl1|lQ6_E z7=;ZHeChMT88tvPwra<7-62jW^KRE|4p4(0xteH|Y}y%0$Z8N+DkWcfa<0%^u7WJ9 zVx!53{5NaF>MIMSQDeDj&2EBT|5(mCi8hm$sd?v0n(ccsB!k60gB0vabKS`vVflog z*4YC;(e9^=vpnfxJ3|;&xApSdA){G2y-Uq^R~O;v7k3gWkoDXz6g08MkI4Q-0F-K~ z!j&MbQwah20Hd?4pxYtdD?XCDxeg0@QuWQn;mSR+N>UrNu*2r?ocd%*o4Yy>{N@+^ zeP#(E$s`hHjDjnZV7gyglKRct;L#|R|HU6t9R%viTkcuVttfhSVSOrACDG;3mqYl_ zp&>H13Q$@~;b_b$O1{%2(M{=S6bb-i7qC$FhS)K~Dow2r^KaxZGK~G654v6~=|@%k zA2cG>0eP!(>mY;07R_y?BFDBtN7V-b4OXR)l9`tfO#B`XY8~KK4xq7Rki&CXhegg) z2nww=wG~qhMKg$JDNc^rdZQ)J=tcWtAY_#9OluN>a zWUdBM0W2a~jgB;wJh|>xxJM;qg81Ch&tb9U5zhX@PK zsz@TGg^<$?HyA*O?oQ!K!q8aBtA7-ocBSNwMl9ACf8|^~PTyZc#fUS+^M3^U!TkiW2Aun{?!R>5ar7OO)4kk;mi{K*;*!+**5E z6c&bt4Z{AXdZJXnz!(&bJP22@eqcs1gusDQkWex`Zi-lcWv~DQ<>RKtu(L6^g$839 zS4ecX1%*nOC%MOt?}{83$)*@Ih8R>*j}fO@mCs0qEg0AhlG2Q*lVK?&df z5StlAt0z^d64h;~&;A~))O+(Nx#pb+xyOGcBWu$Mt_PV70xl%)#Q*Oq>CfJnk~@&# zTs5xxU{a1wrQ%Sa5p;J-vbHQ*+_yl-Ff&yH3?fLkun60TiiZIP=fVal((fZI8@~tD zAsT7pZBc}H$4m1%;-bGZwHWYTflB%C=*m@_;$(8;xRZG)V33433Ey7Pn%l$Pa9rMv zo)6+5F8_Dh9kDAF{cmKGULjdG(CB7~LlBfhv7s!Nj*`z0DUEY2^-d_q!Cd8 z2_OskDIM~u|FrIjx$=vollXt1EFiaN z!v9VNLYo_=vw~#j`Jm$<`!|tLLc))ekUwx&0qVFyK=@uOHd;3U6M7}S_~@@kbf{N^ z*o#t;-2l)Re%-XYL#=#n-{m#X=be>QID{PQ`BHZ0nA0kRQ*ne8{pb2@#s z3NfcGz8G!-$uW9mpBuuxE^2)tFp2XC7yoHlsZf4P*FpKW+=~2G>HE@X(yfa)VjUJ0 zWlsr=$4-`lk)bv=AKKKPM2KpNj%7#ida9wbVd=FYbkHT+7ZMD}QNj?UpXT%hwoqQM zyUG7U4t9%zI-L7sq%SfmZnGLKO0(X+%2gY;ck>U{JMiC{6-+r7=>}=+waYzGKd%?o z+}l=oq7G2ii5OQ3^En?%wOmK)Th+27Bm>q_|C9@`Ok}KTYSA(?j~FXhF(K4S3p`bE)41FWCXN?Y|hQ#_Uk910qo3a%d%9gTalmRAy7S4M} zfASptN9Y9Z5tM$bqq3HI>g9(tp+t!{Tq#x@ec%%1|GH^G?zS`eD0=;oi4LP*ll%4d zl!YkvK9SR}%+@}Nz6d*|-9lWxo8apFZanIz9Zaq{4a!;b(tLkPC`kfF@;G^>@(|jU z7gPRu<%Bxw*}mLeDuBw*maT75mww|E7^P5-`C>aceekr@`$PZGD;{%kMf?+E5n3AL zg3~wqpS&y#g@A8hltgSlsS=LNoFQUm6(IW#pQ)ETiv(xw3-Yp?09q9<*_^09!eS0- z1D*Hd%v4O`>uhUnQ5i_WSzzOP*^5uEUsBQ}OC*_F<8@&kpf*aDn_8WKJLmQtmu8w< z$HJ3r!tIk}9qeUH{hnkMYar-l;!?XzsMADgNAOh#@4P_D(a%ZapSTMgvT%oP!YXNl zFT*czFwowRq%4Osum#y(i%w)J*`>K2@8~X*~ZbU|+?XyL3D`?sv#JEe~N*q8lf{CP93vIc}4l3@DlmSFqv*`IzhhctWX6 z4Y9E>HM9Cw+5=Ocl&TQvf7Y4ZWFh-jFjN9GvofLbAL;ZXYP^p*OJN)I=-EX<513eU z)roX;a!JtSfwE8CjicYB77F0BA_HKK$cgy?ff*i^2+_E>uw$ZT?;uAKNqLCn%O956 zg7~kP|Hus7&$&{@BZmq^VL9)5~}cwZLy&?;GvLk>$90<;)L&in*vzX zOf`g|UU3C>3|(2e)|8W2GFL!i64Jh)W$EILbKj&|MVe&Q=Vni<9tCws*W0Q5!jF{t zWpPROFHZFpzGE>sY=wjeeO7!J%G=^_HTI{g(ZfQ~Kr^Cro4KA zQ8CnP3eOqo=zv8eo++Qj2I%Is*RBd;fy(M5gOlXV3boX8;v6YI$zT5Cf~zVrN(7<=y=SVt+AtxX$kVGJJ!{mjWoN(AFT zz#)bC@!|ls-}V*k3h-)!Ups9?tKZQD#!K{1lZNUkuwKzY=DCW+12^w%h=qAHPzm-S zI!;EZTS{Aq)s9?*MdukX-hmpVMQ+^udD{Q5m!|2uAfbv0r$DQokUSmHUC;b-!2>RItLs zN9o;^)NF9SG76PuKm(w&*^@n&UPc>s9hIlikDIjj2Xqe6YYHu464Zse0+nBO32qrKX)d{I3B5jhyiFCq}Ga@3?t{CX)V1J^e zf5r7Z$5)ULn?p}k4i}}(ag{-`mOm&#`3jWV(BzNDx5b!G<5aNnQ>^@!j0Q)`GO-gQ zL%)@?-AF>0XeQt3(qWk@9_q_2C|6W9bP^yyx0Q4=8`)fKR&l^h`6vRy z$HD`(NX{ho4=zlFK~~9CqK37Vo4%liWp(j>pFd&^7MqMM?KPM3LSg6#4I3l*4Xnl4 zv`$uYtQm8J1}LD+X2XtZ9CdUB)5AkfcMU11Z7)x=S%j;B6Ii{ND;%J^s#17Z-BF%j z6?O5!&h;}~A+j`%M3a%5roRf@6tJp0w?PXfE;7pPU8T&7kO0jPzwo&Qm5ra=1X5-{xwzi?A_%B6n$(GV@Gz_;1q z*mv8@!$hMn2I74Z?7SxXRX=)|p(=)jAW#B*3YJ!rmm92IfCtDA}z)ax#PD8lf+;Vh1 z-zu*v#wykJD82@-nU+}nz3)YhxOu;g#rVIw6%!;>2EQ`AMQs=Q6yf$1LU9YVqr*r~ z>I#opa@hPVMvfasQgW@^QxMkObf(&^Sm~%5V=XgtEP6>_h@qxs6_yet67^!TTbSgk zfFo2!`-IcO&rlaXLZ_+mB+!Q=8iO?dTLiK6{<=)DAb{BoZ=D+oLJ}N;%bBo_sSKO} z5|ECjZ|&F{O*h>MMNo(y@RP{KFIV1iK7VNbSdfGa` z5Ag;teRi!qm?zSQOW@r~s2b{B#ANcp`Zh*`r)y=Af5Foi++jPogIXq`~hO$5Bc{xRr;cuBEfen1DaJ7+Fc4%0au<~t7E0Fdry;V<&DSV%vrC^)n z^tL+`98e=5LxME_=y6$OI*Ob0Kgxyc9?VnZ5LR^pMM}94HW^Xz^hXyLx+(z$r7?A} zFfc&Y+w05Kxma{g2__N#2J-80Ieaknk9xM*2E}CysL3`%okFkn_-7o?2@f%)l z21)&1C$_eLYI{w`wR~Fvjf%60U~w*&$}Y~`G-&uZ9goC@0Xh8A6L9{`ABFly@hbfl z8HO*^ztCC@N&oACc=u?VMA1}CeO*q97YlO&_s<;;>0x40qKH*_Z5OQ{k!=x6H0?R` z)L(AQqT1hJHXcBNAzeZ)l42VK8oWqV5N$}c2z;yA{C2kTbQ=%Ve(@(1-dn8189`*f z?r-vms03ZN-c{|M#=VjBvv&uh2QXnY2ATA&@5>mjIY}V6rxg1*CzMgJ3gK{VyKsLq zjzoR+XdMos9KrNN)^$%L#4d#xwBnT|J5$k2HSa3U6>8l7Ml-z|lV6D>_oI&Y0N9ja4b67E4vH|+GIE#mn z3jryt)_vf?=>8M0YfeTB_3a}OReb&t!;}99Z?Oqb)I_{f7Uw{`r^4-rMA9Q3u)1ah zujP%gsU)Z#bkLpG!;BoMBk-^XR9;q0(6Or|lIp)Ax_0|U+0Nhn#d9zH(vBU&DR4K% z>0fUZZnbog<+oh8`Vj6gZ1Lo%f;+!Anm+ku-@|o~9Km4XP&6DmSUO zR?viMCiL9{7iOw5vQAdXHP&b#sszbZZR&X@hz~2)ycE+sEH->wkyumjq6!gl?8HSVq7fev{qtx7=>*v%NbAA zM4c@5`9Il(1Za~z72H(wFR;Mk_C+V?Lw~$p*8}(&Vr8xaR4f}f+-N&puf|bM0)Z5;-}8H{j2H%*sD;|&!J|Lo2lwEjgdmy0PxPnuw~;=;^)=}fgG9dE{faiE z$$XNgy4N0Fz~#hhDZPfJF+iX-&eZ*U?}VOWCL+!LXA{`o!00h5;Z*E|v~|D~uVT^B z>JXk(E!}6dBchYDhp71;%_6q*uc1rP0OX$0F5Lp%WP|X+okeApqc7%be$wzyPp+8D z0m*THr#)a)`9%>(`=R+FBkQK=@hPa3)}+y4oHip$AWuOvqWZVrpB;PZmYtBJyRYcc z9bU6THxh$9Yjbk8U6>@; zwHQNEgj~P~{HA)e(g*T3BKC^i0qBgt7djk0zCsvn?;(JH{`~^PMXT)Ua3Ixa&DA8g zod>QG=W~5&337w$TEoH);nDvPZ}qOwut@sK-@*dHsrOMx$NNA^r_+!09{Ewc#K^k; zpuq|>rbD|D5IF&x@pWZ-q<~}X~S@L zUuTi*f?E_lUgY6H<2ysmW7?MEZehcp`@o zYSy0d2?`>g142IUx-*dhM8~5Ch>S#G*u7V@BAy|!y)KlOjb5-6><}ro&H_sGYrv+6 zIPFhYx0|UrPPQ1^<%{#${?I4KP)U01K6{}D0-oCn=#7K-Aq)e*?O%J)1s|A;)UZ$) z_Z7e+?u4nuArI7rrqvCrUvOnYS4Nk99q-=WU#Vih9{IKMPbZs-_soJT7(5#{6OBUTP z&gBNHIw?&nm}OCtOy1Lsq=NFs8H7uDWio&l-z@ez_WMO>W@Wt-_=l1;vA0K02kzl( z^-b!TC~DCG!69v z3y6Z!qItiH5*jNhRbmoesh~)$5a{cRnHpMg;6{TlM1&SY&_eHrTY`aPoo@Hm?zugXAlSqfr@!PMa*g7(I8ALShWl zHk^;6jy8UgQQE3JU9CLwXK?Z}h}A|K*xeV(%+7VQ6)_1q(Za3|9iEdNJg68!zue>l zn+bept@rzt7VgM*ycRjwz$`$(wbPb&=E@6;o7WMg+m%e8DT0(`wowW(g$n4&Z2C-d z9ikXMnT+d=e(?(b$$$%saNla4CT=b`*~(wah}}%36G}dJ+0PXndky7^@~S}1_N7MP z1o94LJ>=WgX%l5bVd!ZAb(ts&G%S`Nmwr0$d{mWtr=FUPvuL_W8G4(9Qzj?t0k#;{ zM=s*X=7hK}m|l^qS0(5}XEZ=6cO`;bM8dsByy2bhjiNib${@Z>d_bO3KWQ|%TW>x& z%qRTk8N6s&TivmWAN^x?K2pwn;JybBq=cW^HK_9xmED7kT?uzVKfK&jA1C}J-;}2!jL3G6MrU)w@15#hR8UaFHmt>LZuuj76f7T8nSF0B5hs9p_Vz3d!q zRLkqK`oygFIYLoTSOgG3$)vqF>{Id?dAkA-xHg+0p)!#Af~D)i2NQOX9|MN$9?1Vz z4K8UkOupa3O%kO1>^+chS!v^#9!D3ietM@T7^5drkha$Bh`Qv=+#U9*s>lduV*>D#gCss1c{o$!V4?{aEl z2ypnuXcB$mP0)-l2XxP89lepHk{Cbyf8<)s>$o)c@Yfj#ufMoB_%2z=BKY=3u<1xo zBB>t@q}Q1c?gHEVxWgu*C5#joX$z}bDJ8P*Gp%krA96(AA-)idHvHO$Xtjw8q?zgv zvBmvg8OB48!E2iYvTC3V%t#a_|5(;O)95X{9B3j0mn2Jv&3e?OU!;8D3kg&sy72!r zL3YqPW@B*w*J7SpGU#?{TDJx}&7XQS8&S@(GMay9}Wt|6Vp|{6hL?LB9Y) zwd+&plWa z=7zL_;Omu<{igu*gsnDh1k5L80)M|if0cf_HcxYYTE6Qubd>u(rLs9AV=?$qLYNQM zuL(3y+Xvw3?l2YR7^1(JLFim&j8sBWHi9t}f^xd0ecJ-1mFh^>RR<>3eyiaQr!*NX zx>bFAk12Xmw6xKLmfeSn;`)3@;xW1fp~lY-`(CQJc*P))KG#Lfow2P7a7AAny+~>n zC+F)4`Vu@a%~;~nm*fvIjycLYBZR^9dELSy#05YGybBsxQ(Yl+fG1sKG>pSCHBgq0 zU`CD>9hnRj!q`8?TIVQm)(bdQfv@SU7|&5xm2zF>J4lC|h?8Q;Fu-5U`&ZHdNPoO? z=rXEqKc`sj(hgU!SVU_gJ<9~HA?`q46>r`do&4+QKA{@y8`i`PbG{kFG^p6lT@HC? z`T>w36E^+`S{yoPNR_J2&V5}LQx=pwO4eH)DZDR_Lm`<-wBQu|W4v}dsfl<~k5iP0 zm2o+_AZl_kEb4T94l_}~tv;lB7V>7ejfIek%mOEE_1E!;;a4wP!z+W%z&*B3s}(Cp zlzjcGg4Y)hu=F}RA$>QS@erAKGdX$Tdf38Fni2Vf7tThc|?Kj7e6oYwtakD*!d5 zkvq=@6cXwaSU7!n$EJ4R$?xW{v(->(;Yso%UJB>F59_a`n88G#Ht;6KSuh%Of_OO) zg(vjfetBMCc7C*TE}sBif70*Cml?wZfCtPjtfZkLdOYS3xM?GnoJUQ44u2s7}qzA~LKG2Rxi451`1{$Y_mek zSMckYnR5 z(_!-wk`>i~XG!nsK@5oO>+oy>OCz24b#&=Hc7Afv3|zm3tWj30VZ(*(AC+^4I>qD$SP$x)o2GPwAZEt%mi7 zrU8K{L+lL9k&lOR3n@rS>;Wq58Q-@HlyvVu5jxz94(^&CZgALt zd*z5enni7CZ0OsJ3X4>4f9is39B3_Hvv9~f@S-!oyH%QM4R}L z;sn1u<2txvLoQZw?uzQhe~DL{2&>OF*eFN%JU#>-6J47oXa*4O*f9jiTNe>OvA_G| zo{e(ylD7wrFBYNqa?Z@|2wA|STcw;c8KKXQI6rQ2dSKud(VTdXCNEDVs_6|9;|AN5 zGg3*FnwUATkpY6^wRT%D-S6GA8!LJCsyFN5FBXgwW#wL*3p<1zkR=q;oMG2vl$nIl z<{(W8X_Yw=#fF>%%e)yB*bl6b)$-|OEFy(sp8h8|@;L2{J)78NtgtH1`oHXAAuobs zE-o_B2oFE(Gv8)|hkt2(ry2VtBaY{}o-d43HTc=`H<_|Ua?Q?-wA^xrM`8-C&4dyJ zQ+vNn063FM^ghHx*QF@&Tv*8^KL>?L!}&%|(t;nfaf%;p7Q8KQEEYzkGYkN3^?aM@ zy@DxM0|9u5_ve_6FY72z9Wf`_LIE1#j$WKcuqe=PpK}K4*q-HIU(bA!JC@_=8hWUr zsqyVq=KzfxFR>kPVy+c0+)J|wbCP@zkERal>4GPSShJ?Bd`1UsA_aIET+WKBbLVhv z(;BFQ7?qk{cX$Mb>rl)p?EVSC3>vnjlnLYWoi?Xc(46ZXELk#!MbHCzXcE=0WpDvS z){xhmTu}U6$b*&L8H3l**I=BE4cV20ul}ul;DEPd#8D+;clMVhLQU4V6l(jIh`BuT z*`)=@3+D|meeNrV&R4XX&KR*%E)y3!{TY6&Te$GJxisRHZvzuZp8{t^ zMn4qfd*=JXalt#gIpfFm5c?I=X$I+o2z|Cawh(|>8cz!ob)@hj2O(H zs2wf6+5kpSP#0S%PPs1~k$*2=pSxdC`xCMD)$AOhW%QGN;AHPlg4@ z(U6^uAWJJ2eA^dHWmJZpUR~Uk%zit~;j4T6`h497**lh8^ael% zho0Y-A0P)|cb`T7o`kOr{(RYYHr;Z}F=^}0fMgWjTr2Z8wQEF5LHG388ZAJS7FtVq zF=#bI?YcKEK-k(c{2e;;j_0)&5WNJQgW2IXA)64Evh#j_UNR}dEbw+Xdi3!TvH;Ta zK%CJpY5W>sA$m~ZCf0dw3K;qaB?@&BQWMKnr#3MqIFi5diN`<@2FzdETp?9}pX-L9 zcY_F~EXd}R{ES?`x;@8gHMEr(e*2koV?7mW#&uK5)lJ^5n1)~Y#pGjyU#6BvDRTAw zz9ab}BagDukp2_al|febQtS7I>c~3BY_QO*(~rqG&C4>v>tB^@R6uWL=r<8#_Pku* z@?YG9gXN6XCraj1D`77@nLlQkiF$+g6GP8L;JJHc(tdfqitr`Hx^(!h8E3|Su{ps| zke0r6N09=+`Q#5zZNKwrfSjcU?(b*IUJLKXXtyG%-*?mKZBugoV4$PWHXT?3SN1e*?i$Rpo+xomIXz?8fqU4#(;Yh%QA92=Cg)Rl_`-aY) z6`Wp}o8!1=nOtodV?!aKxYJhJHFbrgOfpSqANm*dbve5<)kBQM*8?1S|U9iHY z<$-RcDQ40lFamf%Z3XXUJ|h*<{ovkC@!-pIc}5wq6-r79{mF)r*(p7S*aP!h5hhkeEyhJ^^Phcq>3*pYEv+h&%*s zUkY8vI0qI8%DR3@@H|3B_P@ti*lHJTVOuEHRISMWbi5Z@!AHa~SX{X=pR@HKduL=@ ze~zb26x*+adE}T)y zIPh4s=ppXIl_;eeJ55Jg8NJs&V&mbGcb2>8;t23$7tlFhGcWThzy64kP?g7Z$R=N5 zoCfQdpLL!ssI2da$M(G<0H97+%dw|-Kblh~dS}=}(%PZ>v90!(<2B3#V7;i=c^YMi zBEtxpvM9;7n7`9{C89G@m8O;2WQp1@+fVbLJ_`6y{?&%XrJL}daIzjP zI{-L&+Yq&6WmfVALqo&*fJvLt1oM+e)$)f$oQ8@0y7pRKH=!m79urhsp&u-K9~|G~ z6?r;5=@fg-rv-7JETn4Lw6F^N@yN`V94c(oIN3njO;=W9I0aAP@|Qr13#rp>nw~H* zYe3y0{aQ6}lg4AM+70#4Z9a7`v1?Y2pa4a0{9+@>^`B)+(+TX7GcrHEnGrgl7KT?( z=d5jpkv{_To;fk=T9$D-yjTt1TH^43U)Nw$7^O{n*jrex1}zh7puhmz~+rbG=JS{8r%B7BWGNdCIoBFVDa8H-ZvA-Bkl z)b3khmM(r(Z+6D*B3N=%iIhupRSV35zBA|S$?HRx+j^dyMMV&5nGrfN+HmqvHFz2L+ z9sEl94IQhR4#J*(3h{JQkzTBf54t#?vjcmGtjYf8`}&0ZiY?{x+{&aX<04Q~6UOIs zui>88HI!JWG({KC*&#h?vS{#QhGWImP0>D&zQ(?6ka_}+-+n3d#OoaFY=~hX@a?tf z{mW2Dp_u#G7(T}x8a&^(Sly8^*k-b}@P)pJx7NOv-X3r+;d(^8#VD8sQt4~RH{#Y( z55iG_3*z0A&j8L%zn|~*9xH(8@%%TejSSSW;3A_{pBb*_^--p9Zs688NwR9|`Is6& z^4@7@od+Xtv|Jj0%czQTTXCXEKszd6MqrdILw5USpHxZ=Q9Ud*y7>Kl7w)0wj@u^m zBCyH#)YkJ?o5$|3>_v|a=N+=APvV?&+`43iHK*OM*H!22f=WxN#uA_t6CjTUMYvmK zJ&nkhG4z?)`o|eGdOkEXANA<~?rQye=zAHYQcLFL*Acz%Zz`iWXVD12v@eMUtjjXE zQd05*a-8M4u>A59hs|f)Ku-+!qC=UjY$5cqIGxj-R+Kg9kCpp2jh7-)IL$EG0@E?C zq*ir$J~h4`W#w|%Zbcw)US~*XcBH2oZM%@ML2`M;7-w?Xo6cZCuk3fiU9gF#H5P)| z5G-Nm0knl>Yk61nN3D~Z%7vhb;CO@+1d)N!)#~)y{micQ&MUgZ1`C3rAWVxMBGpJ~ zAy5uY^pXm`cL)G@)vGnWG{H`TB?W#g2A}wxDhnvjYn2sp0Py3HL8r$K)!-o|XV;NC z5EV(tP5G4gG&WiK*Jl*x@8%4woge1p2fss^KcKuEa6@~7pKqh~hws%LJ;0oLj*WD@ zC#iHA>|BEgiabljM@@~PB_Z(K>Oeow$I;zHoWe7O{HP0CeR(;w%3WPdD3rhi1G<*F zeDmOIe&F5y76leyiNhYvb8x!=+~+GRb`t~Lo6HG0!aw~8bnAj8I}Wv+5_>(#8^$(K zrfb|QN)XBRhFpxQH{WBlgatPm9WIx&-KP^`o4!&W@3Q@hBs_(8bRv$pec{XK-xOJT z?y7?rOS8|K^E84!vRb0@u>Sf99ne@*+1_*6F7l&U(LuRI}yhtv4&+Kx%C|COXMnUMR>Pi+Df{yyo7LZy$K`y zG5@QutPI*~2e9n2 z2Wd20i~%uk+ObJBx?mgJU;Acy0u)oHPkQ)?!qAocG}J@BFP;9CR;qS`H`@A()4_Aom424zM$KqmvZ2ZlP=1fJ%I9R(7jF3axJfW zStdMyIq88mKPuTAKwt!z3vYI11(biIEMpKdsRrbCobCcXDyTx+T8C`9E9L1IJH8Ec zJ`LXQ%T>}`aIbHA^G}6-zGAg5)gCp56c<#e{Q6D_n@-gqTiEg^%C}tm@*pc$HaoI5 z#zI{`M9Ap2^COJb^5z)~{%}s^=lg3F+M!%Y-aN^=VyE`FXO#lYv#D%I3tVZ|jrlPQ zmKs1FjW^1H6mce~+i^pK3I3J({)H_S3vwVX`UOuflafGbOAFR~(u&r~RrnO8m&!YZ z44YnyIU;(_kD;j#Nt@ba`@*zp_c~{JaP3zQjL`3vlD8C6 znI^vb8Bq89dU~D6P*@MrlFSQN#+@6*#{@ue71WQ*4vfwpou;B}_^el>agf}7!pLj9 zR_HimZ3^F`i)$|WWhJ7xEFa5LFmuvu^S`gek-C(6uXBq$DuFm?G0#pCLFll6u`Dg? zpX!&Mu7c$qJ~cR2KDkFA2+oeQrboLzhc{Re^2ke2^}9tK7qb5~-H6DraJ{q;%<@l7H)T8H1?5>zs`H+(n32*_i@aoyWEWsyugJq?iuoQM|`m*1(`w9SG{68Po z+yko0P9JRTqaQy8JheB^1P3aTAt$G5aSz62Fvx|pM$SUw zHq%XG|JXx-=f$V8Rvvb-vSoK_*Lb;Ba8$Ql-7Yuike_$7>2B?a^YgjG53>VD9&@5Q zpLPuT3#=K8++kNg+5cS5zJFxEK~xdqu!K$|9rwQ@M;I_hbcCL@S5KBA%~71L!@be@ zC)|4!GCwH(=ug~X)3KaBGq$=R&}w1(Y#iwH^D6Sv6)ZY@9iJ2*bJVtks?Jxqx#Qi; zkPTeUhg;Fq^^n*o|9g@iJ<<+@{5aYgyyQ$9gN;+-NM@m)#TWNXx(XivQLQgSFKt4O zu7A}Pp>D_PZ){%lxYtG8t1QUySJiFsD_SqLVqmHyYS@Cn3ETJaD!${`=X|nMX{1<5~%@O&am{7m1!V z*;Ac3?d-_1_>y&juboCnOZ$B5;T5>6kyQSCGLLU4Gc1egO$qpBeyarJ+6w{KwH33} zno$PY;nagJ(68SrT~0}xz94C98+^9LTxgRfz#|qRnbyHQ*m(X~%Pi_B9^f=Ql5C3k zZe~}zb?Q6HF%RPkVbxs;1lJ+1gP7cKX5x~uGzn8~P(N_TJ(Qx78CPV)IF4#8%njYC zP$joqD`^P-VB7xddm?5U#$?c)GWP);mHQXQ~e4*kOjNdi}LTkjWMzf3<5z!Ss zd!=eXIhNtS4sR@uZ!Ff5Jh9C#d>003ur<&xrqU}HhlUakz#_^wB&^o|q2j^jz}Q&H z*=GdeP7TtjuERI^wgcAVAi=MqS-iWddmUNH^!+R5O5OSNub&Oi43#RQ5x(;oS0gr& zwP%m$44i#e^-%8?fC)!*8omRFV-TT-Xq*6LL5i3a%FnU1t!EEGDXnDH)pe$t71#ll;f>}kQ%2Jr->f|nBzQQhy6?CK7dPieI%immX zCE_+w-48lX>VqG7r>F7p)T|1AM2HiqgF(VJ#PqJ@_J{yp!1=U9xd$Jm-0LPcXuI8( zf=->-Y;YqnyYoy&OZ~g~UQy@?p8ZmmN-l!#tkG#^=TE}&HaoA-GV#cT+$pxok#@$Z zhTW-7%rXe9pKiwX7iWlfLm`-1I1A-wLeG>9l8E=wpv3i)Qk`74)yybVE(=r%yy=uZ z#Ft{3cvXXkfW)03HAVTkEB1pp`7E-gC9nG&1(}Mn_Yw`YZ%7xUg1S6-%sNUm2SPesu)YH z(JKLKqCDtxm-j)(Rp%9k2g`u;I@=oD=XYP%CN&2*U`sWP1En>PQmZ4|CR;n8$*(G$ zw?%jZyyfWnI(I-Y?RoRseIcIPsk+Kq`O`%Uoy+2jK{EU{)vuqZ!# z%GPHe0a_KDUPJqkmMG*@Cm%#DoG+VP>RynOp1JvBm-Tj($ecJC!(7*SuC+TiSKAUct>`Db^f3 zwEC_>TbfH!A!c1Vy9&R8a#8CR~*r6J&(P56+u48Rv%Ixi}9$JYDa; z@)l({>na^Z%<7!!V#(ba2fr8s_a-0ice4kc zVaC2=ss+p5ON&pD>VHWrWuq9B%_hKbDuXNGTRl57Kua<@`+L$o6RI^Zq4{%b;;+IA zrLO)U17EFakI1|J@C-Ajh@LjZKxL7^JPwG2ZPM&+Ed-7_70|~ z!aw$vh4H;?%QNUOc-u)SjBlfKsg7c8UtDTDfocwar9rv!DjljyA1V z-^sx`d>qxpK5T4k4S2DVMrYbEteph0Qx*sLRtMp$ z#M8!J0Zp&`Y&Efda$6bxUfbs8@n3ZfQor~k~2HT6`X;fWG$ge~k%DCLp?;Wl|bV>1Ok#;*#n(C(%1B-4rAV!9lmDPTT+=iq)@cuVh*v5voZJmQ`c!ne3h9mL(H0z&%vqY@IGlg6*?m zoGln<)>hZO=iH_no_ujE19o^pF5}28TTL$bwUzXDtb46gWCyhPTLrA9u=x1oIT+y) z@D%U2>TmY9tdqNA4hlUea0E*wJtGNb2X}V%TC0Yf(>n-1amiN#Jm7n5&^+fnQm98# zJTGkbxq7<$-=0t{eVv0S_O(6SmV78Q(X2-`B?5e$h&7P8_RHCL5D31bw7X@XGpSEw zjBlEcvQcl{(LDG`YeibeHq()d)Vm#CW^we^&v2n5@>I0H{&~P7^zU?7gN6%z33M_{ z2|S=GozeX2>b7JEux;}6IqwbR*KBhYLjO7pBUgws{3zz1`#X|+uzrRC%M403qOMds zFJ4x7gFFiu%PM_&a%C@_lWbXlAdc5z?EYGz-%LI#LhZEAyTU`DoM| zg|(Gl0Ix!Z?T-~9S`{BnRVPa3h})#b_mi*r+Js^R7Rq9703R$7c?V`Ov=0WMvwB^% zg4&a>&2>2x!Q1T1X%>RFI8N(Bt{qI!K!}Mm-5>+1vV8ze%Wn~K=-OB+Zy`9})G&kA z*)*@v%L10Cz(O-rKLaCQzO$=O@!pE?z!mFfPH@+hCRa*!_CyPO=!D+?eN%ga&qd<~ z%e3Tf-qA}2Fmil48QBs99yagOQ;jC?BvrX(NOK?HRY~(&mr~%>y(fR_BElXn$poU85^xKOKLr2Ydc`U zU*X4X0-7n>6hy=(c+rpe~m~lBQKUFG*X$k%DKGP)nP1*t*klCRbQR1 zlt~1)V|%Lcyf!d~R3$J_;vkcy(X>G*Bh|JXkj;AEh@e*CU@MrVFZ$W^b=~b@=Cz&$(i4d*9+1Tfng9x4L5$)ywCR3-$N( zFK+Xi9S@AaT_#0(M1{wQTuD@Ew<5i_tD05*oUoe|WcltIv0#Duem-BlzAFGb@SqIV z&3ex%#VV@XoShT12d%)1*OcWCQgYr7qiL)ZK*8ggHh8PXE1qXvcjiUk0KG2QN+Sue z9y^Nzd?GsYyV>~ZBsc~T0h>r(%!y--d(JV^s2waV{23Uce5O#{`5fJ|WRo@kr~ki9W{qT~b^D z(qVcVqODf8gOJYs33SAbemC^>bLY9uD_!q|5?r6bec%#of03vP@cr6?ckVW8Z~cnW zcATZr=lk6@AjJk#sA~>{@Y+0KHTca?x}E6Tl|3ahE$0=C80mzx`D4a+1U;TEIPF)M z4dY|J?!A{z5&U8w>8#61n?tU?3S5B_08||Z9!(JYh;;-k0cX{g`AFZNVGd%%2Rb<4 zfitZn?h;9;ptB~rfnnTyP# z8Z+4)?%7!96kIZ5+cG^(&W^7goE;4d+@%f%3}(8`zDP;V`l(ACvHlB09oiZypxdmb zxU>w;z$J76#em zvnoqq0piZuZ?WW#6sA8)w^VOH7^F!gN{aK_`9ir<4KI_wB%- zj^XV+ZzmRSdEm4wRYY^J&?_tq@JdzLT3QR&@@?Mr@d9smmI7SH;c>i`4?^GLlu5Cc z!|=DV_uELWBje92;O*|OjjzGvG?+l_D7w7-1ww_pK2qh~9#3#uQiJ2ApzjK2Udzf4 zdTwHarE(4CIvcwJM_lD??RzgYQzG7jydG};PFTFG`A`qHYMxp{7mx_;0NWJ9?*91P zjP&6TB@x(M7O0obZ$>wi`OWC6NGxXDvzI+rsbs*+Z_SB`B{RqgB0QTTnZ0jVsw?aZ z>Z2pVXIj+yFu#GJo!m}}Im!^r4ievmxoM4KheDLIBobr6=MDZm;pZi`Croz_ji;$I zwj)mIH+4Gf`yLp?HhZ7%03^=8#QBc*U1O^ua@syh15X3ITYKZWeaLC``7PVKZ|Lj} zsx;jN)-O4_syaJqGIu?0n-BQRMWP^ioiXnFWg_Q z+mNdtI*%A_EB9Uqk8`(mmU=kWHH1P6=`?&z{DZ80Y81R}bFJ)f0El+-A2+;|80!^t zuv*Itm*0J%6Dq;4LNf9&D(GnAa{Jz_IHuWL@@u08eHg;l=62^fyMSKW*87v5j&e3| z%d#_wiaOiWxC`yQ)B55a2Q3}Fcg5y@oAF$7?ws_b(m=d}4I-$h`vcUL1#H|pYZj9j`< zIE(q#uP!nvnk8#x1$!<#A)AcUKOW6b3VuXv*%-cyd>x4s1jGyW^me;rKJX-!do>}Z zxy$MEM7>oxyt`yp-C~xp7u6BWUS54v*1aEn?l=9o5M1;8t&RP-sAav)+pg6lLr%XU zb|DX`$5E~q)81$;CG#ysR}yM=a9m~IN&GmQqv@0s-V!dq({8gSpn$*aW17zK5ad?C*|M{ELe z_t0j!@5gr5yD76>fKG!kGKKir2|ubv0o{<`WQW@Uij|(<$`3s(ynR$88&jQKn&KRy+?<)|Hic;Kv|NQ}^*AeV&~W&xLZg zMXIEy7HW~nx;|f!-2#(iPmTaM4I0WzPx1%pdWV`}13slG?HG0R=;25ZAI~&0YlV|u z@gTRz5TF>n+G*om%6D0G*W2O)($90(jo<`GupzPITk3=6_q*%N=)QYG1=DzAZSpa5 zmztcla#(^=EhCZ)yNcx`QZ6GSTf0amsmj6k0k-Y!b0zC0yFrK_T3vC6=&Ch>oY&g> z>|$V^sFki;T4WxMeq%Fcy8zuDIOV3+SetO?1t1lp)n+%qaptUnUXC5ot}P%)>!&IB znR)A45GSah@sS7XaHoROEi`*s@8ZA*)0_gZCY`| z6)?H-BCqz#56g&-uC;9U#GHOEA4Bu62*B&AP~xs`;4~Q?N)5}_Pa8wHjIPsNaniKU>nB! zyoaQLlMQvnFs8wzd}yRbD$st0uhlM?0I(6c;q-WsWjN4bH`|&|>7KL{k3ewfO-Gtv zEV(he=a;Tnd_GX>i)G(ga1T!>@ci&~w|k>i6tmYguUVFirlEqEDGIq*y}V4(IIh^% z)3{xDRChf5giGE*Np#{MyJE0Z*m{m(z02{yb>{1Xtgy)$bACO<>C<|mo=_CDH2|UV zmFH=8wlL~7v$c=9Y|r^=igu|y=ze=4l;5k88cU;YlT{=IC$q=q_IX)2Lqa4B)GfwL z94gxYwh=Ce=Z1-qZ|I@n=!mF{u(j;fV5XrnAIxt4^hO)(*mt2yVkC)R9ro2@&s3RDRUpOL`8X)*b>~uty$|9D6Ce-28lUKd6T5>b=)r&Z?zRYR_>ag%tYDrPUFiG6csn zwz30toDyX!ELVt=8>GpF7-0Bl+Ib0|(`{Of1Kf~mx`T(T-Y61#(pIwju$8iz`c8vP zOVHzN6LDWt%b4%G%8Re#DdI7!`7q5a+Jr+N<{X%Klv1Ujv&)TwUQNk-zIDiPb04~R z4pC1(uj}7kdyoDH%hmAut%#Uu9o5Yx%I!F;Jk^b}9_Y5cX#Sx8z(4IJL{6nq{=J-mjg)vW|{ z_FsNRkF5ty+$j=#WdL}YLq1Q1iK_>wyDfo6uo?F9+l5fuZRow@+5OqhduMBZV1d47 z2MGnSXw9HtuBwnMb93FvXO|>%GnBlqikj`#Om}zg15d}IWX+Cik2L{3TTM*!JB8ws z!feSRlp7LqD2bmEh3lQS4Wp%BGP@{o8%T(}wixFPugciifW?tjI1^Gd#s(AA7Q0{N z;Y$>4zZD+)4L&@uqLCE(Yiv@fjl*Uw1uy;L8RK!oVAr9Bj@sr!2-@Y>QS%B->Z~U? zgdYjNgUCI!yb-b@nGn$Y*dnr_w(l8=2jRnb1sJ~2XNw?E!A88FsDive0wjjs&dnhs zctcLF@Fso@12A7M%}OlcrW3R8-LY?qwj+BWwMY!!%x~00q(x?h6Kh#~bs?jsblzl~ z=~usIyhyXXlVG^L;35@SMbVT}(Z$l)qq+qlr_fw~C%h;OOtT1CDLs`#}YT5JVc zy}$Op8Srp&n}0x;s2gmSzjXy*POYmIfzs1No+(!fNBAP&T93mDvDw+)+R*-R$(2|ACA2BO#?9jSxa zD+%16kz;I%LJw-+$v3brMU|0!Dd4Ij{=Qo6N|6V{TUPAue5UqdK6`ejDW;)5-9p93 z@7WrEUAnnh78pM7?LzyLF?UIJpb(VwSHyb$X#oGQbG}*>R{9s`)t|)M4v_tLlRA%% zQ0onOp5D5)kZW${20EomrG7SxDuo)ENtG~5Y;@X%y0pwldUTBKv+>bJER36r!DJ`h ze!=BMM(b`Dtm`S^nKi6f*FlGz7Bsz@Is%C7Z?*TUsadxjYsn}seh$IUN!Z-MK~ryy zc>u1`mtQ!n`!i+jge`b9dv=HT+e{*M3!;ZghrgB|?`sabFWDcP)JZ?GtY(%PT?s>F zzg}8h7KGM2Zkf}1c{-)NWOC2ju9&<$L577lliv(NQBjh{zGq90x!uFH>MvWWk$T7e&ycY2zI`%yw35 zp@(m2r?x8znN}^xP6!>jO3q#;C}8r-2ZpSLw=A1o8)kmu6i*F78RP@F_ImPAe{Z2IvI@5a|4HChXhH3E@lTm!3v-JP2?&o(y>Fk zxInS>8sblJeD~KnEj=^gTH!O}_PL*v{B$=*sDr#c<~WT8m3G0Zr{$aVhJBv?sBdv{ zu}p(I71?pNECd|4jSt&Y2>Ipq`Ew8;dPz6Hzg&{ODm2=dua4U}KaP&$$%IGq;73LU zr8QAk@IP{N)K?92GywsdeYuQb=!$52!2un8ExHNKL}9dbEy`brWsTQh?39JlMM8yN zonE1GyxP^uar)piLG);h*Dn>XF;XZ!m%XZTmbs#%a^Du~@$F)Me{n+kONTO?My|TT z>vFf*5oiDAf+`#hj=aXik4~azh(@SRAi5nPV2e;@3n;;z0?A-!M8u02$lIe*{oA@Jo5H=#RHe{0!vTnTPrV#*5V)z^QACJc}haBzb& z$n=~~K@TDK?R%Xa&r!L~kgl69xTCBWr(c}WKwO?Yq~HpfR6w0>xT%MR@(TUs6EL!X zN0ERgYZwM;@8hQh6RiV@@zm;jUxaCwBSv(H;rtKlbuO>7EqtlazKT*9ZnU;(feE0J z;sc-8q2KoJ9hnQrf58q>O0Hqj@8D*^O+_~4dpt8snT3WgZ7r|X}pAV2zL_O z)M;p!sjkT~mINEWLaf(PX3I~4ez^*ZH4H;y^qe;QIQtJC2)mDYEX)P2H;riAJO^PF zXvr}+7=l7PNb8ZEo(hsCg%mrDSY8k5eP}9di`o_&;KmGy%IpbXNkM*A9gRnTJMTaa zTAX1y0dnK7)pz>tYaK>5aB{y5m68=Mm{;2K=gjjNAg3=1eljz?Rhd8m8Ht_A$*Xfft!NDjh&)u>%LAD)rIy-Y|Mt|*WX%G! zR&mSbq}docmx0T%*e&U5^#?MDU*Z$a>4~Fl+p`q)Sb~%{h^d}2WlIH29U!2J^cE_~2l9d{hAB&2#ZG2CU{O zQU2w0@qE23qvzpX0`!CRwq0iLBKUBKv5mWzzRC3KWO!-=j-X4gwQG%<%OqA@zi61QY z%O78PaGaF$l7GM*&|U`@qY2_eWDs3ymXd}RZkL7Us-Q@laT!lT)2iSfewf=BzsIMw z%)qcrlLjA#(R1V0q`NV z!1Y$7kkN^Rg+}E9_AW`>3~@6_+W6dv3(YCA-hjlaR4M|XSxmi2zy*3YE5dYkW+UZD z>Z)CU@f>I054($4rD6GqH8|4qXzLXy77Uw{@P&i>-uI7Y^*LzSGxZ?+x{2Ifv(%n< zqNnkL{R!2(@Nh{*B5xxg{<&!a3eA)pI_N8BsX!VEn0WAhl^VWa9l;v_rA05)S(Y4o zJe^1h;OAg-iLR1jQ!vk5^P~r%eA8ZE`~|~v=ojIWL^7S2sId-hAnhWay+H}_;Ur{O zUv>MeRr<9NF^t;`%*`0w&g$1W^?8ktZi$qbMj*Z^M3LZkl4Qz=zmyzqnYxN~(C}l_ z`^QQUF4*H#Aez@hjv*YQEHU$1)z2sDmW4%tzwpo^xZW885EVObv7PVGhO3PQ&Q61@ zHQeaQgYH#f74`sycv4{oEtA49qO(w;#&-Px@+NHl3)gnFCPSMr!4+2G7-XYP8Bwa- z-!i%v2w4~mOvkewArnEvrhFXFoUrS|cIVq;-QfEK zVoTZZoqs`{TeeQyrKLB>y7ygU23FWor=||ZslfOb&^b9?&};6d{{mk~L1DBBCW0s~ z-zeR?K!OhWDtbllQv<@*_w~M>o_KFnUAFDx#1(;m4Pv2azp(P*-<7~82-7ChK8?Vd$X6{KJJ=nl-FSnYccAU+%mjth`xcHn>jC^BmIa6nMpcr%Yt# zQBB=CImRQ2LX&f+)d~B*xM~gNS1`_#g=EXMt;d|wT21P&A6l7$I6Mq`1Foq5+BDvM zyPp~v*BN2xhlZ$KZ7|O4ig#3YbKj2o{b0z5xNmV3S+PrI@1Fq~OJP!nN0t=bglGl; z7%9ZkDZ`J~SE>d4unB_DRvv0qwPQ{k3-zs=$q;sh>Mt=B_go=k>uME0?Q6D0HEnd@l;bwqJ3{SH7sG&UD5K5$YsLd4jX!l6c-(@M!irtC>N(y zQN+t9NT1i%)y`er{yZCGE6Z>La8%v|w)=sJku-6?OJgzpt2~ge0$v%Du6XdAzuy2V z8srRlHoG&`ihyvK%(8<;7uL&dHma%QOYD3ouOEyG4h{BN5a>663XGRVwsKt8F1eJQ z`&GFQQL)LRp%;{)Dnd{~@w%TKtoOg~mqha-8?x51k$Prg1E9o7C-Y^_sY=Duo*>G@ zu={=(gO<*<)<|@S{8C=6O1Dzq-I^2Rw&FQj<#R!a1^l{GAT=(LVac(*2IDqSZQ0(PJ( zEc2q483C~lV7y{*L=|Ct@BeUGFLkAMu<7Xnb%ItBp(ghqpyeo|!C`7%E#xVNHOMQx zf?amW`;hGS02{;h{)5!DK@OO;3EE+ia#i7Rk$5Xg%{;I_P$IEI{=7We>{WH#T?6F% z>|FPxAz%&uQSw}FkVVa#ZleOxu6ZE(u>=~vY=Bz5H7iaTI!+hAEn(h~qQ8CJL$9P;o5TBpw%-AX&>rL|bPu?&ogCB3G0QBIrgg5{@fEoXdo< zIf;nCq6@~C?6DahQ3R?onG_(rXsUClM{HlbO_Fdhvt7XyoM+*gs3nFihQ~y_B)io< zfXT%31ZM0o#6Znpo20e)@AHEVr+B9o!G329l9Ztl3WkO|V*IA{g)=h^ZosD41CL~# z+dYq}tSZ828-iep_%Si28v}$$E3*1VyiVn_7%F*O3hCT>P#!p{d5tf27hPl)S!PPB zA<2FM?rxh*W;`4%+(G4POa;}Xc25O3dyVcbBp49O{$@-eKJM&UY4*u8t4-Wc`fCUz zj7f>-lgG@2XFfwnUwca84gHjNG4^X6qh)&{_Jka;xX!k4W#;}>8CgcgY)TYT5{bz| z5h^@k5o^>lg}ot`o)Qc#p=bMdv74nCrZs9eDrI+GtM$BS;{duwv-Tibd?(iz?Dlzz2Bv}5= zx-OWndoEj}b6U_(8&!gyH>GGKq_|c*a~VcQl*f(X$!V_ZWbbfO>hNp{Lvd!1+{;h} zRH>Ksg=h4pqSNVH=dPSUz~TM#PwidPc7%VP2HfUyr>G)Zoi;8b0Wr$SbCA{osa+H- zhsbjhhT6goTFT0~f0@>k$k^}Ab7UHD2%IKQ11=9#I=UbqXq7X{>bgkb`Un%O;E}WI z{xzU*-63Ij{y58i{bq{wH94fRMowBhgDC!=4(9!+A`AaPfTVb=yH~tqya=dB1iGFx z2D3u*p?)K42Q0b#ZLu86O_Bg=7RE{StN2nz>BI%)XP=)bwF?$jW#1nZ>z!Y=JRMbB zKDM9t9DYUfwgIC8fe5DI^n<6vL`wz!=M)gj#4Qw__eLECu!+n~kBN{# zlO4^iZqXyass~c%S$^Y(Yb4M`_4((f*Jon&S>%N6(W#mms(kL%E6cPE{2M8udnBeQ ztA8MsyYM2y0{7gS!f0p+CQK0sn-h$#xP}i&$c}X3jmhD-tmPb&vvmQH)%a+MLmX*b zhdCPD&C=x(H&WS+VW^5;slx1RQXO)>#8r7P zAAg}XwGeHJ$fkoe+vuk4gSuY0$xpD$2U&BrAQ#ThvDDfgB@W$*Ur>xOT@tbvcoX(r z)krx5{tx@^3F8$)T?mqXQU8l@3r-Zbp zVlUhAsDs&wpAUq4_tys3pV5`dtzlFPrHJ$X7%?}{M16?&Zy~2i^hN()>Hx1t&8(V4 zuI?5+`#uACycRsR_Aj|E#Kxao5k)BHe}c@XZWqlvg-pBtgAGIS_$3zCVy;7)fepODqc>RQ&M+WG z1azz$LhF#>qlj?^k15TX1nCKRfMC%QJ432~aBmni*fBcyh&#|VH?Xv(aDiWC<0h(H zQq^Pu=l`bv&lXA*_TO?B*?TxM%71ohlADS}gLPaOB`9-#5;=pWF3dcz4p$;Gu4LAm z7Ubb2;6sL_kFlB(w#)vYPPiiDU}Dp*8r>L1$dfiB_(rM#q_CEcV*_XdvaH|BPxpx{ zbg5bs|AimGHaHE_n{M&@mQ2cuaB;y9YhBw}TqB~RX2k6r5_s!(tE}v75DLsYQN)Zf z^A{!pYC=5BNP|+r4eT$)pjxzrf40$wRp(g1G%B2HHiiF<9=Z>fDUYEXuu^t|`I!)M zD~t)C%MYcc0SXxy>fYVAM7C7#a4RWi0RX5X6Yie04 z-sJypSJZ(Na28^~fSsk&s~n++g=kJE&;g6BkZ{!uvmffCFybSTOTb0k1bKo^$hxSP zSHk=6ox1e@ZCnu;N^L+9=!-t&5lWo~@WlPx_JMs7h1gi+gr)D@aac8dHJldQxP6AY zKl*{JQ^j91UZ+d=-^Q5~*QFJ_YA7*ps?X`#js|9+;3vAg3|b1gh`bQg4bjE{{a0Q@0RZ+IMnH zUjHc-?{#{q8QM27Sz>s8wV% zuaK`_2{mQe6_lX=H>EEbB+#XCh$HzX*R4MT`C1c^XqV6Xf*qrl&tr@w`zZ|-@h?f7r5W+A=IyT z3@ZQgxkTVL`uprE?^$#Uo-h9?5Jjw!ThOYTQ1G`xlp1CkbG~#O7YB9%MIiSeXr6YI z^aPo$%7Ks?yCA+#t<=(%byw%&k$1t*IoZFa1Qmk1{(!&+A)Ksp^fLj){w(7KA|)m- JS|e;2_%lQhW_G)ZII&M&srG)@}ZY;4^5wGcdmoS<02Ho!GM8*`QHbzCy>*Dht|qtK_uxyk|zNWgh^zO6iL4zOsII+`1m-u z*!h_F*!g&vI89i&nE1FjjhHyujM&V0%-D^&dDxOfA+h)kP3(IjBxr|NNjF~tM&DfdP*m#VXc-gpEnT%LD`FJ=@*mzi3&60c|#o>Z%nK;3~ ztdx=lA#H)&ERVxl^TtMDvRhP|oZUFIMndo}EU|!SuMKoP@t}2v>pYJFqc#mrp*w;SuhW z0PYbf-2gF!WmxV;huoi{jfz$AZ+f?wjY$sB*g*TatD8cz8`NvrjVuU7ZC?e1qGDpi zBE|p0_ZkkT*nfZ^TV*DgxvgaqnvnMND0hFkQMO(*dS9elIT};Oxz_*(1rZ?1%7GTR zKthx|dR<0TK5C4$yCT3H#3%XbYy6MjXv4L4EheKcVC%`!$?+W4DcNc3dGvP;Cf1EB z@4(4i%E@ju=sAQQNL8aj`)3WUq7~*G(JRo1c}fN8;26C}Ue{reEF_JUB3xGOAfGBu z#*{>1tuCdFI^wor+4j)uWY#t2m1)EGmrn})6o(YcoZW!J!X>T@V7&BGlS zQ44MHI=q=NZVn>W7jxA6L#)Os{x_&H@Ky7EEN5fRuL3m9b)O1MoMx2fs@NMUx0WcO6%{IgT7hiG15MN zxRAaa&*dD?IF_`JEvZz>`Xl>$LM7(|{Rb2Big=S_UH(Tl2Ay!!tdX8}8gAM>Iy*$# zqP>|&`gUdVAuzyjv=UuhiVA2TR;%XdQ!Iu5hnRTH>I`YMs^q?#6t`cQ?2wxOClM`X zF%yxrURuZ^W>F}!TKVwL7{O8r15xp5L8!|pyJ-wNV@R5m7q7e5cPKnjP0AAejA||3WPaz-eIL(HULSNHLPA~)E&VzL{_+Y=@f$yrb;$%u^z06F#mTOYLm!}HZ6cl zSC$Lvb6|XClLMwk9h~h)id_&lpzszlTug_t7qU}N%&4-zQDzaf=uL($j{RS@lR-uO zmIQsk@aGabnjV;sQ4M|?_F~QPF^o^slBD4xE8L^44Q!Q!?cfi8r9%(gi-UNJJ3Efu z)*0_jW(Qd)rw*1|*Uoc@>NLm#Q<7N!vx#T`fS5I@ep7_cEt>2>*islFl991S_QT1g zm%!G|vu#%>qkzN@oJ@KSqOVla3x;UDA2jBJc@s?O>Mim4&XvS(v>Djq0)J!NueF}^ z=`YaBj8szngSlsmx+hY$e+cXtM~W(TtOONiSiT9l5Go847hqpAZ5XD}$Da`!qX==c zW;BB7Htz5d(3XChUS;`uE*Y0;_`);_K8)4S&BvWB&U#9C_mY6;sScoi*_UrT%CMS& zXf6B?>!(+8tvHa&w*ATF@ef&Aaf*W$rlNK%{}KhR$LmOJ=<7yBcuz(TIk_Aw ze{&y{YXK1i4vIK!7<K&7wo6s-j2HZS_pX6Qhaw7 z&571tOKgv}nNbTnVdHyNTntF4Bx7NKONIUJpSR}TUr3f3kgX_sCDuCeAJ$OTAG_9) zPx{Hqo!yO$2@*!buJ9D~y3mDqPGyH}YBM=ta^weg#xFlL=!qpW#(6WD%NOAjXumtO zey08N7%vXxbc|qEDjpUFkl%I{33%tc93GN^U;SU4xkv*T=373@xdyu+5~NfN{h3=? zL0YtFC_~-ssifS`5kA%ILst4Ugp@?;L@QF6^e$FggIvgZV?gNJyK}~iOUb&^{}$IT z!QTFTGWFStQDmH88UK>ZELgr1({S1}HKNM+g^z~MZBv9wI$9O|OG86J_gR=~_F&*# zf@!tkUT|UqcUtR41=Wn8BWJS-c(WfmCY#ilEH*-IvyF9;$n-JKW+&Y%N*$R`G4Ut( z&+ek-q5!5rxA}-I?f)$j&KcU4nI$l<)(czvpAu$+L*Wa}Cz)<47?Zzd+60O-Dn^d6 z7Ods(E=n{!#qA?=F47guH95L#0)S;6j4D zg)vs@kBxwkoIaQ76f(78BF_%>{m}CD2wDfc{^z#)H9wb!zR8LbE60a{I8tI-Zm@?V zTBvVuEEQIsF`Lsbb9_t6s|qDW4RUHWy9&&;xOP;Qf>GqaM?csM4ad_g9(Xhk1rkxR z4}_cDS2YZIv}r9@O|I9t@a4mW=D3mb|K}pg6El}8&_j(l;-ExM0VI7*>Yl*ZwX?&F z-o7C3CIbtMNV{#a^a}rd5^&9H4}HgQElak4MtesH{nCTEEiSUc3H1^W+eMjK_3@s$ z9{B&Ze?`tE3Q*26pbc| zRLBy&-+xE}Db>TabpI>SaUANN_9PM8Cop0>*n5P4pt~;SX5Znp_dZi`SL36n4ZmK|97D$qEVy4RWB_fsQ}%k~zx{a7<#}f}J_=c#`6+W4s}SfD zAJB{CC(HCdT}r`_Ky5jNV4wV?v6Z0PMF;wQ#Idzv1B4kMaPI8!clCR&yA)I4LEosG z3;wYJ2|}7OP6bbS&r>uSx??4kr{jvcD3y3>DiQL-I%^3%oc0`Rv67Yep!jJjxu%p8 zaa;39F@!b2@i@iMU5>b~gv`Qf+0v zoh3apaU#ak6KNiQK`*ugorFvE3^)aO%EIeq7=vJ=2gj{=; z6n}vZM8ROpf56U#3_l9Y)dj@-GlK65D@=Ivw$ISC5lYGrEyW$B9&)R&%l#u|bw~~^ zFjOu^6ru88OOX=F#q(LieD;Y%61EO?dxQ-N1vD4#gZY5Rk|2varJngf$ARj$|G!Md zL!Kt`xQIG{>kMI7o>KpXgm}<6fuv6QlG7I1k^0UEgiZ zqLPumu>l4Pwc$8UV|Zp2VCT8cJVJ`$CFrY*Tz6R8Y#Yi=e>h3w)L7V^@DEfZl@^H` z)K0X5lM?UQD8E*5LJmB`L{%tBYG05_>X4CoMv_3SiQ}>A|9C%{m%$xBZkHidka(Xf z`8*Xv{}1;tq64#dfu3WlZZE_1P-WPOg%D@=aijpr1orqI&}- zHR3N_keN{A$A<u3 z{3Hr7LQ`Yu3&m&Yvps`VdcS*mxMy0{UbhLoOgBpVpB5n3vc-2P5}4k;-rg_WjR5`( z*S$&hiL{-;+ESpWw}qh?Ix@-q}S6W`tGqpWDXkpFlJuVE`Nq*A8_?Mh^!%lZ>?pESU|tZGHw0~R7W zCf^s-5PuzYw$<{jPL{w6QotQ`(A88r*QfOhLYn0?g45$;asu{}7ZeIURoGV}9AGeZ z@f)qS_(!nB@GX*=7Z&`!gf!B#S2$GFb_yw#{luZ-Mu8p4kxASNy5wPpvhOR){c%gH z%dO-R*g|xa%0D;)0VHS3lR1TXFfR;Rp*^j%GZjk3FdG5?wG9-avfr2pYuN*pbRRGM zaHQ<~Cb0eHSj?0NN6SIorO?C>DZ~-pf<8K60%$oz^wQB^6ACrZ7d0Iy`hNLd+dlE_ z*dmpS8u**7%t!s|r0}C5L8XD+&kUdlS3?ZL9!h*-_;*48mrR4kJp$dT(PDDmt0W0R zan6y(o0g_RR=#cEmK{UYKNOr2%8)1Lv*=sXm)wmDH*!Kf4TuMUQx;DbM4?2y)P8XQ zLUdKyWjM~8t&?B>zwKLcj}6pBg{(zc@fyFFs>W z(}GqerhswH8cYT_LD6_|u|+-*I@Woj9OvHon2tz|a(||hQzs=h8ZB*$u&7jePUiFo z0vgCE9K&eR@c@(ZRj}nS(uoGS=4X-Uge*=Hi7=Yxs0rV z3Kc8=K1Lwg(uaaMGI-LaQ?f%SS(BEWKdrC>TzZlBiwV`ZY7XrOhuO(_D$vbPZ&|pv zSX7)w)Lb|e@`FxjWe$hQTAw~A0N+wV+K#CXd2GJ!QO)W;GmD*z6Jj2O8%X_czxZTY z`?cc8$(Kcvnh}XEJlt#%a$y3^$XXw`L(n1c_}dqPS4;w>jtsSFrXciC$XR%H1p+oi zbQSTtOfZ+QZM4Lc=(s5$7|Qs0MD<}AY7_y>nEv+Rw?L)zqUNv{3#j7|YUl_5_MV_3 zeioW5NiFMK$8l?DnGggtN?8!#9IHWM-aWtxIA2{uziQC1tVSzqxOGHGfo~T zb*Ucof?#KQ1M6OA9IjZF`Brm5m4f0$)x%LALeoiY(l1X!43NRB&kkVE=rLrsPqPcR z2AtxlaJ$Qq@0T+852=f5=U4juuC<+HyXECE7>cS83vbG0$OklrH`j$}oWc$N-ohiW zzNjdqPzS#~uCzEcUZl7otGWx#_F(+WK!Yl@ijIXR4+7RD<#<*H29#DRvfpsE_ha%l z<3@#aasD2_A_0QgJh+Lxx+IC1Q)9JYzUeu7)*FDPRNWWD$H$)ANfc7IO} z26rW;B=I`vpKIaYeNef(uQ- z1^NirZZan`M*niZ>ss>da;cbe0f7s|}qZ$ED zIEFer9~#h3EpB|8=9R9QG6L@@565@@^KEwk2L-A8>xKM-;S67eJk9x5P9eRJm-Jf@ z=Eh(6VNbH4Y-Ii0|M8$%xB)f+7@CrX@jQmRKT_-4aF);kRG9a*IAbU9DJvKUZ@E1CpcAwX<{Ty2Hj2UA zBLNU2$l=9H@b}P)ky8ZQLH$yzUP|@nib$dwr61Bizj+wua zkiQWmG)!`dY84l{`L;O&=AH#O{8qBKivgE?OZgXOgy{`8KWw5bM^Y+}A|8kQsSt4-G$bt@qEd#n zm~cZoRjkYN>tw1y*uFu+i_p7MR`Hz4CIGLdza{^I+#02Bw>Q~fnUPkGinuJ&DOxjm zPDUdWYv7q+W+j|RNppQfn8#`0HUXU}n002fVU$j0JvmmTi>SEst?ZozB~s0mE4S04 zcy(e6x|Kl1)E)!_DlM;*OYzSAd@J)e2P8&S>f7o0Iik4Ft&uajO4%uh=j@=ifRE!4 ztL+MGLLXMTmx%2sZ;Fu9PqRZ##vQ--_38{0L|&H+u6+DWD4qh-KU!kG`L~v153HeA z8`HKNaN$PztiHNV!3L5tm?g`bk)z160lKX~on@o^ppUXqP}$#}wqDtK{^%$6Y`6pXmx=ep zb%BjpYTF@eP-~AMX%+WWR9E`pkmrFX1y02SJ0t4UqpgmX#ciEjfNd@O=S>7faq9pF z6{QaK-oB%T1g66X>t1iT&`H=>N~)g7P5U>kH(^@4+qwtI&CS04nflCqz;8-K2J4K) z^}ULRsHVty1W zuf5-teLI!2560jDBWp!xt;`4*49?Q&`k2WQMk_q`gOdCrzvET`Z#|w|;pHz;&32#!ETS7_a&9=a!75Mrorn#4Qm2Uzq4Msy}M)niBXkW@( z_bIQa00m_-Fh7=F`Y}^rIR+_Uuu>-FFbk{XFA=x0G^*O-yvC~Qa&fsm%c2i0p#Y2Z z`y|#wrVStln>=aA(oLIX5I~8>#FY`l-qmk!Ycp6I%!*Wu>G6xxh4dzAV7M#sjf;-% zIbYg@J+)hhQ_y4y{^;?um_KFo5L{#wb-zUi)pCPU4d^CJq1 zid5#z_6;|bhqtn!*TX}Nut^X}DnqTfc28CovssYIwdSB!%~Cq#idhY*0>eX+i-W@i2^H%;^Ow*B zb&{J)u2^J8s3zji8;>c=LxyLHo>WX;C%_-+FT+-goIck~^}Tug${Pr}+G!SoE>Uv0 z#;pq0TVxI}2{m9pj~TM0evKovpey84V$S{n)JjXUO?c^TaCuyH+SXX?LwHOSXG6*e z-y3-U%1H}Un0gg@+n(zRe4*;uP841cmf(wy_9ZYh{VZal8(a4=b=PYIk&K=Z?~ByY z*)$bJE;CZg7BDY4km93eQzF`jER#}>JZCG8%OR~Fk&N`y%PD~&H z^wqXlybh-{f$1S+O~AI5(~GF>cMS3`o-LG&BK7dYL2@C51RaAmU#(NVbkGEF;%a!8q`dPL^0JM8y^1=DE;hk$JT zO(c2jw)*Zi{lz+HFLHNA8NfqgBK02uBD@&!M&&4I`k~lW`x;<}7idLA^cCgB=j{c! zeQcu_;tVNDccU+iB&B5<3x)C#wveH zLQ_YaMbfh=tMka>ls~UhVHT7ES=y(}l2LuLa9zi@Bzpbt7xu8&f2T={*#&z{#E?Jp z@EtzgQ?lg`!1|^}Pa*2_6!_=!QfmnD?P#T45_U98vj3As^2_?!uC1KP)O`EE!`9Vz?5U}Z1;bc)^zT!62uphVx zW$i$fF0@SJII}^9BA#Ec8?S8fUGAU7&04UmmzR; zRnk;IIA#4SxQVtiM2=bYWzBR zgF<1ApJ6)uV(epr;kIIpPvmCPs&yDf3XsjeSe4njn)i}^eNnMgOxx6iG;leDve{_C zkEqn1Wl($ZNM1Wq+kU_?Y4x#-?-teNd>J#|=fTu-QX zQ}^~PIPcX_qr=nnYfopKR;3@+vcuAWY`!?`hj}WUiTPl&D0w}5Yhaa+p1v|-7GLyU ziKC$?5;oK5Q4&)Wuy<^6_p?|iM5VlGX>CwJ-Fv%0yKRZbzyCA*0cr#Lll!5p4$Qs_ z+*dK$iK@5&Rd%Gj{(u!H1RCd_qLXvO&oo<`p{-qFJr7z2JwG#dx7S`4Imf6qdURqI zX~)lDE68oO1d)6Zy?)=D3!#$S?*$nch;gHvoCXPOC)(>m10q6?kE{jZM(+0ClN1RM zV;9{IQ%+?BNMo6*R~aM7FPBtcPAygp%XF7-uqz?*Ow-!Du8_(S40xR;Q7|mUO}0U3Tyz#dUH9*N(9d@r+U@ZAA!OM7_zus{ z6Xfc>Q?rW6Tv+TcQu$(w1t0betk&o?yi}%Z!}>hu5D?`%ryoH3-L>aPn?~#5iui~S zwpc&Qf$|5;QR&y7WksQsOYU0&+SHDoc0P0EhhKIkMo%W0R`P%hF+5*z3EfDIX?$*f zE6!2|Qtx7cAOi|wfK#P_8%dwKD%p%1J>NRDBj2z(4x=f|RB*puR@$&|ZE7A!`7&@* zR{bu046qNuRI;ktce`h?3w-eqN_4Z39KwxfQCV&^#X{kAiX&^?;XPOh>)qe#z!@AW z%B}7iIvp>_B6lZqdS~b6>!EJypKsZ@;%y*`#=|n4@VmB2DuqcMvUMfXIelSxF!hlnuE)ALdW?N0@4*{SV2fj)Bh0O`uaw^az5lKYyA@6kUhpoWes1l-wa zx3aa+IM_}7sqpw@&NDDngI2Oz3&c_!lQ2c)<C>O<-000%K7W(CXS`-Jo zht+p^FnFsX^{`TK!zLzFgec&4$4>mbn$gTg1zz?izMUh3o|U^iseO*`5dR8i0M+ZI zjXghL(l1HkqO3=~mn&XZ*BXv|Z?Y zKA-N?&VdZwW(iU(lUV8irFg63XHyP+FoICZT4Iz=J`T9gUhT_%*}=p*=6PPvT3t`x~wNpm+(S`y6}i}>)8g20WzdT*uRcfg=JLz zA|yZ#yvQbC)LKSuzi4DEtI3XM&?ge!O;)!xGeYm8I@D^ho}2?bLpT?59|?Ii+Jnc? z>Tb_6jXwyn@LE-WKY8?A%<;Kd$!razmDF6ImkBN*k=#PR1U$NcvP(wE(X4%4@r{0t zL@SB*a``$^xW zwhvqOW{Fdscc`wb|2Wn)9^}325Wd?H%eG|p#o^t{S@@3Y**6^f%p8Fq=X?Zhs&jK{ zy-(<@wyb(rC#KN;nDK7cuZT2`2fxcs^8r5avKEHaGi#%|F<>pe`ZUqm z9vVwQiM9WBp*5S1uPSf-L`jK;+&IubjHMX;S-OCB1yo6x*W88c_1fmlME|XwHK#)A z8EYZd`=y<-*&w;UHFTP|6{?=n5y{}8R@F60wxL{lng1|xFJHLG-*w~$3kFWT#O{*F z7#>n{@%t;V!$|{vVtcA*TWcVs;^<4Pmj8DskL*m!U-Pt4h6VjhY$^LwY3&x)*!8K4 z`%DKjTupIfOx~`3SquG6as040?B=`rGpg~5CG=&`@&;D#%%HeagXa@%fy&U+FZP-b z1c`YP+m|ZFY@3&-qr}rovr)_mzPBX4*eLUWTvC0&F+-VfM_BV(cdj_DtY)IBNDzF- z;EzbU^+`TT;};QPW%i}jFVu@mRM#fPO!VpWn@UIC+kFSC%t3mJo=E+e{&w7t{m-}A z248HN*6KsfdxI>&KmDX}1-(~Z(N`=O=%Sb1yW0f>4EWX<-BW0_9%4upd8s}tyuU6Y z3mD7+?`srt!6EzxKF45GW!LI?EO!;%S!;s^LkEUhjgL;t@7;R2MNArMu3Eqpj>mS@ zM2&7^o@P>Y+fVvX#~Tx-E!H+?q&BZMgLhjUgVUm{&yO1xoa(R5y@TydJ=-_nugxPc zcc>4&iF%aSiwtvg6Jr&wf? z#~)owgw}G{M3#&+=4m~@u>Za*)DER;gnS8jBe@k_bQA>@ABZ&h>pIRBti36Ma7u1o zF?=8CIC6a(N4(N?t>og&73)c3S%aQgK%V&hiLe|2GU7zAAe`0S$9+EeiiUwJLhJ~@ zapt*eS`g7?HM@Ovc@h)3$KF)6N6{n%kCjD;CC5w%HvLt5s>rXlws%4Yaq(mtek{rC zh;y}Z>-YK31c8f@YF-SI+dBz^DM-!U#1zE5V%pQ*h->)eIz!rZ=Tn-NA_TA^c?1b1rO?Pz&Y*zX#}cY53!t#|2?*NCNS0Ej4p%2G;L6 z4n+Hw8|Iedvi5xAOO5`RuMatB0&#rws*ppoF-T194y_)N zeVFTkvC!>~!#^Aq8$k2AtJkX+rK5@-iR&BqRX&dpx}Rqc*OiF=8&gHQE#_I%V_oik zn82$Gi{j@+L#KR{>er|G-@~-8Y&l~ZjDg=jPLuN5+Y$Y)TJ`&w+gWOX7lV2VO=Z60 z1c#gUoNvA^_(vh;Id3iNTlx+J-OV4n>@7zMU2%*Sf*>VXO`!^FRJ7T!=G{Gsh!m&A z{aRZSeRJ8F+@H#;#FZQ5uA)Lw4*9sb=1%;U&JE8h?RwufdYc%KOFgAkLAve9~9ggln|Q`826pTMYA1`Pi+?5eH% zkJ`xhhQ4<_(BK}fb3E3Obx{%r>iv6>FH7bQ9TFD00JG9jX!^1_kmcq7N7j31=57s}isiCN&reb%>X=M7Gliy4s3_N>4K_?W&#gj}4A8 zCM0g~>z~kUiow64%A3ySyAWD$DvCv^R57()sE^z?K;I77o}6~5w-!k3jS|N{TwV!3 zRJDBA!0d)yv9LPVq3|>G-Ri7AB=RX$;Sgf9w)DL|+lLzi4F`lhy(v}(I%!f`Nj%*} z{bS+L5MODiYw)z`_M;hImF$FQ^6EHp+w0&tLh_^_uO904k*0X>={&Y4Cmg%^+vZN$ z$rnZt)WH7nf>PbDL`XzPTt-#y#q}wkbQAsxBOVMz*^@lsKB$A zj`2M0Z^BRsw5@(UaHl6wW9;ClGkK1vGugsY4WQM+F>s}hdND6kaIK)xQk!$d{-_O< zD!|V+VKm~;-o{GXn#O5MQotAw;aIN9OFW05yPT?Oyt*67kb2t3#|!U9Yf(}FDk^KL zQaM|EQS`conyx#U5zhyOb9cD;`?sI?J{WnMq3eWzEZ_TajzB4e?$L!rT)smkhN_hiEm%+fGmU?IntEOLSW;P3Q>NB(?j z;9ZmpG&w?dPlnWHICxD5qyiSZrOQ)-bPd@vB9q36_xTv7N0vM86Ata!La;A1E*-z@ zLSYqzywB!Q7B=(~=&U{keRke!8_*`xBzQr7`P-9Px~8bk+MNO;CcN*(U(ZQZeSY+m zuEBUDd+JqOUrmsYrtO(Dfsw%(39>*QUs2=)FhNogC*1WW1+Rsi11L`U1N{xNSWFxi z6J8Vew7uD|)xk`JZbuewyCjrzos61>pFXR|-+VHoYAP>BY_i8ce{wuq7e;8zCZN>N ze#2hkQkXPP1%qXzm@vnc9?B`2uZ5>=Rw_JpA8)1I%^n{H4UXD_?^Ygh3szj$!=_%PgXONl|tRc=tqTciG+tzcB?Ih;Q zMcbbnR-YY!(IUc^QW2GOFZ0FRt}usI~SboMLtdi znRg4&R{^!Hu}Rinr?@N1h)X0;Lit?*(Q{g@aKt(-d?!I>6Xaj4>JKe z>h*W*=|#{4VUznAUZ{I?Z{<=|P>&QOcPn)2Ji!^&dIaAmq2gp>XEO&X25XF3pru?f zIr(y^!^lIDw7m%qM#mjpJXtB?We}W)1vKtdLaf2~4pU{`pt}$-_j3cAKlhI*hmYkc z7+2+mAn{C1pM1s7O6Uo*xJr(Ky@etXmx_?ZS=tndi|0KRVs|@y7wbQk7+;bD`_G z%af$Gp?Rg()w+@%Syr0Vvb{dgloO|grf$JZ>=|VC%}6ZFg>4LvFF<1tXmTJ}cG$vc zd02AqK7ef!3nD-_^vVvw$2yNl zc)0?j|GHdwb)YQFQfJXfxb?O-_4|U5NBXOQWK#vd=O3q(FBhxG`(N_kZbR}4kM6`` zU6^L?g8UnokJ8#2NOkiz0rw9WTZavMZd9Sli}zHNU%ZwZxRqufc_^stFEL-*>Fz6} zE0?SEaJ>l17L&^e6l(3|dUGLt?#Elj4ile9=TiSLk$v%UnC95=)6LUscd7Z)&|Qj? z)G?z~?m~KkM=6x>dx{S=m>zu6tNW8`-A6#J;=B3COE%1T&X;A)YalfJoRbOuuG>d; zz;+Yin$h4f{UeoLgi|svlJ%GaX@z;#%}Po}e(3QSo-40;M42FJ8FqE~JE)hifx2n< z6q@Iv2x-y z&zukZw=*3e(3UVX4=9Jt(cnBDPqw=p5|yBgT) zj%6~Q=0VdZ`SL5xuPjEXdtzxF@zibwia~=3C7!Zj(&dQv3^>gV7nQi++SV8H6h|4Z zM4OYjgqr7O2^&PcFuFvlpqnd;Qt*o?PtRg^vD9)wP6Dj&A>pS zrd=8&k|rkAZhn_B(HKg%uIcoOh|I?LdaxQH>Qp&aL`~nRK66rRu9F(m@nSXk?C983 z+fSr>@LmJy3*=3l_o)c$AF`(rmJsATrhv6NF>$m_p633YX+bG7k!iJOY?W^-hI5@n zI_ML=ei4z)(Q?`#73Jf}ZNliB`E|w>H0kBA@QY0A<$OhXB`~{jfJW{IdKleWU_}Wb zz&b@~H(X)tCos-!veuSvxRFKpdr1F<`0nnm`{K1a8fcC-gIuIocwp!Rh}S*e->(90 zKk(hO=X5VGYlhB|$23?1Bd+C+j!#kIBU6#I9sgLd)p02pycVH9tu$9h%s#KX4+S~& z%Eej9*EA5k|81>c3p%`VYc)8D3cYZM{~VBR)Nu$Y(|N4PM*iVmWK*@L55I~W*&ktV zWZRo84N&q06MX6rCJU1{&EXpu{JK_kR{O2{GlT!)CcJH?f4==$SO!l$YD&Xi@&IhK z>+zax=ak5T$<<;iUZtk1WeERwb*)Fgv~Rj{*rxB&8LxI>o>%%?y-ll)x*95X9M~rv z4OBg|R37LJsibVE_mRGWNgQ&w)1U+!D~0JH1>oCK4r?JJiM~OAAVFEHJ^%{TwQNu$ zkZhNGq;IuLfrl1hl&jI`;pFfeC+ZQmqWZF%HrT`3LCe5HQfQQW9W1OLI-4(=#>S>E zfmk2hSGq=TXtTmNz<2>mytA}tr@Ch}a5BKk_BGBFXZiOD)VQ~h4feY4oEPuw25t{* zC*Yp0DIhMnWAwL*E*wm_KEttbT+8T zJEd2c;Z1n|i4$nAl^`%gX|SSIFGSxlEPz-iH|b5d>GQqcWPIM=lfB5!hSJ5lSOIAs zF-)a};+Po~+dK_#+emmDjIh=$ko#iJl*kZM=SY952+#zV!0|s6SFC+bYS&v+tZ5>g zZLJH$wkIFA(|}|OZPgFC2O#zb0=lffMUPsY6V3MXtKDm}&Cyx!Z(4p^cjI_;0cJ`( z1d<xy`K!nK~4jr%Voeex3ydu1P)T2=eqMjsVxLHKu+PCkRD>CpVkJFTM#gD+qv zLK@=$%FDQfxvoP6j|}0#rPt+w99=^M@d!$jQY$qzJyy7!T=)LgiG`j)gGGI9K6;>V z!8$1EQ;|cJFi+YwT>0QsG0@Lg3?%$WtPqw@V?G{nx6uo;`1yGiL5}HrxH~*maHsj( z#F_Ox22YmKj2gH1yg>i766+j~06cNjwfybXyrX(X@t38sysx@4?W|mouhS;Vup@q? zJNTiiP7jU}il`aJdsb~z8(i2g1qcbJWmhJ67os`p*eF6KsZ+mCB7xH_4aax-J;yxq zdGa$*9!X`a2q6cjrg}?J`7aBNT6M*VMna*>G-(3z*zO8VuB%2dLNLZo7!C<2vxj1n z*Mg7G+D%UJJ%)SL+VeCk{&WwLvi>So>hMhMFX<-u20i)UEte0US=mxi6LZ_ojuI5J<;A27Q&Ug-6H@Vk9d9oW6Y$%*WyAmL}uw z3<#JqDIS`6wXSg;KI5G$FEk81{0%@0qcRz4r~qtL+Y!j623!VO|o^ z^{9Khc&fLrzC6g)8aGlYv{Fi=5oQ_D-~vk29YMj|^N&vV_ZYwewoD$2NMP(;WudU4 zcIO4O@!Y|OlOu(FvdpUdQn!J3KFzh^7gz|>LcExpgA`3u>lB2Xi(C`L9G+0T=d3!6 zl#kz9N0?JJG%U}KptDwZ&wuPa`ZY2Qo4GWq`6p0<%U!vJg1Wh+E1*=KN6T^dG*V(@ zV+Ex|cL`fX4FdMH)XIrghSIT=vcnSujO=tDiMXeQhgLi#Bu3AimmG$T<#Wl%HLf4i z=Wvgvls10Ar6?6k%H_P$fN54{z@LKP_*EW^56++KaGC%{L6<9C<4S(a$Ru*aRYYR7 z=2pmijS0Iemm`PtByH&hyyg%-oJ{TJo#gI(?F(yLA)v!BTdRfw)0hA>4%!uXQ^FukO z{CpHWv9?~~VW%hlz1gns6B?|H5-H}1XQygMIP^K=$}e(BRiPp>!3dZ5Mr^HJA)UfaD*PC0|!ZISj_RGCrn zn82?ONkWnX1+!9?=J6fR`TTy;OLf9kVQ7TiX6w&2IM)HQ$kjavLH1QXCI;`*ZErm0 zPFdIm-(X?_n(+HavX&*NHIk%_;-P}j>?RsAKX=f^ zOM%ZHe8cUxrF(P!5VoV`%7zGQ33zUGuoe^i-Qf56yux74e{n7wpc3KNd3;5ZDE{^A zFkpLkUI5CuuTZSyDbfR9%`bKRwaJb8nrl-rTtJ@m&U7Io(mgmn77^?CnohrUbXEI4 zpSfE%?WpzD<{_%yf#jmHmTu~e~ntY zYav&A{DB)V)DB3J;Z}c^A0|a+ieVTMSGB}))cT#bCmi zz%GRx`gb@^@_Greu`$u^*4K7EZ9$gAZBaWU@qSnXVpaxeWi*w1p+xDN0z$6a!vg`l~NS#A&j$nAxL7#!8_c<&IFezKozg+tRYz!kqS zNZGJ%6@*-mH~#GmiMqCnd}#lf_8HGk4{WzzLn|-D)VBRe?<{iT0+e;r*2Z|lqhq(^$kMYYV|ztOUB6YfEQ|az*knV1zLqO@~MZeGQ{R4J(=Q^|JOq}_glGEjK z$`i>hp|d;m?6e!8H;40^zF&rqaYvDQMkTDZftL?Y2RcAX09KP#JYy?rM>^N<1fLL9XF$HBOhKzqo z6VJ@Fhd^c}&}dnlzsp3{%#=j-W3*K)eGREqsxZ@ka8sF9UUi}tXeu>Qu-SY2;biQN!VA88%#DY?xRwJ-~jei$a=j4j4xtZo(81!qmAFS~nDB&IP@`3-2e;T&OYFl5(+i}= z*te2hg|d>^3)A6a#UksSH%eAUR zmo4@U){K-sn>UAC-0IXsPhmPbKaO&v5&NaK*6N4Fwb4uz>$6Du`$wEW`MQkPphJz@ z7#@QjTN+nT6i{Iis>Oh$4?{baqkei8^fP-m;i-C&;_eT5>;|c$4=a;q8A ziMq$p$+_B#N_cPROO5$MURysw!bezP>PVh1-w7oh$&U7(F;6``6=32qT^2Mq<`C9=JY*B|Dq*%bQGr+a@qn^j`jfB_8)&;qa1RMY zhcufxfM3<(q=*V@)gn3dR=j=k)hFjRxNF^`$A6_IW8nwimB0A5*THoq6(%)4qG+zT zffDD_muDoRUD$EXO@vrZ$t~e-&3zR1JS778rH^3(0x+Y4KaYiGFlEI`9UIEuHn7)< zuT;7)`hbz8#)#k2dM(A(^!G1QVI72;`AUicRcsD3OXDy@J6>cOapCr1Z-JMXgkj^X z$MDR#p*3rosIJnPr@C9G(GVb(Guv5G9J8x1<8;-lDh1u_^t_-BaL9pDnsX|BY62xz z2Cr=l*4z#i+m})g?%Y4kpU+&qdrv>YcDLTcECWqGJg%@OGtJH2AKsH#@LrD<?LX^Y@(0UIizg>ctr#!E8EOv`%DN>>uBx{U4z|P znpsRA=rF40Lxwl5{o+a6x~CfG?Xt*s@)opH8^Ss^cFu0HSk@`L*VrVAl)9e#C3%<1aJ`3)scF1?Iu*o9VowQMW3f|E8MDFE-+ za$;DottRv)`&Imf8sDYRn%jU+?`byAh_{7XZp^tT38f-NR z%Xv^Z%yo}{7aenX%SIk)Y9+?FHr^~d=G?uotxT`mfe3(0sqhNb017%WDN=x4eYx96 z3^Bkg)KZ(h#wT;N4u8_YY!U;BLuf=m3i?#ej5c3 zKQoLp5Olu4xt~d`4jCMSWn9wkDy+=H9y^y_dnrow@bZ#mCv@s+>KL-Oo(YhyDiFdW z2sq5X#7oOagUTQ~^bPPp0X9IZF8WGHxCIOTcZ6XMng&~t8&_Y-AMd1|=t@)?_RE}* zoK?O~-PpuUuvaqn=T96PDV@k>Vg8Gt&H_hALc){}*e z)pf6}Rg8-$_dBV4|0zakyaytFX>fzZOR%5w6w!yDy~t};d-ndXow$7<A)udN{{g3t-M)$&BD_KRsq@p^cbwxC_@gDir2ww+lebLv@G~1C?&k2xpJh^WM|+kI?6;L{jO3kCHI}n_X))Ts1BHo*$6y&cKDGjraM@R3 zT7Dtm4&d(1U)MNU=3(!)TA`U<{11(ig>Ia1dpJ|Kz}wFnu?W6~r6ltdKoy~K{3%QE z-m3C2(by4jvt%z*UCcFpRIjYJULjfco#1P^{xX-VP{imguZ7e%U@f>Iy+hYfh!>&T zY`>Z|A;W=F3`j|36j+RS%mn;$o6gw(=ry|Rk2ytWU+b=#j1x}v2-aRyDSzjoZb`t0 zvfq|C6{H87L!{YOsbsT+#E^6Xt>HH04|#aR`dtYcM@mR!K;xF%dWl|kcs@oTGxnYp8iJiEi} z39jQJ*{P4Y%S*6g)5~X6%$`5`8J3YcT>FcO?jRV*wp^Zp21*;-pJB5&PM zKj_ftK9ZELcN^Y>6o_5@foSsgEWT}K?1SD`>FC-8Sw-PK4yVAzI3>Y#k9?!I^Ve5b zkeLK!X<%!HN}Hj*IV5+w#mr$?Df^6lnQ9YijI2&sbm)rHquZM?^WT&xtIpk_--GM` z0I}8_+fXU&@A2p6chR9Q{Ok28ze(JSwggVG)DA&~swYF^{W7QQ^jYg+)7Kg^eHZ?B z$BSvN(~SIxb3Nc#M^KmF?^|sFm5gQcL2n%uGb-8dzTu+Jfx96mf1i5mm3-an2{a6m zc3uyPG?&!kq_9K}ny16Ymiv{E%&5!&Xv3w;|n3H01ujIOwJpfwFpy3-5!JZfIQtWHZiY3}bJ zfHEyh*u<~A9E7&?Xs)b}RPw57$BzQ8geWjl9he5B8K_XPOoH`8}!{_vOm_a<^>eKEc`zZK;Z7+5XuM zk2JRKN3mCi5@&_iqEdiI&j9E4#O4LXgq?{Y;VaDcoWOj?L02&IL_0wa5|tDHowdO+ zJ+Es1{$Z61Y4kF0;e6$BSLE`3|K~h}k^FZ(u_5Ax_lowb-yvHmhJVO!{4agmjDZ^5cH?cPvhPerunv(5Ju$W{B0KvVo#%-(I!tI zR_~>;E|e|7Lj=4{-PcgPq4JlZW8shs;Ez|0c`9iS(>Q}Ne7Zxx4E)$6;2@UKA{Xqa zY`~L3b$T*?CM9&-i)L|-6TADJg?!3IQ(NqTqTpeg9ZniHz>^8;SC0KscK%#y1!u4? zeIDOZc6Z95@g46|YP)O+)I6Bs%ys#|P zp-_W5&NEjTNVJ-l9zWqW9`oD?=516}a}QL~2|>D4%==I-I;4H6#9p_aycwD9V!%Sp zz~x~4=`35!tYsf6g7tHr8i)n_(h2S-<=a~=pWTsb%t8=0>L(Tf6Av5}DGnF875|q< z470J{w=T;a{?vaDqx|1$5N`RLwU_-a_G{KY%74=h5sw19L3Wq+h(S^AiLKm?szK^+ z>lTFb+N}BL*y&HS4%}(!ydMn8YY$L_45#1?C(%X77U6JhbofhCJU)b25hKuRGlu1C zI^q#$M|{U&dfEgye>Z1xNf8*#!^xI}xgME6mC%Z@)wvOV>;U*HR=>~+?6^Gj28LG# zeeyIyfDC@b`(k2m4k6{K(APAvFRJC z!d9qT38^IMjBqxB$kz5nNlWg=I7vdW%8Q@b%G$EnR_8dDL$7XP{U(aI|F!;~B@+3) z@-2lfTNxWTJ()|7qPQ{RTAy-2b`tu@OnvKx$iM2eI15MJPiSB#?@6qcr%qNJ!QY{( zP~P~w7;6>)HR68g^HW*SUyJ8Z%<~Xf%jKUI^847(A(F~l=`-ia!c2f6?Tvy(Q2SZ-noUq+Gnvk#`Sm_3XaRO=(GUWVi|1IxQFJ|t+OxKStTeBJmvsV^ z&C_QFN}WV~9i_dL`bx;i_^ka*%@Nu@+tyegLmU}RXOa(To_l-LStw?4fM=9(8yg3% zdR4+8-{@kJXPa6bkLE|TSnO5W8<_{b;Su#qU?~^IwE}s#wkLQTk%S*&%{oqQK4V=J z0&@VXfu4Fa!F-ro>Nv!BxrN@1@W)l`_;N~u&s6zV7y9#zf-5K^VFE`Y$Ni*>Ln}i% zC=IrMAlOAvGP(DjCPci0eNI1~i|F67JHTn zIa=}{zZ{whmmrbV9wsa^Bc5VoDUQX1L!lk0%9d)!P@PLTfbgFtJhX?#vpXH?EqZJG zxaR6+$eqb%I(hMx1;7vwcdls#ZrKktw)lfBpYb`D`aR7gJ0`Mr`7KKvGKK|4*Vi7q zHW${HHV$$YZTA57v)0d`$^Q7`e!&UBc@~_iwHQfe=5sY8b?J<=&kDp_+i10(;#`4y4T)d4XN z^}tV(m{AcLc&CXdVsY*bZS8sGAHMFx_fCkZQ;7QSZ#43hWM}!0thpI} zwDx-YEW8?CnyRRDG|$t>6JS_97upMOX%|jts7QajDF|}Qj&#yFQ|HDyv)eRW6`!I0 zoNraVmTxygb<;}xew$z9_p~TAoYs>Y`eU?z0f$ z{$A5m*|)F+O)AkEDm=r|)9-F;0f9{k>`Bue6ell>ws<7WM`$?uV}x!%1nORV zegq-iWs&fm*HYcqv{FNMdF6$9-w1iC#x;LYDS0n8S?GG3z@=Zho|e-^%2(BzFAg({ z488y39`dHa&$P%V23C)!N%SQ0tM@vAUrHhrS2kzqNB{XKwXuFl+UWD>hi1%u2F52>*%_>ADnH}#WV>Z;M zmuvB?&1;A0q&EIq5?;yF#%N33^tv@kvXQZwaOTHQer5!FY znBCenevOwCOyS32;6YU>c&i;@4Z|}?xk_*-+O_mweC00$=U4!cIoiPT?9_4y|IrFO zf(rjYp10Ru6A~p#z&#}W#KV_?m*2_Q?RFbO_)vjKAJ4yxc@Pg_E0)Eg!o3Wlufy4k zhhEg8BMFgZ;Llg2gL4~Ju@-iG%Ts4=rsE{{21m@ZlT=tELg*^Eq?po+YnuB#HT^TpUz==*a6_ zmY;DFi7VL*uM1Up#pR36VNUk94)3;rvHSK`t!5hlG_2U-#yai2CL#SlHcL50U+^5! z$&_RjXE@;)7Pf@h6__nO*HEq8KC}xpBCCWW3pql7&>xcb^K5fja48N3`fM}7y4#Vs zOnb6pqD=9Ipuii_G0d&6X1ofr;yr4~(&mZlfmn4>t@TKkt8upyP#5Nb;y4ej{XMM9 zz~Qs<$yoL5tG(B8nYdX6DnY*kHqk%KB3i`(jm(*+A zQs)8Lv8$3dCdygtN5*3oU?z{D^&S;x^~pPAvOTr1A_rc~^M>Y*%V zW-nTC^gf^C2(gBL|7&}O6k<_4Bn`V1Vtqv-vJxb#ewpw}04(7nRyz$;}F<>dul zU7y7nV*3ouvLVth=H%&BAxF^I)bY0(6s*sF8tbTBc4WT~(9?`)Rd7Xfj$?Yv%!mGOYYRU?tC9D-S-onbKG2Zpmhl}FGa-ZRFWhO zt@IhVV1e`^S8{n^3gxa;__oDyYA1d^9+|g+6OkZa=(&$Xru{0DSSD7zpI>2*;6|4k zxwXQLh+q5U=yW{wKc=WcKM!&%)ALSja-spyM#-Ft*u_duLWiIp6n+vlJo}A(mKc zlq^-RxSfkI$Z`?z>r4Va;hM%j`cP#Xgp>1oHaiK78K~k&7kA$$OSrGvFH97xw;duv zBoWY@esG_%QLwhJWS+u)I>xUxq%15)xrr3AR=5SgqYQ%oK{|qrQ@r1nR{FZ_VdWDn z0)NW-JNSVsrNwwa*NbLB%&a7Mgk<3rs}SU9Km;*h81Ex;L_U}vgO6tE;jq>?xPpMp1V!|{Uf#VVs5&Jc= z1%OT{7+BVdB8fgs;7uJK#D=v)q;Mq90gL!jeHzZxFTj{fbvew-_XtiiBn+?=A;ECR5VH@%u2-LBFCE!R0;%{Gw%M; zT#V_;3XGqQ6z>xe%AIc$1D7X)n%_v*-~+)^O&Rz$eTYHFW(E_YpjDoHt@DUr+UmJ>ppxfu)Nyc@|xGCrh{8?pB_AP!t%F`@*%yO(h<_G0{xsT7M@ zaT%OUrv2MwO=DLMCWH+oJh*1$L%evDjt|t(hSf3?u4g_vVgTx1^q+=`OIL_m2e;sJ z_$bObB3Fz3TX?jYbvGQf4(hST{lU-si9c(0w7X(KvY`!XQ($Ek@Nqy{b zvBgF(3A0xY*@jKizi~z+)T@<+YVwFBytI6oT=zdSkka0g-?>*hb}(N}D$3)3Dvj8=jwGX>XZ&@+QTr6esQ z&#p7j0Ae?ZuX)Iq5!TBx|14?`hZTvq+TsmfKVN_>T`B5A|o8JfFNF-p5 z1Q&zDL0)}@wke?P_%S=WMu-jSD?B>k-{eD+=c@24HiMGHHxw z8pL8?$S~^}wq%nZ9mA({k)rRRb0E1fyO&dEuK$)z-#aqZy)j;X-@dSdd2VfGy~W$s z!Lw#wN<^q-MY{HC%DpSKSemr`g)RIegD*&mTcuOl5(D8svn~YS1UQvnP9)>yeG{6L zK{~|2A|qs4fk(au2k7J4FY+>@^yAamf-E9N#)#o`Uuad$elVDtkG*8QPV6<*c{6Sr zA`rv|8N?*jn067IpcM<%$!fI4SoF%m6RQJva8y$@X2f&YCr|kG#9o6BmXOwU)F|$_ zh@iiYolmx=h}*dL!@SOCTy=*U_7>-bOE8;D4EQ8*ieE?on^3+h9K5Sqztx`0g1gbj z5i*10Tiqg}XpTz;5e4%N6bsjG{zW49k=SogKg&9G8$VA-6s?%^;%8)`Y6^Yg-EE4UioA9J!h&WBT0=)dOv(bQP zW}5X$nPlc}G#;hj8)1eB-;t^{_d&cqu(YOyNkVqo`TrMJ9eS8Ge5|el84ug#i!Pfy zpr*&18)ti$bwqN&M(uL7R=oVz)&96}qXXkkeWK+z^15M;yM&ruLfSi39Xt#aX$1HX zWnQv`{}epn=$*Z9At+%vc{)ro9+=z}@CP3_NpcP=PGHFai(DBfe-<#zM^IWixrc;cBPhZ9?F}Xextr7%g zVl1pN?W7Y#s0L4ltOV$f&1ciDe(~rKN%?YEX2+6bThc#o4rC?O$p1Hh#i7cx=eDsO zwf22{_z{XNXi4~DJ?N$?&CpTDn>Sm63PaC1kxso;jdMvkJ*em|h}l8pUW!Z7-HM?% zSec$deFY|LzZNR2kPL;09Z3|+tUIPC{6Og;e^ogG(0WgL&~Du{4bSV#;@ z2l4efL`_mO>y5SeZez6~CTTY+^)H%5z2I8E9!~`*RVzMD8wzqAca~-GJDrpG^>Nge zMg9+HiGMJ*etESZ(kX^)ocpu%>)d>I+A)(eGJ|%@I$P#F73r7sL2sHAIT;@~wlk(`$*KMx=->O%D$V+uqz5viM zX}4JXh&36tEKArG+k;SvwVO0G@~!&7%ZCUKWMb1Ozq*T=O912!)O_r}o}v735-t;! zG6#VCm8g8Gy8GI3k)cNtj=@<$E%%Mkm|^_-%xskK^$ww2ZTc*R=6{|h#CU?pS0iOE zYM+&T)`XQQE^Yr8X{vP|CPf^t=zawh3A6LW2QUKJhhTJtEa#D7MaTyvBY@}`J>vD}0 zk2f+rqlAh9?a&LY4+vGd# z^nAyZGfh|wc|FrXI+Zg#4*3s5Pi6vas;_E1&|!SCh!`D}SZ`!L5UR6*_ni+be&c%& z-@qb8wUEM{yr^2(t>J8dFA`z-TIvzuhYJ%gBKO-|r3Bwty4+NK<-ZFVv6=&+D$RWo z&d)|pNl2++76biCGeI#hDlCIa5p5=V)O=6yD>c((CRlk?Oo3xZQOe)Z3}iL@#|_c} zct$=cB}Oa?Mf{cPGnYNpC3{oRuGLPxLvYQHRYI>ij{JWO3)h<=yj(JBVvF_$Lwxe0 z!AEN0F1%mkFmYMQzMX)r3?nEK`YR@aE1_O8-+nEX@*d1z?;}SYG8T#cd4&XA1196? z2i^fRLRW&agbKdlvtpwX)Tc7n>~-M(u3VNLNr zO}Jm>k)L79{=8~sW`#s((rmCT@BP3S>~oeQO6~9g-|Qf=h6Sp=$!GPvolR z^67PiL!6SSKkc2uX#DAH!;tLwOK>k|*JsY0ljqp0y`6~``7OVZt_OT1;?&vGPQZ*?G3u zP(((Ul*m|uz9fGyc%nlYT2zD<7@~(thK;!Dp2<6LP;9D;=E*IK#pApvK}~_`M{tVe z{H|^lzgY{7|6l3Adbhc(Leu*;Bu>pt!J$4YowHtY2e;yipde}I5YN-b0W%eFbkyJFc&sxh*_0kGR zi@nHoiHYM{sZ%HQ31Lk?0f`j)eXW0t)$NN+W6Gl3==tt1rI&gU91UqOI9@L%kOyc0B+-(|Z<&2*be}D^Av!}R{bj$(q86JnlGmjFYe{n2{AWdk09uFMODFrVe+D|WlJR{-J6Zx= zeFZR&z}tJIQ=5^cM?PC>wgl#>3T%CQbxa+T{O@VaX_fskiJG_qyeXA^Hs#<>d{NQd z65~t)>0W5OXXH$K;&FWIFG6p5uN_#X(F;SG_@FWI|DK(LdeulNrYoq;r6X2HJTF%W zAjytCq&yv&3oI6q1gSEh0nUa+L|MYB+wH8A4(j`eWrS5-LV77qA7*L)%JA-ywe(%u z=`IR*luo^4Altb^Ws>BR#Y*FNS4I%GT+Oyx+i>!g6E7q5r{(s6_p@oBd}?Zt$N7aL z{`>g90jPkuF$YU!uy(Eand@8QjE-EtJDx8PIW(o?_Hu;3hEzXs8> zHAuXCDj9{)gwZ%=J%k~jl~4)S*;cnxwMh?gC=)0dg^38h;4E#^uk=cN^kq)w&iJ>~ jBRK+l?FNGc(;lu-3AAnWcrT#^CJQU6BvB=19Q6MHr-gu5 From 6ba2b3fa3cdeb26a49ea7f7813c56077859c8b59 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 1 Jul 2018 10:14:23 -0400 Subject: [PATCH 013/737] chore: sponsor meta --- themes/vue/_config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/themes/vue/_config.yml b/themes/vue/_config.yml index a997f01584..02145da466 100644 --- a/themes/vue/_config.yml +++ b/themes/vue/_config.yml @@ -10,6 +10,7 @@ special_sponsors: platinum_sponsors: - url: https://www.bitsrc.io/?utm_source=vue&utm_medium=vue&utm_campaign=vue&utm_term=vue&utm_content=vue img: bit-wide.png + alt_img: bit.png - url: http://tooltwist.com/ img: tooltwist.png - url: https://vueschool.io/?utm_source=Vuejs.org&utm_medium=Banner&utm_campaign=Sponsored%20Banner&utm_content=V1 From 8dfad33c364f74a5b3d8d5585afd1d0ec9c4d599 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 1 Jul 2018 10:19:29 -0400 Subject: [PATCH 014/737] adjust sponsor naming on pages --- themes/vue/layout/partials/sponsors_sidebar.ejs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/vue/layout/partials/sponsors_sidebar.ejs b/themes/vue/layout/partials/sponsors_sidebar.ejs index bc2f052e08..2b22b4f2c6 100644 --- a/themes/vue/layout/partials/sponsors_sidebar.ejs +++ b/themes/vue/layout/partials/sponsors_sidebar.ejs @@ -1,6 +1,6 @@