- {% for post in posts %}
diff --git a/_posts/2021-10-19-pytorch-1.10-main-release.md b/_posts/2021-10-19-pytorch-1.10-main-release.md new file mode 100644 index 000000000000..321f60f8e02e --- /dev/null +++ b/_posts/2021-10-19-pytorch-1.10-main-release.md @@ -0,0 +1,104 @@ +--- +layout: blog_detail +title: 'PyTorch 1.10 Release, including CUDA Graphs APIs, TorchScript improvements' +author: Team PyTorch +--- + +We are excited to announce the release of PyTorch 1.10. This release is composed of around 3,400 commits since 1.9, made by 426 contributors. We want to sincerely thank our community for continuously improving PyTorch. + +PyTorch 1.10 updates are focused on improving training and performance of PyTorch, and developer usability. The full release notes are available [here](https://github.com/pytorch/pytorch/releases/tag/v1.10.0). Highlights include: +1. CUDA Graphs APIs are integrated to reduce CPU overheads for CUDA workloads +2. New features to optimize usability and performance of TorchScript - profile-directed typing in TorchScript & LLVM-based JIT Compiler for CPUs +3. Android NNAPI support now in beta + +We are also releasing major updates to TorchAudio and TorchVision along with 1.10 as well as introducing TorchX - a new SDK for quickly building and deploying ML applications from research to production. See [this blog post](https://pytorch.org/blog/pytorch-1.10-new-library-releases/) for details. Features in PyTorch releases are classified as Stable, Beta, and Prototype. You can learn more about the definitions in [this blog post](https://pytorch.org/blog/pytorch-feature-classification-changes/). + +# Frontend APIs + +### (Stable) Python code transformations with FX + +FX provides a Pythonic platform for transforming and lowering PyTorch programs. It is a toolkit for pass writers to facilitate Python-to-Python transformation of functions and nn.Module instances. This toolkit aims to support a subset of Python language semantics—rather than the whole Python language—to facilitate ease of implementation of transforms. With 1.10, FX is moving to stable. + +You can learn more about FX in the [official documentation](https://pytorch.org/docs/master/fx.html) and [GitHub examples](https://github.com/pytorch/examples/tree/master/fx) of program transformations implemented using ```torch.fx````. + +### (Stable) *torch.special* + +A ```torch.special module```, analogous to [SciPy’s special module](https://docs.scipy.org/doc/scipy/reference/special.html), is now available in stable. The module has 30 operations, including gamma, Bessel, and error functions. Refer to this [documentation](https://pytorch.org/docs/master/special.html) for more details. + +### (Stable) nn.Module Parametrization + +```nn.Module``` parametrizaton, a feature that allows users to parametrize any parameter or buffer of an ```nn.Module``` without modifying the ```nn.Module``` itself, is available in stable. This release adds weight normalization (```weight_norm```), orthogonal parametrization (matrix constraints and part of pruning) and more flexibility when creating your own parametrization. + +Refer to this [tutorial](https://pytorch.org/tutorials/intermediate/parametrizations.html) and the general [documentation](https://pytorch.org/docs/master/generated/torch.nn.utils.parametrizations.spectral_norm.html?highlight=parametrize) for more details. + +### (Beta) *CUDA Graphs APIs Integration + +PyTorch now integrates CUDA Graphs APIs to reduce CPU overheads for CUDA workloads. + +CUDA Graphs greatly reduce the CPU overhead for CPU-bound cuda workloads and thus improve performance by increasing GPU utilization. For distributed workloads, CUDA Graphs also reduce jitter, and since parallel workloads have to wait for the slowest worker, reducing jitter improves overall parallel efficiency. + +Integration allows seamless interop between the parts of the network captured by cuda graphs, and parts of the network that cannot be captured due to graph limitations. + +Read the [note](https://pytorch.org/docs/master/notes/cuda.html#cuda-graphs) for more details and examples, and refer to the general [documentation](https://pytorch.org/docs/master/generated/torch.cuda.CUDAGraph.html#torch.cuda.CUDAGraph) for additional information. + +# Distributed Training + +### Distributed Training Releases Now in Stable + +In 1.10, there are a number of features that are moving from beta to stable in the distributed package: + +* **(Stable) Remote Module**: CThis feature allows users to operate a module on a remote worker like using a local module, where the RPCs are transparent to the user. Refer to this [documentation](https://pytorch.org/docs/master/rpc.html#remotemodule) for more details. + +* **(Stable) DDP Communication Hook**: This feature allows users to override how DDP synchronizes gradients across processes. Refer to this [documentation](https://pytorch.org/docs/master/rpc.html#remotemodule) for more details. + +* **(Stable) ZeroRedundancyOptimizer**: This feature can be used in conjunction with DistributedDataParallel to reduce the size of per-process optimizer states. With this stable release, it now can handle uneven inputs to different data-parallel workers. Check out this [tutorial](https://pytorch.org/tutorials/advanced/generic_join.html). We also improved the parameter partition algorithm to better balance memory and computation overhead across processes. Refer to this [documentation](https://pytorch.org/docs/master/distributed.optim.html) and this [tutorial](https://pytorch.org/tutorials/recipes/zero_redundancy_optimizer.html) to learn more. + +# Performance Optimization and Tooling + +### (Beta) Profile-directed typing in TorchScript + +TorchScript has a hard requirement for source code to have type annotations in order for compilation to be successful. For a long time, it was only possible to add missing or incorrect type annotations through trial and error (i.e., by fixing the type-checking errors generated by torch.jit.script one by one), which was inefficient and time consuming. + +Now, we have enabled profile directed typing for torch.jit.script by leveraging existing tools like MonkeyType, which makes the process much easier, faster, and more efficient. For more details, refer to the [documentation](https://pytorch.org/docs/1.9.0/jit.html). + +### (Beta) CPU Fusion + +In PyTorch 1.10, we've added an LLVM-based JIT compiler for CPUs that can fuse together sequences of `torch` library calls to improve performance. While we've had this capability for some time on GPUs, this release is the first time we've brought compilation to the CPU. Check out a few sample results in this notebook, + +You can check out a few performance results for yourself in this [Colab notebook](https://colab.research.google.com/drive/1xaH-L0XjsxUcS15GG220mtyrvIgDoZl6?usp=sharing). + +### (Beta) PyTorch Profiler + +The objective of PyTorch Profiler is to target the execution steps that are the most costly in time and/or memory, and visualize the workload distribution between GPUs and CPUs. PyTorch 1.10 includes the following key features: + +* **Enhanced Memory View**: This helps you understand your memory usage better. This tool will help you avoid Out of Memory errors by showing active memory allocations at various points of your program run. + +* **Enhanced Automated Recommendations**: This helps provide automated performance recommendations to help optimize your model. The tools recommend changes to batch size, TensorCore, memory reduction technologies, etc. + +* **Distributed Training**: Gloo is now supported for distributed training jobs. + +* **Correlate Operators in the Forward & Backward Pass**: This helps map the operators found in the forward pass to the backward pass, and vice versa, in a trace view. + +* **TensorCore**: This tool shows the Tensor Core (TC) usage and provides recommendations for data scientists and framework developers. + +Refer to this [documentation](https://pytorch.org/docs/stable/profiler.html) for details. Check out this [tutorial](https://pytorch.org/tutorials/recipes/recipes/profiler_recipe.html) to learn how to get started with this feature. + +# PyTorch Mobile + +### (Beta) Android NNAPI Support in Beta + +Last year we [released prototype support](https://medium.com/pytorch/pytorch-mobile-now-supports-android-nnapi-e2a2aeb74534) for Android’s Neural Networks API (NNAPI). NNAPI allows Android apps to run computationally intensive neural networks on the most powerful and efficient parts of the chips that power mobile phones, including GPUs (Graphics Processing Units) and NPUs (specialized Neural Processing Units). + +Try out this feature using the [tutorial](https://pytorch.org/tutorials/prototype/nnapi_mobilenetv2.html). Please provide your feedback or ask questions on [the forum](https://discuss.pytorch.org/c/mobile/18). You can also check out [this presentation](https://www.youtube.com/watch?v=B-2spa3UCTU) to learn more. + +### (Beta) PyTorch Bundle Inputs + +PyTorch now provides a utility that allows TorchScript models to have inputs bundled directly to them. It allows users to streamline the process of passing runnable inputs with a model. These inputs can be used to actually run the model in benchmarking applications or trace the used operators in something like mobile’s upcoming tracing based selective build. Also, they could be used to just specify input shapes for certain pipelines. + +You can find a tutorial for this feature here [], and provide your feedback on the [PyTorch Discussion Forum - Mobile](https://discuss.pytorch.org/c/mobile/18). + +Thanks for reading. If you’re interested in these updates and want to join the PyTorch community, we encourage you to join the [discussion forums](https://discuss.pytorch.org/) and [open GitHub issues](https://github.com/pytorch/pytorch/issues). To get the latest news from PyTorch, follow us on [Facebook](https://www.facebook.com/pytorch/), [Twitter](https://twitter.com/PyTorch), [Medium](https://medium.com/pytorch), [YouTube](https://www.youtube.com/pytorch), or [LinkedIn](https://www.linkedin.com/company/pytorch). + +Cheers! + +Team PyTorch diff --git a/_posts/2021-10-21-pytorch-1.10-main-release.md b/_posts/2021-10-21-pytorch-1.10-main-release.md deleted file mode 100644 index 03ef2ef2021b..000000000000 --- a/_posts/2021-10-21-pytorch-1.10-main-release.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -layout: blog_detail -title: 'PyTorch 1.10 Release, including CUDA Graphs APIs, TorchScript improvements' -author: Team PyTorch ---- - -We are excited to announce the release of PyTorch 1.10. This release is composed of around 3,400 commits since 1.9, made by 426 contributors. We want to sincerely thank our community for continuously improving PyTorch. - -Along with 1.9, we are also releasing major updates to the PyTorch libraries, which you can read about in [this blog post](https://pytorch.org/blog/pytorch-1.9-new-library-releases/). - -We’d like to thank the community for their support and work on this latest release. We’d especially like to thank Quansight and Microsoft for their contributions. - -Features in PyTorch releases are classified as Stable, Beta, and Prototype. You can learn more about the definitions in [this blog post](https://pytorch.org/blog/pytorch-feature-classification-changes/). - -# Frontend APIs - -### (Stable) *torch.linalg* - -In 1.9, the *torch.linalg* module is moving to a stable release. Linear algebra is essential to deep learning and scientific computing, and the *torch.linalg* module extends PyTorch’s support for it with implementations of every function from [NumPy’s linear algebra module](https://numpy.org/doc/stable/reference/routines.linalg.html) (now with support for accelerators and autograd) and more, like [*torch.linalg.matrix_norm*](https://pytorch.org/docs/1.9.0/generated/torch.linalg.matrix_norm.html?highlight=matrix_norm#torch.linalg.matrix_norm) and [*torch.linalg.householder_product*](https://pytorch.org/docs/1.9.0/generated/torch.linalg.householder_product.html?highlight=householder_product#torch.linalg.householder_product). This makes the module immediately familiar to users who have worked with NumPy. Refer to [the documentation](https://pytorch.org/docs/1.9.0/linalg.html?highlight=linalg#module-torch.linalg) here. - -We plan to publish another blog post with more details on the *torch.linalg* module next week! - -### (Stable) Complex Autograd - -The Complex Autograd feature, released as a beta in PyTorch 1.8, is now stable. Since the beta release, we have extended support for Complex Autograd for over 98% operators in PyTorch 1.9, improved testing for complex operators by adding more OpInfos, and added greater validation through TorchAudio migration to native complex tensors (refer to [this issue](https://github.com/pytorch/audio/issues/1337)). - -This feature provides users the functionality to calculate complex gradients and optimize real valued loss functions with complex variables. This is a required feature for multiple current and downstream prospective users of complex numbers in PyTorch like TorchAudio, ESPNet, Asteroid, and FastMRI. Refer to [the documentation](https://pytorch.org/docs/1.9.0/notes/autograd.html#autograd-for-complex-numbers) for more details. - -### (Stable) torch.use_deterministic_algorithms() - -To help with debugging and writing reproducible programs, PyTorch 1.9 includes a *torch.use_determinstic_algorithms* option. When this setting is enabled, operations will behave deterministically, if possible, or throw a runtime error if they might behave nondeterministically. Here are a couple examples: - -```python ->>> a = torch.randn(100, 100, 100, device='cuda').to_sparse() ->>> b = torch.randn(100, 100, 100, device='cuda') - -# Sparse-dense CUDA bmm is usually nondeterministic ->>> torch.bmm(a, b).eq(torch.bmm(a, b)).all().item() -False - ->>> torch.use_deterministic_algorithms(True) - -# Now torch.bmm gives the same result each time, but with reduced performance ->>> torch.bmm(a, b).eq(torch.bmm(a, b)).all().item() -True - -# CUDA kthvalue has no deterministic algorithm, so it throws a runtime error ->>> torch.zeros(10000, device='cuda').kthvalue(1) -RuntimeError: kthvalue CUDA does not have a deterministic implementation... -``` - -PyTorch 1.9 adds deterministic implementations for a number of indexing operations, too, including *index_add*, *index_copy*, and *index_put with accum=False*. For more details, refer to the [documentation](https://pytorch.org/docs/1.9.0/generated/torch.use_deterministic_algorithms.html?highlight=use_deterministic#torch.use_deterministic_algorithms) and [reproducibility note](https://pytorch.org/docs/1.9.0/notes/randomness.html?highlight=reproducibility). - -### (Beta) *torch.special* - -A *torch.special* module, analogous to [SciPy’s special module](https://docs.scipy.org/doc/scipy/reference/special.html), is now available in beta. This module contains many functions useful for scientific computing and working with distributions such as *iv*, *ive*, *erfcx*, *logerfc*, and *logerfcx*. Refer to [the documentation](https://pytorch.org/docs/master/special.html) for more details. - -### (Beta) nn.Module parameterization - -```nn.Module``` parameterization allows users to parametrize any parameter or buffer of an ```nn.Module``` without modifying the ```nn.Module``` itself. It allows you to constrain the space in which your parameters live without the need for special optimization methods. - -This also contains a new implementation of the ```spectral_norm``` parametrization for PyTorch 1.9. More parametrization will be added to this feature (weight_norm, matrix constraints and part of pruning) for the feature to become stable in 1.10. For more details, refer to the [documentation](https://pytorch.org/docs/1.9.0/generated/torch.nn.utils.parametrizations.spectral_norm.html?highlight=parametrize) and [tutorial](https://pytorch.org/tutorials/intermediate/parametrizations.html). - -# PyTorch Mobile - -### (Beta) Mobile Interpreter - -We are releasing Mobile Interpreter, a streamlined version of the PyTorch runtime, in beta. The Interpreter will execute PyTorch programs in edge devices, with reduced binary size footprint. - -Mobile Interpreter is one of the top requested features for PyTorch Mobile. This new release will significantly reduce binary size compared with the current on-device runtime. In order for you to get the binary size improvements with our interpreter (which can reduce the binary size up to ~75% for a typical application) follow these instructions. As an example, using Mobile Interpreter, we can reach 2.6 MB compressed with MobileNetV2 in arm64-v7a Android. With this latest release we are making it much simpler to integrate the interpreter by providing pre-built libraries for iOS and Android. - -### TorchVision Library - -Starting from 1.9, users can use the TorchVision library on their iOS/Android apps. The Torchvision library contains the C++ TorchVision ops and needs to be linked together with the main PyTorch library for iOS, for Android it can be added as a gradle dependency. This allows using TorchVision prebuilt MaskRCNN operators for object detections and segmentation. To learn more about the library, please refer to our tutorials and [demo apps](https://github.com/pytorch/android-demo-app/tree/master/D2Go). - -### Demo apps - -We are releasing a new video app based on [PyTorch Video](https://pytorchvideo.org/) library and an updated speech recognition app based on the latest torchaudio, wave2vec model. Both are available on [iOS](https://github.com/pytorch/ios-demo-app) and [Android](https://github.com/pytorch/android-demo-app). In addition, we have updated the seven Computer Vision and three Natural Language Processing demo apps, including the HuggingFace DistilBERT, and the DeiT vision transformer models, with PyTorch Mobile v1.9. With the addition of these two apps, we now offer a full suite of demo apps covering image, text, audio, and video. To get started check out our [iOS demo apps](https://github.com/pytorch/ios-demo-app) and [Android demo apps](https://github.com/pytorch/android-demo-app). - -
- -
- -# Distributed Training - -### (Beta) TorchElastic is now part of core - -[TorchElastic](https://github.com/pytorch/pytorch/issues/50621), which was open sourced over a year ago in the [pytorch/elastic](https://github.com/pytorch/elastic) github repository, is a runner and coordinator for PyTorch worker processes. Since then, it has been adopted by various distributed torch use-cases: 1) [deepspeech.pytorch](https://medium.com/pytorch/training-deepspeech-using-torchelastic-ad013539682) 2) [pytorch-lightning](https://pytorch-lightning.readthedocs.io/en/stable/advanced/multi_gpu.html#torchelastic) 3) [Kubernetes CRD](https://github.com/pytorch/elastic/blob/master/kubernetes/README.md). Now, it is part of PyTorch core. - -As its name suggests, the core function of TorcheElastic is to gracefully handle scaling events. A notable corollary of elasticity is that peer discovery and rank assignment are built into TorchElastic enabling users to run distributed training on preemptible instances without requiring a gang scheduler. As a side note, [etcd](https://etcd.io/) used to be a hard dependency of TorchElastic. With the upstream, this is no longer the case since we have added a “standalone” rendezvous based on c10d::Store. For more details, refer to the [documentation](https://pytorch.org/docs/1.9.0/distributed.elastic.html). - -### (Beta) Distributed Training Updates - -In addition to TorchElastic, there are a number of beta features available in the distributed package: - -* **(Beta) CUDA support is available in RPC**: Compared to CPU RPC and general-purpose RPC frameworks, CUDA RPC is a much more efficient way for P2P Tensor communication. It is built on top of TensorPipe which can automatically choose a communication channel for each Tensor based on Tensor device type and channel availability on both the caller and the callee. Existing TensorPipe channels cover NVLink, InfiniBand, SHM, CMA, TCP, etc. See [this recipe](https://pytorch.org/tutorials/recipes/cuda_rpc.html) for how CUDA RPC helps to attain 34x speedup compared to CPU RPC. - -* **(Beta) ZeroRedundancyOptimizer**: ZeroRedundancyOptimizer can be used in conjunction with DistributedDataParallel to reduce the size of per-process optimizer states. The idea of ZeroRedundancyOptimizer comes from [DeepSpeed/ZeRO project](https://github.com/microsoft/DeepSpeed) and [Marian](https://github.com/marian-nmt/marian-dev), where the optimizer in each process owns a shard of model parameters and their corresponding optimizer states. When running `step()`, each optimizer only updates its own parameters, and then uses collective communication to synchronize updated parameters across all processes. Refer to [this documentation](https://pytorch.org/docs/master/distributed.optim.html) and this [tutorial](https://pytorch.org/tutorials/recipes/zero_redundancy_optimizer.html) to learn more. - -* **(Beta) Support for profiling distributed collectives**: PyTorch’s profiler tools, *torch.profiler* and *torch.autograd.profiler*, are able to profile distributed collectives and point to point communication primitives including allreduce, alltoall, allgather, send/recv, etc. This is enabled for all backends supported natively by PyTorch: gloo, mpi, and nccl. This can be used to debug performance issues, analyze traces that contain distributed communication, and gain insight into performance of applications that use distributed training. To learn more, refer to [this documentation](https://pytorch.org/docs/1.9.0/distributed.html#profiling-collective-communication). - -# Performance Optimization and Tooling - -### (Stable) Freezing API - -Module Freezing is the process of inlining module parameters and attributes values as constants into the TorchScript internal representation. This allows further optimization and specialization of your program, both for TorchScript optimizations and lowering to other backends. It is used by [optimize_for_mobile API](https://github.com/pytorch/pytorch/blob/master/torch/utils/mobile_optimizer.py), ONNX, and others. - -Freezing is recommended for model deployment. It helps TorchScript JIT optimizations optimize away overhead and bookkeeping that is necessary for training, tuning, or debugging PyTorch models. It enables graph fusions that are not semantically valid on non-frozen graphs - such as fusing Conv-BN. For more details, refer to the [documentation](https://pytorch.org/docs/1.9.0/generated/torch.jit.freeze.html). - -### (Beta) PyTorch Profiler - -
- -
- -The new PyTorch Profiler graduates to beta and leverages [Kineto](https://github.com/pytorch/kineto/) for GPU profiling, TensorBoard for visualization and is now the standard across our tutorials and documentation. - -PyTorch 1.9 extends support for the new *torch.profiler* API to more builds, including Windows and Mac and is recommended in most cases instead of the previous *torch.autograd.profiler* API. The new API supports existing profiler features, integrates with CUPTI library (Linux-only) to trace on-device CUDA kernels and provides support for long-running jobs, e.g.: - -```python -def trace_handler(p): - output = p.key_averages().table(sort_by="self_cuda_time_total", row_limit=10) - print(output) - p.export_chrome_trace("/tmp/trace_" + str(p.step_num) + ".json") - -with profile( - activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], - # schedule argument specifies the iterations on which the profiler is active - schedule=torch.profiler.schedule( - wait=1, - warmup=1, - active=2), - # on_trace_ready argument specifies the handler for the traces - on_trace_ready=trace_handler -) as p: - for idx in range(8): - model(inputs) - # profiler will trace iterations 2 and 3, and then 6 and 7 (counting from zero) - p.step() -``` - -More usage examples can be found on the [profiler recipe page](https://pytorch.org/tutorials/recipes/recipes/profiler_recipe.html). - -The PyTorch Profiler Tensorboard plugin has new features for: -* Distributed Training summary view with communications overview for NCCL -* GPU Utilization and SM Efficiency in Trace view and GPU operators view -* Memory Profiling view -* Jump to source when launched from Microsoft VSCode -* Ability for load traces from cloud object storage systems - -### (Beta) Inference Mode API - -Inference Mode API allows significant speed-up for inference workloads while remaining safe and ensuring no incorrect gradients can ever be computed. It offers the best possible performance when no autograd is required. For more details, refer to [the documentation for inference mode itself](https://pytorch.org/docs/1.9.0/generated/torch.inference_mode.html?highlight=inference%20mode#torch.inference_mode) and [the documentation explaining when to use it and the difference with no_grad mode](https://pytorch.org/docs/1.9.0/notes/autograd.html#locally-disabling-gradient-computation). - -### (Beta) *torch.package* - -*torch.package* is a new way to package PyTorch models in a self-contained, stable format. A package will include both the model’s data (e.g. parameters, buffers) and its code (model architecture). Packaging a model with its full set of Python dependencies, combined with a description of a conda environment with pinned versions, can be used to easily reproduce training. Representing a model in a self-contained artifact will also allow it to be published and transferred throughout a production ML pipeline while retaining the flexibility of a pure-Python representation. For more details, refer to [the documentation](https://pytorch.org/docs/1.9.0/package.html). - -### (Prototype) prepare_for_inference - -prepare_for_inference is a new prototype feature that takes in a module and performs graph-level optimizations to improve inference performance, depending on the device. It is meant to be a PyTorch-native option that requires minimal changes to user’s workflows. For more details, see [the documentation](https://github.com/pytorch/pytorch/blob/master/torch/jit/_freeze.py#L168) for the Torchscript version [here](https://github.com/pytorch/pytorch/blob/master/torch/jit/_freeze.py#L168) or the FX version [here](https://github.com/pytorch/pytorch/blob/master/torch/fx/experimental/optimization.py#L234). - -### (Prototype) Profile-directed typing in TorchScript - -TorchScript has a hard requirement for source code to have type annotations in order for compilation to be successful. For a long time, it was only possible to add missing or incorrect type annotations through trial and error (i.e., by fixing the type-checking errors generated by *torch.jit.script* one by one), which was inefficient and time consuming. Now, we have enabled profile directed typing for *torch.jit.script* by leveraging existing tools like MonkeyType, which makes the process much easier, faster, and more efficient. For more details, refer to [the documentation](https://pytorch.org/docs/1.9.0/jit.html). - -Thanks for reading. If you’re interested in these updates and want to join the PyTorch community, we encourage you to join the [discussion forums](https://discuss.pytorch.org/) and [open GitHub issues](https://github.com/pytorch/pytorch/issues). To get the latest news from PyTorch, follow us on [Facebook](https://www.facebook.com/pytorch/), [Twitter](https://twitter.com/PyTorch), [Medium](https://medium.com/pytorch), [YouTube](https://www.youtube.com/pytorch), or [LinkedIn](https://www.linkedin.com/company/pytorch). - -Cheers! - -Team PyTorch From e47c6ab288912c1e5b88b444d30381e511578526 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Wed, 20 Oct 2021 15:01:49 -0300 Subject: [PATCH 04/20] [PYT-637]-pyt-1.10-new-library-releases --- .../2021-10-19-pytorch-1.10-main-release.md | 2 +- ...10-19-pytorch-1.10-new-library-releases.md | 222 ++++++++++++++++++ 2 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 _posts/2021-10-19-pytorch-1.10-new-library-releases.md diff --git a/_posts/2021-10-19-pytorch-1.10-main-release.md b/_posts/2021-10-19-pytorch-1.10-main-release.md index 321f60f8e02e..d38efc0dc184 100644 --- a/_posts/2021-10-19-pytorch-1.10-main-release.md +++ b/_posts/2021-10-19-pytorch-1.10-main-release.md @@ -31,7 +31,7 @@ A ```torch.special module```, analogous to [SciPy’s special module](https://do Refer to this [tutorial](https://pytorch.org/tutorials/intermediate/parametrizations.html) and the general [documentation](https://pytorch.org/docs/master/generated/torch.nn.utils.parametrizations.spectral_norm.html?highlight=parametrize) for more details. -### (Beta) *CUDA Graphs APIs Integration +### (Beta) CUDA Graphs APIs Integration PyTorch now integrates CUDA Graphs APIs to reduce CPU overheads for CUDA workloads. diff --git a/_posts/2021-10-19-pytorch-1.10-new-library-releases.md b/_posts/2021-10-19-pytorch-1.10-new-library-releases.md new file mode 100644 index 000000000000..755ff7049d96 --- /dev/null +++ b/_posts/2021-10-19-pytorch-1.10-new-library-releases.md @@ -0,0 +1,222 @@ +--- +layout: blog_detail +title: 'New Library Releases in PyTorch 1.10, including TorchX, TorchAudio, TorchVision' +author: Team PyTorch +--- + +Today, we are announcing a number of new features and improvements to PyTorch libraries, alongside the [PyTorch 1.10 release](https://pytorch.org/blog/pytorch-1.10-released/). Some highlights include: + +Some highlights include: + +* **TorchX** - a new SDK for quickly building and deploying ML applications from research & development to production. +* **TorchAudio** - Added text-to-speech pipeline, self-supervised model support, multi-channel support and MVDR beamforming module, RNN transducer (RNNT) loss function, and batch and filterbank support to `lfilter` function. See the TorchAudio release notes [here](https://github.com/pytorch/audio/releases). +* **TorchVision** - Added new RegNet and EfficientNet models, FX based feature extraction added to utilities, two new Automatic Augmentation techniques: Rand Augment and Trivial Augment, and updated training recipes. See the TorchVision release notes [here](https://github.com/pytorch/vision/releases). + + +# Introducing TorchX + +TorchX is a new SDK for quickly building and deploying ML applications from research & development to production. It offers various builtin components that encode MLOps best practices and make advanced features like distributed training and hyperparameter optimization accessible to all. + +Users can get started with TorchX 0.1 with no added setup cost since it supports popular ML schedulers and pipeline orchestrators that are already widely adopted and deployed in production. No two production environments are the same. To comply with various use cases, TorchX’s core APIs allow tons of customization at well-defined extension points so that even the most unique applications can be serviced without customizing the whole vertical stack. + +Read the [documentation](https://pytorch.org/torchx) for more details and try out this feature using this quickstart [tutorial](https://pytorch.org/torchx/latest/examples/hello_world.html). + + +# TorchAudio 0.10 + +### (Stable) Text-to-speech pipeline +TorchAudio now adds the Tacotron2 model and pretrained weights. It is now possible to build a text-to-speech pipeline with existing vocoder implementations like WaveRNN and Griffin-Lim. Building a TTS pipeline requires matching data processing and pretrained weights, which are often non-trivial to users. So TorchAudio introduces a bundle API so that constructing pipelines for specific pretrained weights is easy. The following example illustrates this. + +```python +import torchaudio + +bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_CHAR_LJSPEECH + +# Build text processor, Tacotron2 and vocoder (WaveRNN) model +processor = bundle.get_text_preprocessor() +tacotron2 = bundle.get_tacotron2() +Downloading: +100%|███████████████████████████████| 107M/107M [00:01<00:00, 87.9MB/s] +vocoder = bundle.get_vocoder() +Downloading: +100%|███████████████████████████████| 16.7M/16.7M [00:00<00:00, 78.1MB/s] + +text = "Hello World!" + +# Encode text +input, lengths = processor(text) + +# Generate (mel-scale) spectrogram +specgram, lengths, _ = tacotron2.infer(input, lengths) + +# Convert spectrogram to waveform +waveforms, lengths = vocoder(specgram, lengths) + +# Save audio +torchaudio.save('hello-world.wav', waveforms, vocoder.sample_rate) +``` + +For the details of this API please refer to [the documentation](https://pytorch.org/audio/0.10.0/pipelines#tacotron2-text-to-speech). You can also try this from [the tutorial](https://pytorch.org/tutorials/intermediate/text_to_speech_with_torchaudio_tutorial.html). + +### (Beta) Self-Supervised Model Support +TorchAudio added HuBERT model architecture and pre-trained weight support for wav2vec 2.0 and HuBERT. HuBERT and wav2vec 2.0 are novel ways for audio representation learning and they yield high accuracy when fine-tuned on downstream tasks. These models can serve as baseline in future research, therefore, TorchAudio is providing a simple way to run the model. Similar to the TTS pipeline, the pretrained weights and associated information, such as expected sample rates and output class labels (for fine-tuned weights) are put together as a bundle, so that they can be used to build pipelines. The following example illustrates this. + +```python +import torchaudio + +bundle = torchaudio.pipelines.HUBERT_ASR_LARGE + +# Build the model and load pretrained weight. +model = bundle.get_model() +Downloading: +100%|███████████████████████████████| 1.18G/1.18G [00:17<00:00, 73.8MB/s] +# Check the corresponding labels of the output. +labels = bundle.get_labels() +print(labels) +('', '', '', '', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z') + + # Infer the label probability distribution +waveform, sample_rate = torchaudio.load(hello-world.wav') + +emissions, _ = model(waveform) + +# Pass emission to (hypothetical) decoder +transcripts = ctc_decode(emissions, labels) +print(transcripts[0]) +HELLO WORLD +``` + +Please refer to the [documentation](https://pytorch.org/audio/0.10.0/pipelines#wav2vec-2-0-hubert-representation-learning) for more details and try out this feature using [tutorial, Google Colab, or examples]. + +### (Beta) Multi-channel support and MVDR beamforming +Far-field speech recognition is a more challenging task compared to near-field recognition. Multi-channel methods such as beamforming help reduce the noises and enhance the target speech. + +TorchAudio now adds support for differentiable Minimum Variance Distortionless Response (MVDR) beamforming on multi-channel audio using Time-Frequency masks. Researchers can easily assemble it with any multi-channel ASR pipeline. There are three solutions (ref_channel, stv_evd, stv_power) and it supports single-channel and multi-channel (perform average in the method) masks. It provides an online option that recursively updates the parameters for streaming audio. We also provide a tutorial on how to apply MVDR beamforming to the multi-channel audio in the example directory. + +```python +from torchaudio.transforms import MVDR, Spectrogram, InverseSpectrogram + +# Load the multi-channel noisy audio +waveform_mix, sr = torchaudio.load('mix.wav') +# Initialize the stft and istft modules +stft = Spectrogram(n_fft=1024, hop_length=256, return_complex=True, power=None) +istft = InverseSpectrogram(n_fft=1024, hop_length=256) +# Get the noisy spectrogram +specgram_mix = stft(waveform_mix) +# Get the Time-Frequency mask via machine learning models +mask = model(waveform) +# Initialize the MVDR module +mvdr = MVDR(ref_channel=0, solution=”ref_channel”, multi_mask=False) +# Apply MVDR beamforming +specgram_enhanced = mvdr(specgram_mix, mask) +# Get the enhanced waveform via iSTFT +waveform_enhanced = istft(specgram_enhanced, length=waveform.shape[-1]) +``` + +Please refer to the [documentation](https://pytorch.org/audio/0.10.0/transforms.html#mvdr) f for more details and try out this feature using the [MVDR tutorial](https://github.com/pytorch/audio/blob/main/examples/beamforming/MVDR_tutorial.ipynb). + +### (Beta) RNN Transducer Loss +The RNN transducer (RNNT) loss is part of the RNN transducer pipeline, which is a popular architecture for speech recognition tasks. Recently it has gotten attention for being used in a streaming setting, and has also achieved state-of-the-art WER for the LibriSpeech benchmark. + +TorchAudio’s loss function supports float16 and float32 logits, has autograd and torchscript support, and can be run on both CPU and GPU, which has a custom CUDA kernel implementation for improved performance. The implementation is consistent with the original loss function in [Sequence Transduction with Recurrent Neural Networks](https://arxiv.org/pdf/1211.3711.pdf), but relies on code from [Alignment Restricted Streaming Recurrent Neural Network Transducer](https://arxiv.org/pdf/2011.03072.pdf). Special thanks to Jay Mahadeokar and Ching-Feng Yeh for their code contributions and guidance. + +Please refer to the [documentation](https://pytorch.org/audio/0.10.0/transforms.html#rnntloss) for more details. + +### (Beta) Batch support and filter bank support +`torchaudio.functional.lfilter` now supports batch processing and multiple filters. + +### (Prototype) Emformer Module +Automatic speech recognition (ASR) research and productization have increasingly focused on on-device applications. Towards supporting such efforts, TorchAudio now includes [Emformer](https://arxiv.org/abs/2010.10759), a memory-efficient transformer architecture that has achieved state-of-the-art results on LibriSpeech in low-latency streaming scenarios, as a prototype feature. + +Please refer to the [documentation](https://pytorch.org/audio/main/prototype.html#emformer) for more details. + +### GPU Build +GPU builds that support custom CUDA kernels in TorchAudio, like the one being used for RNN transducer loss, have been added. Following this change, TorchAudio’s binary distribution now includes CPU-only versions and CUDA-enabled versions. To use CUDA-enabled binaries, PyTorch also needs to be compatible with CUDA. + +### (Prototype) RNN Transducer Loss +The RNN transducer loss is used in training RNN transducer models, which is a popular architecture for speech recognition tasks. The prototype loss in torchaudio currently supports autograd, torchscript, float16 and float32, and can also be run on both CPU and CUDA. For more details, please refer to [the documentation](https://pytorch.org/audio/master/rnnt_loss.html). + + +# TorchVision 0.11 + +### (Stable) New Models +[RegNet](https://arxiv.org/abs/2003.13678) and [EfficientNet](https://arxiv.org/abs/1905.11946) are two popular architectures that can be scaled to different computational budgets. In this release we include 22 pre-trained weights for their classification variants. The models were trained on ImageNet and the accuracies of the pre-trained models obtained on ImageNet val can be found below (see [#4403](https://github.com/pytorch/vision/pull/4403#issuecomment-930381524), [#4530](https://github.com/pytorch/vision/pull/4530#issuecomment-933213238) and [#4293](https://github.com/pytorch/vision/pull/4293) for more details). + +The models can be used as follows: + +```python +import torch +from torchvision import models + +x = torch.rand(1, 3, 224, 224) + +regnet = models.regnet_y_400mf(pretrained=True) +regnet.eval() +predictions = regnet(x) + +efficientnet = models.efficientnet_b0(pretrained=True) +efficientnet.eval() +predictions = efficientnet(x) +``` + +See the full list of new models on the [torchvision.models](https://pytorch.org/vision/master/models.html) documentation page + +We would like to thank Ross Wightman and Luke Melas-Kyriazi for contributing the weights of the EfficientNet variants. + +### (Beta) FX-based Feature Extraction +A new Feature Extraction method has been added to our utilities. It uses [torch.fx](https://pytorch.org/docs/stable/fx.html) and enables us to retrieve the outputs of intermediate layers of a network which is useful for feature extraction and visualization. + +Here is an example of how to use the new utility: + +```python +import torch +from torchvision.models import resnet50 +from torchvision.models.feature_extraction import create_feature_extractor + + +x = torch.rand(1, 3, 224, 224) + +model = resnet50() + +return_nodes = { +"layer4.2.relu_2": "layer4" +} +model2 = create_feature_extractor(model, return_nodes=return_nodes) +intermediate_outputs = model2(x) + +print(intermediate_outputs['layer4'].shape) +``` + +We would like to thank Alexander Soare for developing this utility. + +### (Stable) New Data Augmentations +Two new Automatic Augmentation techniques were added: [Rand Augment](https://arxiv.org/abs/1909.13719) and [Trivial Augment](https://arxiv.org/abs/2103.10158). They apply a series of transformations on the original data to enhance them and to boost the performance of the models. The new techniques build on top of the previously added [AutoAugment](https://github.com/pytorch/vision/pull/3123) and focus on simplifying the approach, reducing the search space for the optimal policy and improving the performance gain in terms of accuracy. These techniques enable users to reproduce recipes to achieve state-of-the-art performance on the offered models. Additionally, it enables users to apply these techniques in order to do transfer learning and achieve optimal accuracy on new datasets. + +Both methods can be used as drop-in replacement of the AutoAugment technique as seen below: + +```python +from torchvision import transforms + +t = transforms.RandAugment() +# t = transforms.TrivialAugmentWide() +transformed = t(image) + +transform = transforms.Compose([ +transforms.Resize(256), +transforms.RandAugment(), # transforms.TrivialAugmentWide() +transforms.ToTensor()]) +``` + +Read the [automatic augmentation transforms](https://pytorch.org/vision/master/transforms.html#automatic-augmentation-transforms) for more details. + +We would like to thank Samuel G. Müller for contributing to Trivial Augment and for his help on refactoring the AA package. + +### Updated Training Recipes +We have updated our training reference scripts to add support for Exponential Moving Average, Label Smoothing, Learning-Rate Warmup, [Mixup](https://arxiv.org/abs/1710.09412), [Cutmix](https://arxiv.org/abs/1905.04899) and other [SOTA primitives](https://github.com/pytorch/vision/issues/3911). The above enabled us to improve the classification Acc@1 of some pre-trained models by over 4 points. A major update of the existing pre-trained weights is expected in the next release. + + +Thanks for reading. If you’re interested in these updates and want to join the PyTorch community, we encourage you to join [the discussion](https://discuss.pytorch.org/) forums and [open GitHub issues](https://github.com/pytorch/pytorch/issues). To get the latest news from PyTorch, follow us on [Facebook](https://www.facebook.com/pytorch/), [Twitter](https://twitter.com/PyTorch), [Medium](https://medium.com/pytorch), [YouTube](https://www.youtube.com/pytorch) or [LinkedIn](https://www.linkedin.com/company/pytorch). + +Cheers! + +-Team PyTorch From 116e4619813c5e4c9fbb341d039e77be2647be6e Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Wed, 20 Oct 2021 18:15:00 -0300 Subject: [PATCH 05/20] Updated blog dates to 2021-10-21 --- ...10-main-release.md => 2021-10-21-pytorch-1.10-main-release.md} | 0 ...eleases.md => 2021-10-21-pytorch-1.10-new-library-releases.md} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename _posts/{2021-10-19-pytorch-1.10-main-release.md => 2021-10-21-pytorch-1.10-main-release.md} (100%) rename _posts/{2021-10-19-pytorch-1.10-new-library-releases.md => 2021-10-21-pytorch-1.10-new-library-releases.md} (100%) diff --git a/_posts/2021-10-19-pytorch-1.10-main-release.md b/_posts/2021-10-21-pytorch-1.10-main-release.md similarity index 100% rename from _posts/2021-10-19-pytorch-1.10-main-release.md rename to _posts/2021-10-21-pytorch-1.10-main-release.md diff --git a/_posts/2021-10-19-pytorch-1.10-new-library-releases.md b/_posts/2021-10-21-pytorch-1.10-new-library-releases.md similarity index 100% rename from _posts/2021-10-19-pytorch-1.10-new-library-releases.md rename to _posts/2021-10-21-pytorch-1.10-new-library-releases.md From 8c910a9f99d7093b6fdb56cd3829131a62084162 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Thu, 21 Oct 2021 08:53:22 -0300 Subject: [PATCH 06/20] [PYT-634]-previous-ptcv-episodes episodes added on past events webinars tab --- _events/episode_1.md | 9 +++++++++ _events/episode_10.md | 9 +++++++++ _events/episode_11.md | 9 +++++++++ _events/episode_2.md | 9 +++++++++ _events/episode_3.md | 9 +++++++++ _events/episode_4.md | 9 +++++++++ _events/episode_5.md | 9 +++++++++ _events/episode_6.md | 9 +++++++++ _events/episode_7.md | 9 +++++++++ _events/episode_8.md | 9 +++++++++ _events/episode_9.md | 8 ++++++++ _includes/latest_episodes.html | 8 +++++--- 12 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 _events/episode_1.md create mode 100644 _events/episode_10.md create mode 100644 _events/episode_11.md create mode 100644 _events/episode_2.md create mode 100644 _events/episode_3.md create mode 100644 _events/episode_4.md create mode 100644 _events/episode_5.md create mode 100644 _events/episode_6.md create mode 100644 _events/episode_7.md create mode 100644 _events/episode_8.md create mode 100644 _events/episode_9.md diff --git a/_events/episode_1.md b/_events/episode_1.md new file mode 100644 index 000000000000..633f5dfa60ae --- /dev/null +++ b/_events/episode_1.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 1 +guest: Thomas Viehmann +company: TorchDrift +date: May 19, 2021 +time: 1 pM PST +poster: https://assets.pytorch.org/pted2021/posters/I3.png +--- diff --git a/_events/episode_10.md b/_events/episode_10.md new file mode 100644 index 000000000000..c9cbd975b535 --- /dev/null +++ b/_events/episode_10.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 10 +guest: Robin Lobel +company: TorchStudio +date: July 21, 2021 +time: 9 AM PST +poster: https://assets.pytorch.org/pted2021/posters/F4.png +--- diff --git a/_events/episode_11.md b/_events/episode_11.md new file mode 100644 index 000000000000..6027d756afbf --- /dev/null +++ b/_events/episode_11.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 11 +guest: Will Falcon, Thomas Chaton +company: PyTorch Lightning +date: July 28, 2021 +time: 9 AM PST +poster: https://assets.pytorch.org/pted2021/posters/E4.png +--- diff --git a/_events/episode_2.md b/_events/episode_2.md new file mode 100644 index 000000000000..45e52ef72ce7 --- /dev/null +++ b/_events/episode_2.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 2 +guest: Sylvain Gugger and Lysandre Debut +company: HuggingFace +date: May 26, 2021 +time: 1 PM PST +poster: https://assets.pytorch.org/pted2021/posters/C3.png +--- diff --git a/_events/episode_3.md b/_events/episode_3.md new file mode 100644 index 000000000000..0eacd7625e60 --- /dev/null +++ b/_events/episode_3.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 3 +guest: Alex O'Connor and Bing Ouyang +company: AutoDesk +date: June 2, 2021 +time: 1 PM PST +poster: https://assets.pytorch.org/pted2021/posters/A1.png +--- diff --git a/_events/episode_4.md b/_events/episode_4.md new file mode 100644 index 000000000000..2feca0bc1425 --- /dev/null +++ b/_events/episode_4.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 4 +guest: Fernando Pérez-García +company: TorchIO +date: June 9, 2021 +time: 1 PM PST +poster: https://assets.pytorch.org/pted2021/posters/B7.png +--- diff --git a/_events/episode_5.md b/_events/episode_5.md new file mode 100644 index 000000000000..8a7813ffed3f --- /dev/null +++ b/_events/episode_5.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 5 +guest: Kashif Rasul +company: PyTorchTS +date: June 16, 2021 +time: 1 PM PST +poster: https://assets.pytorch.org/pted2021/posters/A2.png +--- diff --git a/_events/episode_6.md b/_events/episode_6.md new file mode 100644 index 000000000000..70c57db27540 --- /dev/null +++ b/_events/episode_6.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 6 +guest: Ludovic Denoyer +company: A Robust PyTorch Trainable Entry Convnet Layer in Fourier Domain +date: June 23, 2021 +time: 1 PM PST +poster: https://assets.pytorch.org/pted2021/posters/D2.png +--- diff --git a/_events/episode_7.md b/_events/episode_7.md new file mode 100644 index 000000000000..01740105ca92 --- /dev/null +++ b/_events/episode_7.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 7 +guest: Michael Galarnyk and Richard Liaw +company: Ray +date: June 30, 2021 +time: 1 PM PST +poster: https://assets.pytorch.org/pted2021/posters/H1.png +--- diff --git a/_events/episode_8.md b/_events/episode_8.md new file mode 100644 index 000000000000..fa5ec0d87eda --- /dev/null +++ b/_events/episode_8.md @@ -0,0 +1,9 @@ +--- +category: live-stream +title: Episode 8 +guest: Phillip Meier +company: Pystiche +date: July 7, 2021 +time: 1 PM PST +poster: https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbDB6Z1VhLUZqWngyT1ZHQXRuaEtnVjV6WkRQd3xBQ3Jtc0tsN0IxU1VfRW9aOExIYXBrNTAxWklxbWw5WnZiTXpyLUxPamcyT2NrUFpNYXF4Z1pNLWJndFEzR2FsMjBRY1lzQlo1Z1prYjFqZ1hsZFFZVjRnOFRma0ZMUWxsMUF6VHBtMjNHMUFsZjZpOGJPY1BoNA&q=https%3A%2F%2Fassets.pytorch.org%2Fpted2021%2Fposters%2FD7.png +--- diff --git a/_events/episode_9.md b/_events/episode_9.md new file mode 100644 index 000000000000..12ce9abb0e08 --- /dev/null +++ b/_events/episode_9.md @@ -0,0 +1,8 @@ +--- +category: live-stream +title: Episode 9 +guest: Seth Juarez and Maryanne Wachter +company: PyLadies +date: July 14, 2021 +time: 1 PM PST +--- diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index 1612ea99126f..196af502e16f 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -20,9 +20,11 @@

Latest Episodes

- + {% if item.poster %} + + {% endif %}
{% endif %} From a984d0c653f4bf7540416dc6614f62d5c67173df Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Thu, 21 Oct 2021 09:34:31 -0300 Subject: [PATCH 07/20] changed gitignore, enable vendor for preview --- .gitignore | 2 +- assets/vendor/anchor.min.js | 6 ++++++ assets/vendor/bootstrap.min.js | 7 +++++++ assets/vendor/jquery.min.js | 2 ++ assets/vendor/popper.min.js | 5 +++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 assets/vendor/anchor.min.js create mode 100644 assets/vendor/bootstrap.min.js create mode 100644 assets/vendor/jquery.min.js create mode 100644 assets/vendor/popper.min.js diff --git a/.gitignore b/.gitignore index 477742363c05..90a766742d95 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store node_modules yarn-error.log -vendor +/vendor # These are NOT autogenerated. Check in files as necessary. !docs/stable/_static/js/vendor/ !docs/master/_static/js/vendor/ diff --git a/assets/vendor/anchor.min.js b/assets/vendor/anchor.min.js new file mode 100644 index 000000000000..29a64acae6aa --- /dev/null +++ b/assets/vendor/anchor.min.js @@ -0,0 +1,6 @@ +/** + * AnchorJS - v4.1.1 - 2018-07-01 + * https://github.com/bryanbraun/anchorjs + * Copyright (c) 2018 Bryan Braun; Licensed MIT + */ +!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function d(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function f(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],d(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,r,a,c,h,l,u=[];if(d(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(e=f(A)).length)return this;for(function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}}); \ No newline at end of file diff --git a/assets/vendor/bootstrap.min.js b/assets/vendor/bootstrap.min.js new file mode 100644 index 000000000000..c4c0d1f95cd3 --- /dev/null +++ b/assets/vendor/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=J(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!q(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,y=t(e.instance.popper),w=parseFloat(y['margin'+f],10),E=parseFloat(y['border'+f+'Width'],10),v=b-e.offsets.popper[m]-w-E;return v=$(J(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,Q(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case he.FLIP:p=[n,i];break;case he.CLOCKWISE:p=z(n);break;case he.COUNTERCLOCKWISE:p=z(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=G(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!q(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right Date: Thu, 21 Oct 2021 12:43:51 -0300 Subject: [PATCH 08/20] [PYT-634] limit episodes to 11 --- _includes/latest_episodes.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index 196af502e16f..354e45fb6f85 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -2,7 +2,7 @@

Latest Episodes

{% assign events = site.events | where: "category", "live-stream" %} {% capture now %}{{'now' | date: '%s' | plus: 0 %}}{% endcapture %} - {% for item in events | where: "type" == "live-stream" | sort: "date" %} + {% for item in events | where: "type" == "live-stream" | sort: "date" | limit:11 %} {% capture date %}{{item.date | date: '%s' | plus: 0 %}}{% endcapture %} {% if date <= now %}
From 9b77420b073a0de6cd4fb9dd3065d49e02daa22f Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Thu, 21 Oct 2021 13:01:22 -0300 Subject: [PATCH 09/20] poke --- _includes/latest_episodes.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index 743ac1c7488d..c38bed4b4ac8 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -2,7 +2,7 @@

Latest Episodes

{% assign events = site.events | where: "category", "live-stream" | sort_natural: "date" | reverse %} {% capture now %}{{'now' | date: '%s' | plus: 0 %}}{% endcapture %} - {% for item in events | where: "type" == "live-stream" | sort: "date" | limit:11 %} + {% for item in events | where: "type" == "live-stream" | sort: "date" %} {% capture date %}{{item.date | date: '%s' | plus: 0 %}}{% endcapture %} {% if date <= now %}
From 9279c1779671062c1767129eae72c36e1b94e1b9 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Thu, 21 Oct 2021 16:01:29 -0300 Subject: [PATCH 10/20] poke --- _includes/latest_episodes.html | 1 + 1 file changed, 1 insertion(+) diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index c38bed4b4ac8..dac38c791e6d 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -30,3 +30,4 @@

Latest Episodes

{% endif %} {% endfor %}
+ \ No newline at end of file From c99fdfb8deaf37614501e8b6cde7d5b4c22ae1ae Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Thu, 21 Oct 2021 16:18:45 -0300 Subject: [PATCH 11/20] testing bundle version for netlify --- .gitignore | 2 +- Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 477742363c05..90a766742d95 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store node_modules yarn-error.log -vendor +/vendor # These are NOT autogenerated. Check in files as necessary. !docs/stable/_static/js/vendor/ !docs/master/_static/js/vendor/ diff --git a/Gemfile.lock b/Gemfile.lock index f1f29bd40749..7cbd60164233 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -272,3 +272,5 @@ DEPENDENCIES RUBY VERSION ruby 2.5.1p57 +BUNDLED WITH + 2.2.22 \ No newline at end of file From 1d1bf4cf7280eb54fd3ae6f5794be2e000f44b4f Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Thu, 21 Oct 2021 17:51:41 -0300 Subject: [PATCH 12/20] [PYT-635]-cuda-graphs-new-post --- ...1-accelerating-pytorch-with-cuda-graphs.md | 247 ++++++++++++++++++ .../image1.png | Bin 0 -> 55932 bytes .../image2.png | Bin 0 -> 81715 bytes .../image3.png | Bin 0 -> 76306 bytes .../image4.png | Bin 0 -> 18249 bytes .../image6.png | Bin 0 -> 34478 bytes .../image7.png | Bin 0 -> 4266 bytes .../image8.png | Bin 0 -> 52645 bytes .../overview.png | Bin 0 -> 65319 bytes 9 files changed, 247 insertions(+) create mode 100644 _posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image1.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image2.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image3.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image4.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image6.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image7.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/image8.png create mode 100644 assets/images/accelerating-pytorch-with-cuda-graphs/overview.png diff --git a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md new file mode 100644 index 000000000000..068646d89221 --- /dev/null +++ b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md @@ -0,0 +1,247 @@ +--- +layout: blog_detail +title: 'Accelerating PyTorch with CUDA Graphs' +author: +featured-img: 'assets/images/accelerating-pytorch-with-cuda-graphs/overview.png' +--- + +Today, we are pleased to announce a new advanced CUDA feature, CUDA Graphs, has been brought to PyTorch. Modern DL frameworks have complicated software stacks that incur significant overheads associated with the submission of each operation to the GPU. When DL workloads are strong-scaled to many GPUs for performance, the time taken by each GPU operation diminishes to just a few microseconds, and in these cases, the high work submission latencies of frameworks often lead to low utilization of the GPU. As GPUs get faster and workloads are scaled to more devices, the likelihood of workloads suffering from these launch-induced stalls increases. To overcome these performance overheads, NVIDIA engineers worked with PyTorch developers to enable CUDA graph execution natively in PyTorch. This design was instrumental in scaling NVIDIA’s MLPerf workloads (implemented in PyTorch) to over 4000 GPUs in order to achieve [record-breaking performance](https://blogs.nvidia.com/blog/2021/06/30/mlperf-ai-training-partners/). + +CUDA graphs support in PyTorch is just one more example of a long collaboration between NVIDIA and Facebook engineers. [torch.cuda.amp](https://pytorch.org/docs/stable/amp.html), for example, trains with half precision while maintaining the network accuracy achieved with single precision and automatically utilizing tensor cores wherever possible. AMP delivers up to 3X higher performance than FP32 with just a few lines of code change. Similarly, NVIDIA’s [Megatron-LM](https://github.com/NVIDIA/Megatron-LM) was trained using PyTorch on up to 3072 GPUs. In PyTorch, one of the most performant methods to scale-out GPU training is with [torch.nn.parallel.DistributedDataParallel](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataParallel) coupled with the NVIDIA Collective Communications Library ([NCCL](https://developer.nvidia.com/nccl)) backend. + + +# CUDA Graphs + + +[CUDA Graphs](https://developer.nvidia.com/blog/cuda-10-features-revealed/), which made its debut in CUDA 10, lets a series of CUDA kernels to be defined and encapsulated as a single unit, i.e., a graph of operations, rather than a sequence of individually-launched operations. It provides a mechanism to launch multiple GPU operations through a single CPU operation, and hence reduces the launching overheads. +The benefits of CUDA graphs can be demonstrated with the simple example in Figure 1. On the top, a sequence of short kernels is launched one-by-one by the CPU. The CPU launching overhead creates a significant gap in between the kernels. If we replace this sequence of kernels with a CUDA graph, initially we will need to spend a little extra time on building the graph and launching the whole graph in one go on the first occasion, but subsequent executions will be very fast, as there will be very little gap between the kernels. The difference is more pronounced when the same sequence of operations is repeated many times, for example, over many training steps. In that case, the initial costs of building and launching the graph will be amortized over the entire number of training iterations. For a more comprehensive introduction on the topic, see our blog [Getting Started with CUDA Graphs](https://developer.nvidia.com/blog/cuda-graphs) and GTC talk [Effortless CUDA Graphs](https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s32082/). + + + +

+Cuda graphs reduce launching overhead by bundling multiple GPU operations into a single launchable unit, i.e., a graph. On the top, you can see five individual launches; whereas on the bottom, with CUDA graphs, they are all bundled into a single launch, reducing overhead. +
+ Figure 1. Benefits of using CUDA graphs +

+ + +## NCCL support for CUDA graphs + + +The previously mentioned benefits of reducing launch overheads also extend to NCCL kernel launches. NCCL enables GPU-based collective and P2P communications. With [NCCL support for CUDA graphs](https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/usage/cudagraph.html), we can eliminate the NCCL kernel launch overhead. + +Additionally, kernel launch timing can be unpredictable due to various CPU load and operating system factors. Such time skews can be harmful to the performance of NCCL collective operations. With CUDA graphs, kernels are clustered together so that performance is consistent across ranks in a distributed workload. This is especially useful in large clusters where even a single slow node can bring down overall cluster level performance. + +For distributed multi-GPU workloads, NCCL is used for collective communications. If we look at training a neural network that leverages data parallelism, without NCCL support for CUDA graphs, we’ll need a separate launch for each of forward/back propagation and NCCL AllReduce. By contrast, with NCCL support for CUDA graphs, we can reduce launch overhead by lumping together the forward/backward propagation and NCCL AllReduce all in a single graph launch. + + +

+With NCCL CUDA graph support, all the kernel launches for NCCL AllReduce for  the forward/backward propagation can be bundled into a graph to reduce overhead launch time. +
+ Figure 2. Looking at a typical neural network, all the kernel launches for NCCL AllReduce can be bundled into a graph to reduce overhead launch time. +

+ + +# PyTorch CUDA Graphs + + +From PyTorch v1.10, the CUDA graphs functionality is made available as a set of beta APIs. + +### API overview + +PyTorch supports the construction of CUDA graphs using [stream capture](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#creating-a-graph-using-stream-capture), which puts a CUDA stream in capture mode. CUDA work issued to a capturing stream doesn’t actually run on the GPU. Instead, the work is recorded in a graph. After capture, the graph can be launched to run the GPU work as many times as needed. Each replay runs the same kernels with the same arguments. For pointer arguments this means the same memory addresses are used. By filling input memory with new data (e.g., from a new batch) before each replay, you can rerun the same work on new data. + +Replaying a graph sacrifices the dynamic flexibility of typical eager execution in exchange for greatly reduced CPU overhead. A graph’s arguments and kernels are fixed, so a graph replay skips all layers of argument setup and kernel dispatch, including Python, C++, and CUDA driver overheads. Under the hood, a replay submits the entire graph’s work to the GPU with a single call to [cudaGraphLaunch](https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__GRAPH.html#group__CUDART__GRAPH_1g1accfe1da0c605a577c22d9751a09597). Kernels in a replay also execute slightly faster on the GPU, but eliding CPU overhead is the main benefit. + +You should try CUDA graphs if all or part of your network is graph-safe (usually this means static shapes and static control flow, but see the other [constraints](https://pytorch.org/docs/master/notes/cuda.html#constraints)) and you suspect its runtime is at least somewhat CPU-limited. + +### API example + +PyTorch exposes graphs via a raw `torch.cuda.CUDAGraph` class and two convenience wrappers, `torch.cuda.graph` and `torch.cuda.make_graphed_callables`. + +torch.cuda.graph + +`torch.cuda.graph` is a simple, versatile context manager that captures CUDA work in its context. Before capture, warm up the workload to be captured by running a few eager iterations. Warmup must occur on a side stream. Because the graph reads from and writes to the same memory addresses in every replay, you must maintain long-lived references to tensors that hold input and output data during capture. To run the graph on new input data, copy new data to the capture’s input tensor(s), replay the graph, then read the new output from the capture’s output tensor(s). + +If the entire network is capture safe, one can capture and replay the whole network as in the following example. + +```python +N, D_in, H, D_out = 640, 4096, 2048, 1024 +model = torch.nn.Sequential(torch.nn.Linear(D_in, H), + torch.nn.Dropout(p=0.2), + torch.nn.Linear(H, D_out), + torch.nn.Dropout(p=0.1)).cuda() +loss_fn = torch.nn.MSELoss() +optimizer = torch.optim.SGD(model.parameters(), lr=0.1) + +# Placeholders used for capture +static_input = torch.randn(N, D_in, device='cuda') +static_target = torch.randn(N, D_out, device='cuda') + +# warmup +# Uses static_input and static_target here for convenience, +# but in a real setting, because the warmup includes optimizer.step() +# you must use a few batches of real data. +s = torch.cuda.Stream() +s.wait_stream(torch.cuda.current_stream()) +with torch.cuda.stream(s): + for i in range(3): + optimizer.zero_grad(set_to_none=True) + y_pred = model(static_input) + loss = loss_fn(y_pred, static_target) + loss.backward() + optimizer.step() +torch.cuda.current_stream().wait_stream(s) + +# capture +g = torch.cuda.CUDAGraph() +# Sets grads to None before capture, so backward() will create +# .grad attributes with allocations from the graph's private pool +optimizer.zero_grad(set_to_none=True) +with torch.cuda.graph(g): + static_y_pred = model(static_input)Alban Desmaison + # Fills the graph's input memory with new data to compute on + static_input.copy_(data) + static_target.copy_(target) + # replay() includes forward, backward, and step. + # You don't even need to call optimizer.zero_grad() between iterations + # because the captured backward refills static .grad tensors in place. + g.replay() + # Params have been updated. static_y_pred, static_loss, and .grad + # attributes hold values from computing on this iteration's data. +``` + +If some of your network is unsafe to capture (e.g., due to dynamic control flow, dynamic shapes, CPU syncs, or essential CPU-side logic), you can run the unsafe part(s) eagerly and use `torch.cuda.make_graphed_callables()` to graph only the capture-safe part(s). This is demonstrated next. + +torch.cuda.make_graphed_callables + +`make_graphed_callables` accepts callables (functions or `nn.Module`s) and returns graphed versions. By default, callables returned by `make_graphed_callables()` are autograd-aware, and can be used in the training loop as direct replacements for the functions or `nn.Module`s you passed. `make_graphed_callables()` internally creates `CUDAGraph` objects, runs warm up iterations, and maintains static inputs and outputs as needed. Therefore, (unlike with `torch.cuda.graph`) you don’t need to handle those manually. +In the following example, data-dependent dynamic control flow means the network isn’t capturable end-to-end, but `make_graphed_callables()` lets us capture and run graph-safe sections as graphs regardless: + + +```python +N, D_in, H, D_out = 640, 4096, 2048, 1024 + +module1 = torch.nn.Linear(D_in, H).cuda() +module2 = torch.nn.Linear(H, D_out).cuda() +module3 = torch.nn.Linear(H, D_out).cuda() + +loss_fn = torch.nn.MSELoss() +optimizer = torch.optim.SGD(chain(module1.parameters() + + module2.parameters() + + module3.parameters()), + lr=0.1) + +# Sample inputs used for capture +# requires_grad state of sample inputs must match +# requires_grad state of real inputs each callable will see. +x = torch.randn(N, D_in, device='cuda') +h = torch.randn(N, H, device='cuda', requires_grad=True) + +module1 = torch.cuda.make_graphed_callables(module1, (x,)) +module2 = torch.cuda.make_graphed_callables(module2, (h,)) +module3 = torch.cuda.make_graphed_callables(module3, (h,)) + +real_inputs = [torch.rand_like(x) for _ in range(10)] +real_targets = [torch.randn(N, D_out, device="cuda") for _ in range(10)] + +for data, target in zip(real_inputs, real_targets): + optimizer.zero_grad(set_to_none=True) + + tmp = module1(data) # forward ops run as a graph + + if tmp.sum().item() > 0: + tmp = module2(tmp) # forward ops run as a graph + else: + tmp = module3(tmp) # forward ops run as a graph + + loss = loss_fn(tmp, y) + # module2's or module3's (whichever was chosen) backward ops, + # as well as module1's backward ops, run as graphs + loss.backward() + optimizer.step() +``` + +# Example use cases +## MLPerf v1.0 training workloads + +The PyTorch CUDA graphs functionality was instrumental in scaling NVIDIA’s MLPerf training v1.0 workloads (implemented in PyTorch) to over 4000 GPUs, setting new [records across the board](https://blogs.nvidia.com/blog/2021/06/30/mlperf-ai-training-partners/). We illustrate below two MLPerf workloads where the most significant gains were observed with the use of CUDA graphs, yielding up to ~1.7x speedup. + +| | Number of GPUs | Speedup from CUDA-graphs | +|-----------------------------|----------------:|-------------------------:| +| Mask R-CNN | 74.042 | 91.340 | +| BERT | 67.668 | 87.402 | +Table 1. MLPerf training v1.0 performance improvement with PyTorch CUDA graph. + + +### Mask R-CNN + +Deep learning frameworks use GPUs to accelerate computations, but a significant amount of code still runs on CPU cores. CPU cores process meta-data like tensor shapes in order to prepare arguments needed to launch GPU kernels. Processing meta-data is a fixed cost while the cost of the computational work done by the GPUs is positively correlated with batch size. For large batch sizes, CPU overhead is a negligible percentage of total run time cost, but at small batch sizes CPU overhead can become larger than GPU run time. When that happens, GPUs go idle between kernel calls. This issue can be identified on an NSight timeline plot in Figure 3. The plot below shows the “backbone” portion of Mask R-CNN with per-gpu batch size of 1 before graphing. The green portion shows CPU load while the blue portion shows GPU load. In this profile we see that the CPU is maxed out at 100% load while GPU is idle most of the time, there is a lot of empty space between GPU kernels. + +

+NSight timeline plot of Mask R-CNN shows that the CPU is maxed out at 100% load while GPU is idle most of the time, and a lot of empty space between GPU kernels +
+ Figure 3: NSight timeline plot of Mask R-CNN +

+ +CUDA graphs can automatically eliminate CPU overhead when tensor shapes are static. A complete graph of all the kernel calls is captured during the first step, in subsequent steps the entire graph is launched with a single op, eliminating all the CPU overhead, as observed in Figure 4.. + +

+With CUDA graph, the entire graph is launched with a single op, eliminating all the CPU overhead. +
+ Figure 4: CUDA graphs optimization +

+ +With graphing, we see that the GPU kernels are tightly packed and GPU utilization remains high. The graphed portion now runs in 6 ms instead of 31ms, a speedup of 5x. We did not graph the entire model, mostly just the resnet backbone, which resulted in an overall speedup of ~1.7x. +In order to increase the scope of the graph, we made some changes in the software stack to eliminate some of the CPU-GPU synchronization points. In MLPerf v1.0, this work included changing the implementation of torch.randperm function to use CUB instead of Thrust because the latter is a synchronous C++ template library. These improvements are available in the latest NGC container. + + +### BERT + +Similarly, by graph capturing the model, we eliminate CPU overhead and accompanying synchronization overhead. CUDA graphs implementation results in a 1.12x performance boost for our max-scale BERT configuration. To maximize the benefits from CUDA graphs, it is important to keep the scope of the graph as large as possible. To achieve this, we modified the model script to remove CPU-GPU synchronizations during the execution such that the full model can be graph captured. Furthermore, we also made sure that the tensor sizes during the execution are static within the scope of the graph. For instance, in BERT, only a specific subset of total tokens contribute to loss function, determined by a pre-generated mask tensor. Extracting the indices of valid tokens from this mask, and using these indices to gather the tokens that contribute to the loss, results in a tensor with a dynamic shape, i.e. with shape that is not constant across iterations. In order to make sure tensor sizes are static, instead of using the dynamic-shape tensors in the loss computation, we used static shape tensors where a mask is used to indicate which elements are valid. As a result, all tensor shapes are static. Dynamic shapes also require CPU-GPU synchronization since it has to involve the framework’s memory management on the CPU side. With static-only shapes, no CPU-GPU synchronizations are necessary. This is shown in Figure 5. + + +

+ Synchronization free training eliminates CPU synchronization +
+ Figure 5. By using a fixed size tensor and a boolean mask as described in the text, we are able to eliminate CPU synchronizations needed for dynamic sized tensors +

+ + +## CUDA graphs in NVIDIA DL examples collection + +Single GPU use cases can also benefit from using CUDA Graphs. This is particularly true for workloads launching many short kernels with small batches. A good example is training and inference for recommender systems. Below we present preliminary benchmark results for NVIDIA's implementation of the Deep Learning Recommendation Model (DLRM) from our Deep Learning Examples collection. Using CUDA graphs for this workload provides significant speedups for both training and inference. The effect is particularly visible when using very small batch sizes, where CPU overheads are more pronounced. + +CUDA graphs are being actively integrated into other PyTorch NGC model scripts and the NVIDIA Github deep learning examples. Stay tuned for more examples on how to use it. + + +

+ CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced. +

+

+ CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced. +
+ Figure 6: CUDA graphs optimization for the DLRM model. +

+ + +# Call to action: CUDA Graphs in PyTorch v1.10 + +CUDA graphs can provide substantial benefits for workloads that comprise many small GPU kernels and hence bogged down by CPU launch overheads. This has been demonstrated in our MLPerf efforts, optimizing PyTorch models. Many of these optimizations, including CUDA graphs, have or will eventually be integrated into our PyTorch NGC model scripts [collection](https://ngc.nvidia.com/catalog/collections?orderBy=scoreDESC&pageNumber=0&query=pytorch&quickFilter=&filters=) and the NVIDIA [Github deep learning examples](https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/). For now, check out our open-source MLPerf training v1.0 [implementation](https://github.com/mlcommons/training_results_v1.0/tree/master/NVIDIA) which could serve as a good starting point to see CUDA graph in action. Alternatively, try the PyTorch CUDA graphs API on your own workloads. +Alban Desmaison +We thank many NVIDIAN’s and Facebook engineers for their discussions and suggestions: +[Karthik Mandakolathur US](mailto:karthik@nvidia.com), +[Tomasz Grel](mailto:tgrel@nvidia.com), +[PLJoey Conway](mailto:jconway@nvidia.com), +[Arslan Zulfiqar US](mailto:azulfiqar@nvidia.com) + +## Authors bios + +[Vinh Nguyen AU](mailto:vinhn@nvidia.com), +[Michael Carilli US](mailto:mcarilli@nvidia.com), +[Sukru Burc Eryilmaz US](mailto:seryilmaz@nvidia.com), +[Vartika Singh US](mailto:vartikas@nvidia.com), +[Michelle Lin US](mailto:miclin@nvidia.com), +[Natalia Gimelshein](mailto:ngimel@fb.com), +[Alban Desmaison](mailto:albandes@fb.com), +Edward Yang diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/image1.png b/assets/images/accelerating-pytorch-with-cuda-graphs/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2dca9e4db6b7a25de80dc3152773e95c24e7ca GIT binary patch literal 55932 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 bJh$d8_xtMVyq3-a|MuEC{#CH+)V2QrrIivX literal 0 HcmV?d00001 diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/image2.png b/assets/images/accelerating-pytorch-with-cuda-graphs/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..4b03cabd7938137f231d0d7ccdf0d02fa0563e8a GIT binary patch literal 81715 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≦vmLssBs!taX$GE<((#L>!;XK9 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 U7h`pC3V}Zd_ZjIH>)3_<7bKsv^Z)<= literal 0 HcmV?d00001 diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/image3.png b/assets/images/accelerating-pytorch-with-cuda-graphs/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..01bc2e1a4e7a857a737674b838c4888337f1e46c GIT binary patch literal 76306 zcmd?Rg;$jA*EWm@ij)H)l1fP<(kY!HlF}j4F?2UFfOLz}jkMGNQYN5CH-m&A0)ikS zAo=dO@87fD_j#VRzJK6j-Ro9inCrUEbDw)3`#6q0(VF*_NeF2Oad2=*R8t zeRxqQE;2m!|GpBw^UptCJL2Xe+jFl|(f#*#!v4IGq~_fJzDVt*Q1mZ<|A(&s&vmh{ zhMO1?Zn^NkFWt_HGt>QJE$q#?|MhM%m<5{u{Oq%=g)Dmv6e2smp@)H>OEl7$W6=0=!^fm(oZ|f&%vSU z99~$+G|Rxlqwaj3MECx4e(T;O#-^qw_07JyxnTJF$B!S?@4UR)6moj(7Z?~=)WA#` zd*#X%TBM<&q2I5sAA*kd{QUe%N=rGvGNj)vDk{26FYdYUI&5fYC^GVbB9HYCE>2G8 z*%r6u-embGQv3@SR=$7lL%$Ic6BCn?l9E0<{=GI@78?^oA@uGKT&(PV&P-QGS6kZ= zd^=Anh%@~zb=30m@=(aFuS-kjoq>kt=7Vca3p>3M#Va7U^=ql8q@=`sN&Y5;?&fnG zJL7=dAWeztc-R9?8DVBUbyfn_>W0vpqQN9WQ{4e-QnJ59{~q~K*AmNqwCXI7>WhK{sR$X;9kMlztn{Lskb$-jeWVEzdC={Mj&~K3_652>aMNN&f z1G|TZ2WqHDIWg1!p`*RIv9aT$M~@Nf(+y=NCw6vr22Bp*2fvmiJXb@%55IjYH#}|H z=3T9pach^$c5S5OQQfm)DPCTex2Q|IHq6Qi_f%Ca1XJ7m*2g%QnVApk#Kpz$-@ji! z`M1Wjt+A;|RV^qeNJB%Tm9N&cP1s?KeI$kA0x8|<&!6{wF5BAL)@M+lY6MGY0mN3FK8$N2wVQI8^}-=0%yLP8u8FnR^X!=}u4$J2guxMcY{uKx<# zeW%%$w~>0wqrKMxEg`Yakz_(R9pxh6R|8I9hHy~eBZdbCV~83miG+{HICGeg7J z7_jd=a?jafZ)2K(@#4jchjXcH8cZmNr@Ne$6%}v=Rs_MD*1S+Wtog*ER+juSZgRh)&9F;6* z0S;cMj079b%)|gMj%X0WQ1>PF5#g9ZZ5^FoF=2UmHwyAI(OMJ{T_avUXP=`A*$Evn zW92$-2Cvq%D1?HK5ANrP=ZJZfY9W8`?RAR`h>42&p8b9E0~H+|4Iy>u(j^iSk_=vR zvkw0zNIk7=JdBJM^PNGC6IIV8e15_ST-e&u@X?hV>&xK1Asw6@XkJ@h{%dcq)BPKv zqLxOUl$X1Erijbj;h!ItmX>Q}N?N+UzL0);*80-f?q_fR`c=TrDInkh@%ekD-^0~a zvr&%f`t_d+3%5f~1Fv1XcD((pxp{xO!IrwC_shNe_vbo;j^0KPZEkFk(u?aF81&kC z|5<+kQT^%DC)kJc7fHEIT88H4PT>$O3sP@di!?MeM93{BG0M}>&>Zfr6;)UF?_^W8 zp|4U<*xB2At&f#gRK&~;*IV~d`7A$blkiv}?lAQ96qH--*qk4wiO+2iu7Z@9zzlhh12nju4Kuk?fn?f{b zA(<1~hKL|eC=}_X0;w1qy?#unrm`k?90Y7aT!cD8rrHiNBq-33`deI86-OLi$ll$6 zjEIOJD7Y+j@OpGK_4FWBhT);)Da(;lR$ZMN6lEwXkwMSmqJqCtD5|ogD8^DQc0h(2 z86F;PN4?__tN4_lf(Jp0H1`}IdX91cRX3*KmJ^>@drFJ+`rCxQRgq5$as9f*+ z_o&ldnk7VcDHHPDAJ`n5#xj@d65erq6}`PGl5V?gv3wtI1RtEc(dUbh-0t5`&}2^wpk_y29$Y zF_j$bSlQYt_B7;XQ+07M-sP0e>s%7IUz~$fdIG6bXURlgSJ%qgn&ZqRmnI6gAWSCU z=Ia`yi1Vxr!Ei<|>@E_6W<*IHt}=_;*Uuv4Q*X=$Wn#P|y|L;)N=fJ_Su52F>djg12iwk--Y zUzC;Y1Lz#VpAd$3D^bhn^!-&>Q}c5mN8$i&U`@GOti1;B_%Ys9RaKRs0LpO6K|MYt z@?ER|U<6w_udTT|sG-nv=Us#J^eBVV?(1=1B%wheQu-TZFCQ#_Ooc4-EHksar)TL9 zP;S@R$rjw=*AKD9H_e75{CC;Q-{6agh@gf5WNfo`3XP47qzuPd>*!%v$Ug#jjEjpy z$uYLkcLe?=XB2e%sz8228RE8~zMd(aORws+aDpS%j2=MA8`mKNpZ+c@reF(tGh_4U z5x-S$(#w}GA+5EyOCC3eL(P5m-j-t_*8Ak}PfNePc~Ar*CN9p3POfotb-0LtvHjql zmaeR97#b}sb?s);=1PCof&YuDDyv=GEa-n4HK3IWdA?s!QE_(sT^fMZmls+^P(e2~ zH_z&g*W$Ogx3Q0Ruw^Az;0k$&!R79|@JN|ZHQbGvr@6TaA@^0UD}HO@;p8L?5rW_I z^zs^?oP@Hqd&IL=33+a@_Jin~Pz5FcwS%w2&X;JH^Fw&06{fKmVBp1TBF{LO42+F2 zaEJjk9=fo!&O{=_-M-@8Aq^gh41Vn1M8eqU_uJ+$EK9^ii6D9Q$Dcoc?gZ>95RkRK zj<3t8cg#{?dgJqx&l%sOEBKC_9Teqa^C~3NY&IbZ#lMG#Oem{A(Q_9veu>x|=Ahub zG0HtTm84o?hYf#cX?5dG^BNNhw#4-Xpk}AyxL&yF5KYJ$);`0IP(3=2chtgUh9JE# z%17EcIwoGfLo>g1H*-;wIFv%sqMu=K#iE4qhtaa@Q(Q_OOUor$7wMqGUC2(d1nSRj z%j&sUEfLcQsu&w*E%%=tEF~WO`C)5qZEa_#ayrH5GrS~PplAbnksr*8ISafECr`<;5c%!fw+k08ER)Z)`S7+zJfKFZX=wD^;lG|? z?RoK^E#>-WOP!DD0i&&sYDg;*^yf(I^R}g9T0GZMG}-CI+?U}v@tU-}beZpj?EJ>O zFD?9Hbtp~`-c(a{em;()v8?R5p9X%&cNbI6NNEJ0be4t{4eMjvJv^Xj#!(Bf#}JZ| zvWhIY6(WhHEo3O76>7~o?uHya7x&_X#br9zIx|rqf3Z7r5H3WmDnwyVyX421{qxau zy|u5do0}U!0XC}QWWTbtOf_wOOl9-+i{TSK#>*%uVD$4Oam2*aimY~6Sy?flq|S~# z{7Ytcj{p89lj}*m!4_~wQW7Bt(1J}U4mTFPcyu}BaE+~-5qd$=z)MSg@MfY zRYQY7(KO(My7a}fk+YWQrfS>4+@;fF;_H$I`udZvUqAe_KF*Z8YvVTRS%|3O~TCHp?$D_?|pJU6Oe`N_0?IGVf^g-~sIY z6s%9=4jB?)_*}amZWzw|S5g1nRk*FM%^e&g=;0z|jo>3{zDIb%bI_4AZ|*aVFv?RC z;DjkbnLfeSQdd`ZaH!Db zVsLkNU!U*ll3`%*k0#os^Koxd7Y?EC?EgGGob1V>kJ;VbrE3S<5zG1cil_2&`>wm+TBMxzZu`w@L~N<(|)8_suDWp4?@woiPdu=a02D zYFb*Z!!HAcNLpd1r2bzjT4N2igRbs@vwhIDBIHb8c{1jtylrt?qMF|OcuV_rA~d(c zakGhs>*JLWK+Gt;8WYvb#cRaSH9sF)z#VYB`!mL*-s+N^U4N!foDBp_kG8Puf(&Y? z(SB6r{B#xzM+_%7ceXH+=44N8BvwC(x z{JPX3Yh!IeQPD8^rs)FiY18&r$XS+Im+PV&DhV2mj+7cC85!9@*qvkM?UViarKd5C z)c_z^U8L{$?@~djEmhB&YFHRLir~jK|6w?GS;vMp!)Pde08j%D7Nel!qQCv{H59!y z)z8~On(?Q!3|;y!@PP?)gnYZQwUuaIdhgW(Gt8n*X@ZmtPOP&N6#>OXkEh?;65vHg-3a04&+kV{DDYSf3Br|Id6 zTP5}N+SJH*wL(88Yx9=OrMKFDlX_qBzo%_8EPTB6c!R`C)Vvp}tQ(>|v$&*0(VXsG z+e>CRgNdF!>?$QA*YEfVJpy7(R}v&IU_3gDsVSLU zEG5s|KM>l`5@8#48>=gWibW8zy7uOb{}PO;7F3N&1VTYQc^#5m{Ce0 z;jhmYXskw~C*HruE3=ghIu!h=t3DH%H*mN+s`1f7wnd`-c;xX+qzeMj4yQ!|5inKp z4zw%LUGGOPXWT8pVkeW>{$b(vz)uEwELqTsminlF;+}~-6W^Y;%}efX3C(L_j*ZeT zr|6=W5D-Y6tFNgc%`;V1z0{FwHqhVyVatuRIXb0-3STud@kXPiWQd9uMKEnxRu-)k z!d6L0P*B%1s%rz2E}yuhs;i=#OQ^Dwu6k_FX!Y%hx3l zgb~Z=_;cqk?Ed@`@b!K4t5>h!67SD0@ESEfahps!HY=cnU#z+G($3h#gzkQZUCU&-Q6sI@uaRDZ_ph%&<00hsjs+e`HT1+K68Fi548+2t|PswvT>MsUCl{Pmv1_ zmXcFpK-_+zO%b8UBq~ZJ(mlyy8Bbt4Q2gB_S%u|5-5H{srDKTblcTYzDSfbZY>-xL zA^Y*C7|4^C@NiQ|zCnvjz!>Ovd&i^Kfp#FoV`o|QP?IC(t>cG^YV_hoqWw(_n}_22 zr83Gj3+kDt$;n|ZT2ihHIMn2Jw6f>$fv(O}z-d&Mx}`WHY(D}FlukEaUhv@>Bvn^y zpcJ;%MGp#&Gcz-(1#B2lR%cf&@WRyLx5i{;YS6H`^mqIzq)CKq2k88}I2~!>VLSN` zMbr$Dl`meXXlRsmJyTOfVwxN?W_@nJxoLk3-MzfDgpZF;yWY@ah#!jJspwPwX4tB^ zjsTHY|9ofj0M@nFPqjpwh=>SOjo>;)Q0 zy8NZ?+{wAeuBerd^o-QJ04LuMVA+l#RCY*wp6g?4gWQH^MiUA>uM9vq$V1|Rnga1yKLW$ZC;XZB8ywg%Jx zCKdY~^kknp(OwrdbZztaPFj;ZEPfIsHk|5Gbw$% z{caQJzAvwu9(^E$MLKRuIZZcxhXw4|rX++YPt>h2HntBKzc#NQksnH7Ve6l)3jO-^ z>wpIX%xhcFkvEWAPhSJ=0GTl5X@z~30k^P_kRri{?(P)LUEKRVsv(0r&~hQ?g14*F zfhT#JB`hqw+tf5RrVFfb`x6Q}I%qTEYYX94Mwiq|MrylGX}+tq14`}ck`AUoLSq?6 zlpaiR>*(Ns0R_|nG?9Ton}vpks%Hr=?t4mziVk7S+kLed5LDFEt!-^lk&!=VTY>O2 zXQvpcC7eBl6Mv992h@WrH2graeuo?K-CoER^Vkl`+O?%{yPLvi*}ae_1i%QQexYm! z4>xRM)N_|{(Oppy-z=lZ_Ags*IO0+JvATB?5M8oxDH@s@lU8@=#+{v=Mb+XzRU&WQ zy0!85BhZeqh_}3Z431gQSk~JrJIG)N2-$IfTVcWOz8mcREz?(kB&kAd3(qFsy*q#L z?fg}$wLbqp>q4HZnt$)e@&GniX9;bJKNXFEmKBaBmJJADiXcAcNZWCTgO-+d$tI>T zzVHQf$qcC8B@H?UIEexKKR=i*G2Ucl)ut#>!2m!fB;@DgV_Xv9=NAvyt8!YG?8ly1 zXv--nDGe@(`}}MVKJh>Hq&(uP<~uWPb_Oc_S@t!#)rLVS%XajAA>=#4JHUY-7G7x; zhG0`=UEMP5eyVtbm?IVc7TqFX(kTnq^YrvNkU><@MfLUkPA^#oid9orx!iYu-TtJU zK=;NcFv*gHn3#^9{ufu-T6`kCgbj2(nO>VS>8F!Q{(aA$Jp<_GXm1ZiY8y^ho|s3Z zRB#nC&ITUtcqPjv&CiAQ=WeQo)SFuWqQrC3K9j8;w%w@#Sc(GJ-AU*uKZgEV`UcUb z%lV<)dE4>Qsyvf*`(uddcty0f#hyX%>9HF_?k@CCH&(7@&be+E|< z^$60^((?EBS63&oH#9JKmX)OzTn&Y`xU8(tUk;i>e}C~iTuKl{&d#??FPU|oB=xq0 zK2H)^8s3jlVB&W_p5UJraU8~^x`RFd3GY5sW{7-fRg(R+dp~|ug>;-4U&tP96zM!nt4Z-dQ&Z+*ZbpXkt=mdri&PYfaCHDI-+|pYJv{|7C$4w5 zAC4T+wOa>=hf+a@X=d|wtu-~b#KjLkKNkQskC=$avX!?EHlCe*6@IOtpdkL%xAe3$ zRAgkX-w}|+zzU?$Un*6O(lj#SB$C~e@h9n&qW(4C?#H~JSyf*CvA;h(AOZUM1Jj6u zvF&lLK9jwkFe$3zh9tOYcS;ZgVXc?llxNFl%}H7Ko#lU47PAwYE5@ICGm-tXr$;QW zd9jSSWZ7=i=^Wz#n?^EvbGkvg&=Gnjbl92|h zN#$Q9dj{DxF>w&I9FMb~ z+}XKcFmizqi(bR_?%|Yu%0GMX6Z(^kfHup3QoQe^c;z7sasTB7_|G~Z7IM&ljT49y zN?t;y7qX{SD~mG)eJRf8A|FlK)2H?G3j=nSv3vtgn73R$C?&uwfv5_32)Yb&DEuGa zd2OO_vazS>pI5PxEo7j-w0cCHOb59;!@fc-vAXilef{TQ|MNohUD$>RJ&t#N|66?5 z1zmnm+B20^9q{(g4_S%j<@S(={RHT!2oMXQGQiDB5#g)j%(KKHST2bCr! zCKT;8<@gn#V9-%fP2tkZXUNDP@domw&%S;jYKn+@Eh96ES6Ea8EK2p7S%EY|zA*0d z=g(~ivbBtT35fBGLS-~HHRa^wh&-$E`|?6g{TAOwaNm7fA8S4%3~HGFBR<7%Ao4V1 zr#Q4hmTwC=3m#8+(4z%(IK+&OvelDIct$ZYAbSNbd8m=#9OC27lB=kzM{H!wGDX<& zsL8O9<6pekyg`-k!|<9Xtfi#|XhCO7VYW<=M@CB29>l`w===2P?%8jTukSB0GZ%g9 z%ZQ4IfHI+^tlZYx`e$R><3r3<;FKzIc=`aWaJxRdhFCy>nSqUpkst&z<}ce@4_UH- zL|(#U##_7!hKVK(Wq=VNOG7^IUgZ!HYSJmYzqq&MGMen>$kXlDxdVKf=|#*X$Tyb(K--OxHbQ+d#*kZSqZ7 zq28?TtFnClWVW&)Z|#(!Fy}9?uKvSG`~6OQvY8sNYJZ6taci*~;2{3+c0X3m3yegB zvEkiyProtZJ z!$aCA{R<#(UA&@6MF_wFt-c=w?IYI|c^_hx&$w@#Nh+ z(o97RR6A{L?N5Duv@|rUQ7@XfDPutx9h*@MAh?yR!pX%2y$8hQ%)7rk$8@q7Un$w! z?WNd7=H#;*^Z=|Rna4nNUE*9_aZNGniJx0b$PP`9CJ&QS@k^l*gS)EJ;V%MQXeWie zmfrm`Y~e1v^#<8yj5IyT3{}jqxr5xJ&l` z^&KIl{L)UrGRaf7Hzmf@&iW}EiQO9Bu{6t6tjgn08W!d3`_To0 z;N4ZNt*&75E3F|_Ns5?}krANon6Gsla>`;vt&AT$NKZ+5Yav5WLIbNf-ttDP9fGbK zQyvyp4p&zfa&}EKy3{Kq7#YXWx<iG*39aGbjjcI}M#)ym$53Yw~i6I)R`|sV%CV-T9L0^uR83Lr6 zwb3glAuZ+Uc&ERXyTGmQcH1630*N;C?fcDnOeE>L^-5Vt!Ye_iSr%DVWt zoAXMN%7+8S#wn+*h3^TSiB6;+;xOdHby|NO*)O<{E^B^nA=3Ch|H(DL#C2`f(wNQY zZi;%rTljB7B;Zc6Gm!Ir5aSfaR zH%0QV+t{3>!CJ^eQY6ciBGlNwNN<1_7nGs%EWvmzzvx$LEz7i}d>=>RHKE(12dX70 ztDnzX)j6Mi(W;$$|LdF+?U*n~f~X``9S+D*zqO^jH=f1Es|$p`SaTf`779Z;7!09H z$;0;~;iPr{zVvueC>?T;PPA-*__>r`KJgz6s#oec?)BDKa0leP^`ef{(|pdJ9J7`q zY}9$(O?dO$s8W`Fl`QQT8n7aCBVadjAZD^N7SO6SY66w&GlPRTU8B1C!z>!g#_IC- z`F94fuC&0%4}I0Kxk>lYCc0x*kTIbEm-3?J{5QIqElQ!)_wuo@wsq5UgR$?_97eMK zdT$I3X#(FMARs_Q6btgIwT;b=MdwUDupS^@3qo@Po&{*h976fw;*8;Fp(_sqMClr< z?|gP|6IUKWdkcNpT(pwK%)H|k`9o(-g8aT|wn5t6c}*I%a@4!R8`=Hm$Jju&m?iWI zd*6E?%0GRIxm+9W5I*xXGxJmLb=7$%ujeeZEQJ!h`zQWqedqVPP5jVRE#lR~dCzTZ zQa}!%rlw9$Pv4-2d;?%MS(rSUg_oBXxTkL)zG{~Xvayxr=ZDfo5P2fOqUC>bC{%QA zuBx)K@AGGFZf@x4-DzJGk?Uc`WFJI4%SUp`gv%d59*Q4qIB%(gB~A&4W=0sNhQ4}e zBnvVcGsjQS#|81e8!~&U=*W6@3JU;lbE=CzJLxJZ`380qqd@Em!TL;bozAxVrFyKc z8zU>Pc1@oh5tO-_23orij=B*}2I-CUp5$>lLNoEDGbjLBMlw0@HeqEk$d~H(?tu@C zPY@g*VBS$qydF<4LCJ{aHnnt>lp>!$Hw07A%j?jgNr;I>e>e---v&eteUKkC%(CGZ z7KLvF?ULQGC7wWkAIt;MqO9c&G%#DUt@1XI68k`CWuXqo}cHp^$Hq+-?u1mXGhL-FZ`lUm)EFb*j^WX{tWxUwW+e>1^=FX|Z}E zak0Uiurk$gazOUY-gmRVL#%QbN!+=}(0Tr)02hj`QY9aVr?wv@~OdrhsXMg7$m(%I?sfU zIH~*0TBGTH&{hcH6c-ePQDp)W2l;zrW5Y^+e3_88Jgvk0-g)LSpK~)xWd)B6{g8c? zzMtKND(&@U>cjcj^gsoIhjLr$PS#h8{qPkeE?|5Z8==hZg@Ww31^lPICG?*NcOM@% zA@GvP6129qF49yX0Uh5Y!P46(O>hWc+eC1MInT8}-x#+#*QlP_Xn2T=vl$>=tra)an%+Xo_EE%Y{KCX>(M%N@at78H35Y}XfQ`o#!nMSz z3JFJi89Ge>oEf#9hlG<4k$oROGLk@DK_SFJ4zKb1p5p`VC>lyiJ#%x78M{)5Vd{bS zJ=}jG*(=ELO*MZX4-4Ogozqf~v}ed-eb3{dDe%v>J$}xrP!TPN2c-Us7pvgu0Ji}g zO-!9-4{%|is+48|P4^tUQ7#afpc>h5zlSy*n6L5=wl9$mm}=u@ViFQEIl%na#oVpn zVenj}9sC(8kaoaUP9o%Bj|$Aw;6z*7Wr0%8%&g+<{1Z#KA;1VU3TG7L|FI@VeH22q z6?PW+=#kuIHLbC!I!mm>lB*6qd=?3|Iigqcktmesj|mbV3mY46pl7?OsNRUp;vtt1 zHXd?eXrZXV4J*lHiGHSdBt;=Tf$>KX7Xc(~{M?!|661k3s% zD{FY8`}g!tL!vCDQ#zui#7wsCuSh***so8R^;?vsv3mOD!3tebVIg?<+=NEvzI@3k zKmwOx#e3^>w%F*<&}~7%G?Sr!G@FvLvZV_EF@Ri&D^g0J6MOWYz$CgUel8U2ff|P& z;N!#Y{QTlG4>I*LzVJD-AnPIFKXpiLtA9bpF}56^i9IG0j)roa>gqPvQrfv|ZRqKQ z7ExV3&?#orkEF~C;4G8u)H{y+ZNWvTLfk(%I0(4`jH5s}a?)nT$CL0iCM6}IP$;E& z1S@4M+`RYJToCvffQwXI8gmVTvJIXb)Xt=|FBlQLoI9^+R+B3VyU0I zAlA93f$`z18cT|p#|i@qxFMC2LufSqKMI;Af?H?F$2I&vF@2R1k-@hM}(qFq)_S_}wZo*3vhb(Z+f?encF(xt} zXzA!!$wKojt6T&6go=zYRM(WZ=-!sJGKtukm9wn%qoVUV>hPmXLHm@juyck<#FsBm zPE0uKVj?f!IBo7aiRW%Q0iN!F{m_9{&ThC+aap+cA09F=DCk$~OGjfbFQFw{8_>LP z!(@hke4+U^T6_VEA4@vBvCm4BYz#QgIQC)G{c-5y;yuuD3JGl2jan2*QaUcF`B^x= zQAnV=55XQB9PH%8%_sO2brheO1z;j4CkIS>Ahhxc?mS3MUHhjYH3m1#ZPXB`b=2`- ziv$u3`sltFE~lkNP3jSg_-Z_@Fm6b@u z;d*85?Ck7QUUO$KdEM|Ta)i?K1s++-`coPdAk5Sh0}5*cdE^hSm*nJvq9RKRi^YwN zc4+^Wj z76BO!%h|87v$MaftGh%r^D7<2e8OR@JeB)DUg^K*VYX6^_5*}JNfOh4yS}U z0D7jn%37XYfn7SIdqa?g?VD9iAhRhiu{F;rBpjrzMV9Vx4L@mxMDCunQ_4Rdd zG{6=qC@GzKUG}Kt0kg?0t9s@blp~wd#)n8t1!tZt$hprshJ1L zhE;-$SYAhmNqIVW+(<`TJLO;Ow6qjHDh3Jk%9?`%*5?bR1cpdJ)vV;vW8$Z*_!p6m z%=b4i~$E@_UsqVz)VpL%hA;&e-4oRaTZUSSg@Z zy1VZ{-9pG2qn)%ozuuh)M{`^v%&Y^7<$sp`O%u$F0h6-iuxO5@f&w02BeqmTW=azj5+q#qnJyRHxz&=UbDh`Wg;ShJ z&ynieAfXQOYVh4HkvX!^*<~r+7O71IWtNOtiQ5>x0hWc$yO21@V?QL`kWPq;I|hca zudgrb;!cRNG(Z4O&X`oq%*(hUst&oWv)5%Y%a6i7O{hV+|1&@zXL2hHU50$5YO1P! z`1`BtF@K}<6*0o}!P#Cr4(a3~g;6Pa;`nxQyqp~Ql`B9hESoV_ z*TI?FYyfQG^61gml@%bR`1r^ei|;|dnI#N%ok}3G=^bd#(>Ogw|5~Pjp!}%t`gRL& zOWjvhpS-(*TWy4SpEC3K)B7I$3}@>WQ`P!2^US2%Jdr*eU8)+(R5@PTer~?1>aP?k zS|NBVUQ|@vRZ}bKB1Z!0u6|WuBzUIL9vmhaS@p7H?~43_^+>YEt~muiaVBYMd+Ka~}YS^Nu|9t#D!+ zh?Tf0L$=>sgo%&$NQ1_H3l>FuOPx z+%LjAJ~@G_)(qb&5Mao^j~nJ9y}oho(fM=gSGM=}Cp|N&PVn(e+o=Lqt)8Un_ZFUr zbk4e2KJl=tVrO`w(Ei?}CA$N$5imu7z9i~i%p22xob2~dEsyrPSX3uIHU z7foR>XFtr(98%JUX^oAHPT}wM&CT;KEy7{04JcN4jB);-dQ^f83=1<&j>pso&}-WC zXMSMf=Wg?@z>X~_5`0@(`9yjG=K+MuI;T73V1MI-0g8_w-w1KfD3KPhSM*z@6z5T- z@ttc?O<~i=on`r$8Xaoks)*y9vK+(me(_S+(+<`8_FEZ}|8(fUtMHKJr2W?xeu(=W zWOZflEq>Xh@~a-dUx%cwRFZU&SF6$)Rq)NSlzZ<$Q2;bZE8=XmOF>Ot4lVKKX8#Me zENBqn2m^Wh=k#~Dzyg%Yc?_oQ<;$c-D+(D5mCVctD{wA0R~qBluAFD>t@U?O8_SWp;i~OS*>&o1jxlAe|)0JG#KHpC9SNg0xN29 zSL3UW4)S=mNuHzIST@?Vp}Dja;IkO<5jdjmIXG~tUDPh$9b{oXJ350^U_@c32SBQ# zjJ--vG*kNI9_@>ZkSbUpX;?8mq%t9c#PRQbtk@Z=2if2EYZoUMyTBsx-X@?~7xJ_a z%c4{}_KFod@1XkUKJYLG0`V$ae#0^Jp6+ zvfuZn5r~u?kr#X1jY|K8q) zjEin)aMboj_*-&uaY;zDfzy51+=wR~{dwo1M``CBI@s!H!~3eL)Z(7(e(36g#je_t zF1Mu%a_l#6M*JqTlfgJRIzmLJ)3q9K*Hk#v%{$*E)voTB!HmT;D?ScKHxYQR>IMNr zGuA`NGP9rt){ax_|0Q{0!Ap_pmw5$fIc}} zALkm8LBF)_qYRVDudYTyilHF9bLS439Lz?&;el=;9szYizbp6zY$mWOwY9v8T9(~$ zvIJfmQ&=UJ0PE|NmX;=;9UQ#OxV*kT11J_eD?S@jWQh0z*$uOM?ju909HT0F&Uapv&Bu-Q7+H5B|666hE66}Hk3ChD0A9!9% z5C^M$L8MDLf}2LJ08xv}*N6m`1dNc`i86jzKb}()dXSpq)+3v9H zAsu1h=Dzn)2TTw!lll{Si(d{?0Ggs;mUcj53z0VsR!KQKXdWSq$fK8GpaRT|5W4z} zIKC%`UZ^3ko&zDm5p!2Xh3fXh&?+>@$S2V2Kzj%k1TplObElQAdF?IlxWu(Y<&It7~$^b_J-so_ATfoeKlFg!2q#=9h%zBJ3GE8 z;_B`W5+RU}*XOFLt2@AxH0vW7indVTIW-?bQ|94P;WWcKw0yfXJa#u<)+o=!^JMl4 zhKG!P8cDL{MLgScjJpbTbp4XXl4a+*9BLyupkGv|yxCCq-S{IqxPC*bs+2 zW@cu0b9cb1O(q99x40uJ>Y^Mw zA766eY1~u*~FV8Ww?*xn>g|uID z#B5AAti?+oEQEt-xkyX?5%snCUI1D_K|vt1`n$U?+}NoNIjMv;@zZPv&Wuvj z>|<+K1k`2I%5Y%g#b3zX8@RNb)^m|XVxwhTC%L*+>CgQB(Kbju@fMHc3wrtP_3`O) z32w3tC^LyLsJ3XBMGISY6Q_3>TF85Nd4UDwgQFezaovw1K6yhSQQy2`s;6i3@Zn3a z*q7_Zbp2dPZ-x$#83kOI=nYxp5j5!KBY*Mm@flH|u(QY9y?0N6KulbGgckZhn5wMeU&(w49RJHI0zme zSm#kP$i$4;`8JN2n1lo+0(w!`&^ZPUj!XYc%=q8rprxkn&lXE{(x!M|Y|K@OjJsC# zKvx%=B!I88v9W<+HFr->lLi|SIXhsGL@6eOxl>t0&8Xs{qYGdxly(Up2Wt?8MRT47ad;srViN|7`{Q98|1N4z%*m0sWy6 zub}XYA$WKB8sjaj4_e#6QN>Y&WN~+JSm*8fXZ|cq266SO;=1a&#`t`@XZbYd;Xl7p1%Jh z*D$cx7itxB{_=;Ox4!h+A&dKp*Ek$In5$-oKR7unU|PcTi)Px+%)}TUxaPsY3T81l zh(XYB0v~~$YDnCyLpj*6s`^{KLPskUCeTX+!ztgr0Q`bQ>z`df2ta@J10x?rC+YiA z3wZ=V4TSHl$a?3_3B06CBd^nED|gl@Doz%BPV6!6uCDpgmV1!T zAdKUw_~f*l6QLUgRWb;qGsuAORIqhW41J1buxJO|kVTHrU4fjPG>%R8z;Flt1Xf>> z;AH#VW#0xZBzBx5IGWBm@k&XyR8XcY@CKABYU5BGDg0LT)v<*QkMgbXT^S~%uOVg7 z&5x&LD)Q42LM9DoKcBq3cI&1Pb-Yq#Z7q!I{)H)$UiCN_(*q+dAWjVx6@p8be(mhI z|ARPF`{UF}EqI|%e#13PlS5#aPYRiSJ^xc2H3G4{I?QasMHvh2P!H5Ju&Tp+uRxZ2 zU9~gPah+Q%c6eUy1&D0G8w`z%VCAs^fpWVfn1K?xefzafB@H#TX=fmHmmE%W z&%Ob_b4pcB&Gmn*CcsC*35ELgZtaL#MAdof zPcki_W%d(Pw2_>6)7La#94#y?Y;BvZ`<_CK;^E=Jr(b+uS^4_j-8~@cE8M+?V*E>3T z#l^_L0C)}$Dcm7p%3{d0e_$+MBU=JW)h4&=>rWOvRfU;J@)g664uz^UyHFZdfI{y2!ceH)e2iy?eK z8?M4aNJ3)T>V9)rKoK8|LIASMCy40q@vt4H`ld&6Mn+j#S+m1<1=#0+&LoDZGEXsJ z+JQPuR{z%vwroL%rDjrb{~HUjDM_kI)G9Qh@^faUTXWaesMj;y5TGc`oDMt}P@Wit zDG;ot0AE03+1LngZnE+7Yk%upkYRXz10Fo{8IiueK0G)AX4zZ)|8V{!@8X%6pU=ZS zwOc}(^f|Cb@n6GI*924-^s#W0Y1(;-LYMV|w9l*`Mi+qA+!|)AF{%DGkV_D@7Dyxy zmlL!mQmn+qQdA+}L7teKCDXVR{hg%2!HQc?;I?o8P%cz%dQlZiYE&SY?X zp2rUc_^e_F#9z1@sffqCfBzl`jptceeT0}o#n|KHW06#g%kd1z&0 zQ(9W;P|+-mx!nCMIeBfcc-5F@NP;_kv(H< z<=NSAPi#_)UESi(^Vh`MlNcz7 z;EgCnUseiXjf3$GrJa0d&nfFO3Y&zoDf!Ee&#_sub8!6n^XCM3cI$|K@Fb3pKZuBW z1!leHGz4$4DiDt_J!C03p#PRaxFlUdkrs04C9k#IRZ7aaHXn`WPlqlLG-7QS)z+mC zv+rVMJ#t-)v!2oK9lc1*+^R*4Q~$S8Rfvrd>e7-Dm_k|dsp8A-2iY4+AeJ%N`;;Mz zNwdZ0F@{@4Kg}zzs^b23?IfN0mR%Nq8a6kR!uMB(!Y%#ae8fkk7S=JQPkvLfrQeOq zTA<=g;&K{TJOqMH@>a_j1DP8?XPp7eRA70Z$cn}O@k;$D6iV>7EcuY|eH+5Z+d$N2 zv6eCeDGjNzg{{t@9eiTomVitz8F-*c|0Nt<9?tn557!f(%JcuQ_vYbPw(A$LDIRHf z3{hk(k}{=)lv$aRc_>8YC!&FrnKT&7JU5W3WO!1EQqe%BC_{vhq!P&xzIE68?%n(T z_V@Sq&vzUh$KJbr^xV^Ro!5D;bFFo9?>$V9z0&z$z3g`m*C!r-2lT?&vY2E2wMK!W z9e$uTR#z`VB#rloq8_yZTwu~14%1VNyfm{cHldS}GxZF7Pj(UmEiG+DE)=Z-gdt96 zsgnW3KJjLY7PZSeYw4Jd)6(i=eIE&C4gPutfO5c)>f3d!Iv+DuEfGuPED3z{5NuQ* zUtc}YOHAK*sxE@UwBjB;7!)F*{ml5{fjWq0<9MlWKZ*U&e;S$Xy!e(CvFuzyD|ckh zDf&F)l$e+-(d=p@W$?Ga6Mv(PcW3U*Sug6`eva6Zr%NCU?t*UnkHa$sVe_xU^JT0m z;yTc*S{l04BG8?!+%i=X#Mf+@p4s^xBOK40Oxz z`IZS3cXT44mrt#^#2etEH&nFj_UY>C0%uC(L|Kf(GW2yp4De!~H2_iI?c1FI6SkTf zfoz1l#hry%%sYO9G!7JtiRsMr^t9m>&E>obm;QYM{tq_vh8>?i&i21?_t47;yBbZq zVe)oa*`@tr2yMdR{eS&t zSzBBLL2d)O?w!OLr~HU{9x31kH{zuMPjm5C4QNS>!*M07qEh;cnXPv5JBoOmb-6h? zaSI0z9z+51YTRig_ULQAg{e?GLqC6I}$K z6@!|LK+3t&BHT_9RtAv^bHs5i! z8S!^5Mz7`KBK%!Kp|s&sy$&ASH#H4S%{Y^CV7qszr^lagp)gJi zc++JWyN6@ds=?2n7tnwM5%+mR1LQ$Yo5#i_e#r^w1)6kmr3MDlnTbeT`ljR6s_a=X z!r51fqv!Bm;--AKOJ7+`dB0bAl%lkBGm1_e?WS)~j|`8Fp108{XqUdu31TnU-5i-j zp>+B<$S`55g8ms$5{%MSFcf`wJh2R12*4r(XA7r8=~`7oj$hIU7KVTF z{_PYlA-_c733mFbV>7P2p6Cawt3QS~#evcQh$=dSEPSJ(*U~tPOyC^bEXW=>AyD}>cTH3-`_0zQgZHQ25@)?#?-2p$ zf^0uDWtTcOsFI3osuw&0=6U$M+)We~DdOyd<8xmIBD&tNgKDgQ}^+ zk~hV}s-+sxG5C+9)+KJ`hSNd6Pcb64h35>QYBFzY>M{Ux2yk~~FGJG@655$y4BH<( z2Wa;OqE^;Rjaw(r8AdIL&XtG2`|tU=y-5&Um} zN#B>ZrK~nMR*o|mOwA3O+)+)TIbW&$q1RXd%?)A3F@m12cg5S-*chtWE0Fo6Wvf4{ zx?fpY{7Eo0M>iRA3?aXFXjs?H&y2wT1j=5Ii6M40XE-<>r}jNi4y0jX0F($2{h5jY ziI!nn2_9g{yBD4+W>-Iul{xVaGxxEjs$C~JOy9koSMEUfRjnf@uV zl$63^3o9$IpMgu;0TVF9^?woqp89cu}K}OD?at zyKv~kiUqcpSc@I-tpOoWTvXIHZ4Xd|pPA5w4t?q@FSxKh6K*5uLw$9WlOhW|pbbJ( zo1jXONvbro{$w98`p^TLkxr1^axSi=|4g!(fztGGZ=c)WifY&o zujS#n2U{V~87%CqDm?qp4g=hAz zpK+ZQ-CG;8T(35lD@Tytfb{{OS?j~i_aQuyQ%^23dR|;_AVL@ZP>}dXYDodiZD{*> zIjz&_LuVsEzVOy^>}42SMF;#0xhD9(Hf=-Zd8Jm>75mDl)X}LOzY~vZm&#_|Zd{Xn z_3Go-uYUj%j9(?2)}$maZ}DtzQNbE#tI-t6)kRyd3@>G0)lP-|0k2vA1o{Ia8ja7N ztCCO*NB-|+Yn*Yuq|?l!Rn(ZVoGJs-H>WGPC0?-M6(mz2bKIfcYpqtVxN@Y)E)YvFvR4$p5O8P&uELcf{66(#}Atd&+Nit6k{G;R6;8**490r zyjiX7fkcz+a^-M|t%R6L?E&bgVAAh`dn4r2Fqm*^xvB-2k}|oC20akyXtBbrVW;F(-NQOupS!yQ4l{!%9C?f9s)I0J8_rq((v2%%8#n@1Hiw3Ysz9DUU*~cC34I z1+-$t@YEoDa1fxAy1*c;si`3eVl_A^+<|7lLg=iVfb9jEvWC@bCeL5OH_P>$q{i5Y z@^5!^>pOe@$F)Z4I5kE$4i3R07aM@}1o$>QdbAF<5-5nrd&80$LVE+L%+;DtoAv=# z(>ZIQxG7owqD8P)J$xzpGE zqSn3PK$q$k{#=-lB_*v6;hCMAodrxV^!~k6NS7D1k_iQ0t~air4BRgPevI7ew3=GT zf-d^W$*}MAua4i@B)f^W|2Ww>7LTr>zFI(nj$++qynL18VHS&C=i6V_w(!jQ`T33B zEMCIEfc66Vo##f4>fESJvIoY6D)u8S^QrSk0t4HEPrcPPPC0l<=!SdaS_<>+nW|ld zP7x#l+Z4R3t^C%jc!Q{Ul;zxQZ7m@!=NEL?6joawC>@~2)bEbyX7+fR83c#!5vN@gtVvk-xj^K#^#{iN`$YgRePP#%mdrEgDWgtZC zU@%Q8ay~tJ3X?!nPFZ9Jr`OD_8;q359?pIK_J_j6UPnEF7Wx9x=%q_rxMUsG0(RtV z_?nkZp_3%HxGkY|w%U|saa_mIQAGL+tnkVyZ;yh(bXtaE;Zu`r-)qtuOKqA?$BokG>k{MR z!;(*2Hx@g8h3779r(?v@S;8={Nmjx|D1n9~N2RVZ%YETd_)}H>RZ>yM39CIh3zkK) zu*4RMU5&+yW+31W^o;9$w(61tsmXyMIzqxU6n2+B-D}G!G8#;;l>=Fb-xC!I452(DqX@C&ds6L6M(ws^*4A2$`$~G)z#Hi#mzjk zJaClq-oagqwQ(UEe*WLIYMDd_d&BL?EDuo|Cnlz_hRVrO@;0jvj)D`5kbLoNf z&Z(A0Zl9?!-><1&Hv=V2T|G20F|n!`S~=}&Ey$3W1r1_{em!Xnl^J)!?kRTTFl13kasML2Nh`t6{x^m3))xQWkk9{`u*VQmbyx5^LdzAA7fN z-73m)4l>-4u9P!pc7u_kn!UH6?f9&K+{>~i*}6R8jH_p{G0rl01c2#Kibeqvv`{5FC*&AemDL%I8chEH=h# z=jtY3mUKs{jf@Hq^Qt}hD`FVS8fec&>~0dIp|sN0%#Xk;g(L`8&+x9Y*ognL;*`}p z9c!sE_ouEkzAQ3!-I)EU4_N+kdu;o;x!t>WCnhZI_e-srmh!p?Se7R$LTEkSP)~v2 z#b+cz^ouGRUu~r&o@Rl8whA9-TIhVmaUp?IlzUbubT;EdZgY^Gd~I_8q^P8AZl=(; z0~D0uTfPDxP%iZBUOL?7zN5SC3*eKP=Ym!zJM&Lwx>MLB;~Jbt z#?+OIJ9GA#iEu4ch(B?=)&1n%u7&f15>^*?3v(@)_nK2S_%P<&2Rqc-x*PC)mZUo< zFKlNSu!gc~UAW33ji6p7;UTOp^})R>0F8Du^fHo?-u%p^Je#JZiZ2b6C%n&qNS_tT zNM|PLb*bMLUvE^6c#WeTuV;j%3#5J=s1QCRKXm@O8^sI1l{%FRi%$IM24UfyKf1l& zXti(_N;8q(gd$9dBuSqgBazg*k|=^^YeyYDDHKCRivY)@pS91uOsHcYlC~RRY5Mq7 zpe=x<$;1RQ%R#k(31u&trJc3QcdN6q0b}~oCMqfU1^61&M4U)na4$nQDP6%osN)A{ zbZO`mv2n*~Rtb)2J^0*dYMp+3^5h$*4YO-X%Ofs^EOc{jd6JQ|tU=G?!y>w|AG^3q zvjgnyuVh=n?iIft?aA7ykJVinl6xYK@C5rJvrR9sm%1(XL8ib1JRFaW1M6#jhELZh z!rROSx0~KD+GSVYUc>G;R>gL7UO(8A8s?yFeBgjYy!HmYl&g~N2m%mg*4u7%*F~7J zf0y)quo!jle&S1 zQo7T-{^@qyRBvb=QkSD6EgBMu6T6IB8KB`|n`UR2#<4bVesh24*+5EJWVyJ*j*u5_ zHQk(Xd1oz)OvU2CG03Ybg7~36Q^`i;A{<0z2AYfUB2sz#>|Ha6Q;4o>^C#?|44?k9 z;DPks_q*M(#9tp6fv1Ks*+&_+5P?f9SEvMpm^)oOk)Wij@_Ifoz($*-(Jd zej6d(G$aIwtgShEtz5F;C&Szn`kx|GQI8*-B5FKNODLt%p1Mx-#I_Q2a&+YGR*U-# zo!q+NH3U3yE>Iv#4bhUGA@|^h2WO}*>dV+9`!ZHYfb;=tWrXHo-Wz7m z0*YRj>eO~BRnvpTx8P&2?H!l$PTVA-05Zm%va-~i9L?gHb<)l}yXd2^+J}6$UCW}Z zFgI3=dw}=EU`oDfFHWmpR-_v5r|2}MFnF=nopR`)!NbEW&&Wtmwj{fQZ8`hG4Yqa2 zG_|koyV5K*&`cJ=%a$4qE-XY8C=Jh0{t`xIE|c2xA_zaa_Ii@fB_)#i6^hBRu;)KL zWYhVv*b+pJ_9XNl%kwd~qS@4S44V78$B%J-^}c=$)1fUJHZbvX-NKWdy|(XZ>nXg` z2@8uIC6L#F5O-(Ba9_=QDcfU;Yj$m0=XY(N{kh zqC$F_z)iLa2oo0&P!@~tblfc+WW;86vPt$x8%swDK8xcDVYfQeZ5Q}!7%G_e#1c0X!1ZvHEB0XeY|`it_GRo@}b52%h(?PdeX(eUW+U+u2{MZ?kzZ4bQB1 zP{%ImEXq`0l*P!%@7nqk->?KQUOol09kl6e%mx#>mrayylbbzVU4O(mlM8>6SL|uQcW51`TB^ zHe^C^vO^`yi6D~(PPPH51AA1%5Pj-QX?w<z z8X;yZE%gR0rD2FlAr0dcWCl@kqCk3{=GBHrGh5Hf#Bc$@f6clOe`&S~|J_w{r=GsN z>ihb6lxtpf&zk+&&v#^$PQ7R~SOewE6J*HpWtJ3ZYSe|sCnsNVQIlnyYM(r5UcBmf zSVip>zWHSd{7D;vbI;BzQTSVw&U;?27hRNHi?w-`H?crjIlnmUeY2i9UHujg4AM!pMU<7J zUEKGx18_s8bBTppPGk!n$FjU-MxGf(bul8-S1}CEVQ37{2_p_-Rs!15pqCnP0JD9A z6bkyPBZ~ZC=uzr((5fgWqA*A#y?ml&`y)P&$aP=Iq`!RPm8dtod;KbR)&)HOMmX~D zva=6-`Ev7D2!=;3LhxFmw0OAmTpc)8owajy$^~sxqpv++QwmLFTibH(t=EwYc~s57 zkaZ^#?o7BL`7)XlsQ(}NRIIYe{_LpKHHvRNU+zy{)H`;+>2{byA_l5}XI=wFfXy4= zIq(3z@248Dfp+dl)8XH_Zy#q69=GGNGAxZH#KbN;J+H5y{P82;^POQhQ6S7T)J-o z4#lUfkY0cXV<^huT5f6mU6opdc7+@7_HJPZylX+T-1s{xU6#x%ZU+T+U;#K@sZq`* zi<%wUu*$t7poKzv|fk(|s9gbZDlr-R?p)|M_5Y$$8cEndw?S0sX) z*{0C#tV6e)+eEV?*5<~`In|j87ZZD%{r-go5&jR3|1;-G=!}yeVk03sDlZM%Dn|qa za!%h~?#SA%t~sDymnFG4IF_Mf^3xYWsQRxv_3rykeOe>yzItcU!szJDYW*+HEn6Qy z$ZV3O-`li=E)Dzp$T{|haw5u-g<6ucl17S;r=-)T4*K4E+G-$q?!-aa$Ypa^#?rj3 zo*z+F47LBiIonE^bywx^$d3&-IJhw5&Vw?VNQPxcz`*O>hbBmFFR;(+Opfp{VK z9!^v;tlOX|EPs7~(5HG-&mV_c8B87d9XpgTPzL=PkI{Jg_(6F8u!gG9x$2F5 z-@&~5<{66I@Qo`@3b`n|OXjqjuJ!LM|9Fo>ptIvC%@^lNUFll$Ebzo)-=r3AY&*%byF@X50<4%OGHD&t*B(x z<71tN`q8{)maAZ(OT!t5cBYEuZsjW`!=_>lR_1<52h5G~Ht99Sqpkj4ZwIQ`nn#at z?tKpvmy?r|mF47_O}*j4Q@NDl7NT)tdUrUo#(vQ3*;K*6+IY_L?opR}$H$Vkm4VX> zE=k?xWspIprKRaEK3di3$hvPCV~{B>TTaJ)_*R^9m{{TgbE_kTJbuD@xo`VxQXXy% z&7~>jM?o&cXsYmFVsIm*Ro=@w};EL^_SHqWLC#p6~kQi;bb{;CL zorge105b~yPHz5;fTb|3gHV%I3(L#{v87=!IgR4tn{$50lqW6Ii!y0F!qvYjK?o4qU^4n0y?r z-ZG4x&QF~(PjjwbeceNNXp-#B*m0;H9Q*}*uoIuVF$gIZ(e~&HL{j0hj2)?d1D z;C?3#(K`NsG>by}ULO?N#W|1OzC8^g^GL9~Kco|PtR?<H`~?$e1=nDksqm&X1ealJh9Qf|sXQNF`WWIWHy zJE>R-$0~15UJmf;i_Q;UdZVIaUMCL0IL{bN-rQO0P+y;Pz{06yUB{DLhi>c@h_WZ+ zXLzqf`7D*CJ*5?=r{t@L@&j$eZ~{>ZS3Y)H3%`%e zw<-F&)b!ZyyE3|;EBn&s0La~m*Df-B)cw-rQBYAr6wdex?j*&D$`>k z>8k{K<3?V_Qu6{iHx~*|#U7Y65PRcw^JQT`RvGt|{bggYyN2)*QLv3m7H2B^4BcDA#kxJ6FEhtjKa3=2V5OJAdw623`}aE37L#AHJgrNpF%3 zF>hj~TT8@kQt4P|exBrg<4UI=@d9%ag=-iN>rh%<%fVr+m7PR-rs?kPuBR9IP_dbr z&Jq74nR)3Wb#)|KX15qu@>POmR_eGGjj1g;6twq4V^DbA+pYx57ds)3f5ekp;tbhb z?NP&pZ;$$ij@T52ZJ0W2X?~C5w}sj)8?P;V@flX{mFh}-O&AEm2Yws(=W04vzl@~j z&v?k=lC*5^(hw@WuLdju?N>^APAZ2&jDV`n9za$n@-6%y@t#-iX-HW4;|vl1TU61E zLM53`AHEllo?zQ*SO~@Rsc^S;wy{u7EGm9KVeDHqy9u zq06Q#3awkW{O|{UG8rS?5QR38NqZi}5;aI(iVr6NGtw$CH_0+>7UR>h z#dFeairCqj=OTI!pTuVNQ=|T*Ot$N%uyRdG$W9sAt=oq?HBn-t%lSd_ChE)I89q-w z{j40pqF5$O#~h9)FeN2wqUS$*uW(eGqw?bYQJ?-Dbzn8U8)?2)-PY38e<6e$5aw;6+<>$A zLnUD!#ULc^%!LAb&JgA83W25K3}t%Gt5kOVRYbP=UY=V%I9bz~!XBNnw_Ib~VQk}V z)Ge>Stl#ST@mO%ghq7bDyHxUqoo7>I^|=)+px5tkDIN*?`I|^ zZn&^Pjgtb{y(p5iC!3$Av)0cSK5_tqVXgGt>3L)0&HVh9FSkpWIvs_TyI0Wt&M5Y% z(|_bCxS7D$ow#dmf}LLXI=7!4%02dG`jm_LGo4_|bF#Ab4GvzDbVo@67xV~(3)b?r3GWfhvL@99wi;yY8Tz{0uZNbufhkWsquyR0|c$lM=VcSBUY{{m8n+9uouo!1+ zh6V=ExIKaqS0U1fGslsXmaaRc+rW+l#=w?8bXyJuI2sB+n14SA$zEHYMOho9zM3pW zAk-X@0+N>sO5$gF@hQsJXNNFbS*0}jx_!GoAn&H*wuND4t)j@Gy2C5_!~hnoDb@{4$$PiWa=BqwP>x)jh5I^~M#>6kP%ZcNE`kfTE)-6+v!ziu zL_lnf%Z;Q0o-`t*1=9@UZqwEciV2h!i)ejtu4zvSE00T&onKOo(*|hg)4IC4(Z)xx z(!n%Gh}rOpM@BZr?kUbzGUGRX+(+~qJZd65{IGR;l81+fp|=GDmG~n$MFgtVKR`LF zRf!hnbB%cqMT{dY%n_Axt8U#jF_Q1p!(bl_Hfv7Ydb|;cB|PG+&CNeJuZ$i(;*4KC zBjLewTFyC@o|CV0C{W|cI%d>}dZZ;A|E`P>uijDz4kue z)Zj?2m8H3#J7TBK6TgqId?Mf2xR+Z}^z~mtVYE(22>tuXoslER&5?&XZRL)%FnK6I zCi9`}`05&bp%8n#G{N@#kJcSpZ0neMy4r=5m(kGD;^^zB5G@QV*B5c8+^T$=GqDb5 z*?p6E_km?gcBE@wc?K!yGY5d>I8zQju2+B5+A6b?chkjS@r`UUK-(KO>#kleM!fGA zCI=2wQD??6%K&rCAfGizSNIMpVwzK+q?Xrzw-1Rwx4y>m{fLw9_0G#a-!hHVK7^H9 z9$Uqq93hcoSyTm&ZOCFx3(ckdfBLY8=L9@!ZS{VBX(Oti%YLrwm(jW7YO>4Acu`?A z96qK9k`81x5C}Z^7f{#t_0j?Jiw7oca(teK7TMY9o$-YN6haW3{eX>$K1uY*TIij&RSa&z2xEx@|^5Jg4&pr9t z?fU|rg|F%3^^VZKrmd$JuYHZ}EVu?{y$wfCVi7^Nhc@P${G4bJ85#C!r`Eb)zHzLQ zv$u~w?Ou)7A-$#Y2f+zJ&ITfTS|d!e{(w6s47OPwJACaMvJzZT?|Nq@i`zDHf+$jqqlOwI5x*pnMVQ9$8{`e=lKc`GrZ(NG^Yj}xS%Mw|jBkPU!WpI8t(z@dS zgce}qKq5mGIjHjk?^h^vRKQjoZ$h3y+>%&d1`rcXGld+C5!i)#1cEb!N;6qa z%fUX2BD86B%PK+Kqki+&&RQ#zXDGI}r+KeDe`1TBTS3&1c{jVFY}E~Wy5!;gy-$<_ zF6VG5Q#hCt@NsZ(6&o8Ysf&!o;E-3xE=-(NtnCMI^HW06zB5EV7ELLAivAP2&md`9-JW!y3zj{8;&b9DaPXEY)J|h@V(S9LE~UYWLqH#4$ty2UmL-#@7&_4JW z2(FirG1`!(dBwN?>;}TTE8Tz80R09Tbq2DO-h=V7$OGm;tB<$Nu-bV!u~RuS-kd*R zUXZ_OtKPGRH}Z}1(RIl)7K_~jHs`U&x{L655l~cA#O)O4*GiE8A|TLEyaR>$S$_lm zU%eC{YK9VxddI}n6lC$aWT%Y2sV6&*PJvI6ACV>SKL_`JUA6>5-1&BIi@W{i&v4<{OKcyI$-TU&K?b!+Q1QRB${iq1T#jGZfR znh()vJYM&^ebl!wiA);xgeSa&k01A+>Tm*hGyiAlrtzhRQ4X`R6XW;{)5OlgUyl$`?A1SNG|+)>sB?E*#;& z>=)}iW0;Sp=DDJw5q;sprDqP%!6{^`pIk~X9Ac=_*qinaO_B%jpX2Q>orjuauQ+?s zGRO%Da8m3!+o>YamYY4CP)%&KUbHkX5PwICYkJg_58=%=@TTUsZJo~mssxYnjU4A7 zG0Ij-9h_0=+Uyj*gFz1^*@tfecT5o)%a^7W!>^qA-ma%FSxF@8uFu;qwX(Rm=_|Va z`X=SM-76eIe~zEu7FpE$#XYf6#n3QTH9G>f%z(qVWYYO0C2vA@uZauAKgaIv5VlLz zLx5T1s_VdmoA2_h-ApBNb74w8%n~lo7@C>Y{gF$Ma|j{`Z==P%ZN9JAeEry|RNcP2 z+k7u=SxkN2nX1q@7?TU5^)1Ppw`}o(-1k=)9UJ5QJB;3$y?;yex@woYp~!ldT?ooE zg;M)A<5N(t8^h}rWYH_pyFS9oErlO6$*r+LrUg5pi3jr&NaWkMZ_(s&IVj}~B3PC( zJ%f*sz*A z0JgfA;)Twv?`%CuadVm8yCte86L7v;XfGQGBSM~Eq_J2V2JS*&56$ZY*uZDDDPfPe z3DK8Z>RI*JNADc!@Baof%9Pdh*1=S1(Iy(&4APtZUG>)HR{0-V%8C;j*_Q@|Qrz9^ z;Yf^DQA9)%1}P9LGm2-s1oYAf^zhEAs?s~9^6KcdEK1JIyZjG`3F>BB)^`h`ggzfp z$m8r{EiB8jA^NH6rozH^AB?`xM zGEbLJW?4R(e_cHDuH$afpD~b#O21;@Sz|FhJw20xwxZNmhF^lI@~(%v2$D^w`v~v! z!)!_=*9kzXq2$qOAE;UG8>4ksFJh}h*<^NT(?s>m0GAsxukIV}(qhwWw(+h1S>Ww=J%zcFV90oCUBEX#Sjg=qi{~6jpK(6|vp}nFUFmYzpRoKJ8ASd7n6P?G8)mP9#H2rD%rXTxjk9`+xHU>PN ztg)>4*}Q1v^F@1^(s9+=XRlOQ;I0$CdunNZGhW;Zf){3XFSQ zs@kgiWLhO@Y?ZQIDE85h_2b;RokM8&844HU9PWtiKs2XvNNTC>W~ZX;Ekl$UPb+`Y zHgZZa;;lV&h@$b&QQO1t(A$^-#w3)_TapXG5dQpZ$3D90xU1_-*c(+111dNE0Hs`+ zmM%)2#wLzKZ(BCy^2Swc6nX~BT*~suAE-~}hhN#U=T8kww)1rXec3mjq40fY-6IP$ zag4>l&LMKm(m=b`Ey5IxQ z)EvU6q&;8O&=OXTV@mcE2ag{7E3WPpMfw^X60-d6ntQD;UbsQ~g&)bhKKYG>e}(J}@bPx}Fk zZu3CC@=%yuobllP-OHJSqf0+qx9_`~`T_?L(b(cxnT#sy+ws(w(Q+B3?GHKIw{q(p zIFO+$LIgiW-x8Ib_9u`d0CED}3PHKWqL%9l@kd`S?`2jaw+xI73`zn7oX@L`_e|uKrx3Rvab5`cjuhP3@c6!~tn+*HKdIt8e zxFJP`uM(~xBy`-JiBB5deOos`; zc+f?z6O#}i-1Q&p+&1K8YT6#bx(;+^eZyBcfKVuW9v-fZHbC2(>?nB8nZJ|Zt3HPK}+-3{B88@)`JN>I#C*EPyuWB6(SY&@a#;TC)cJS;RL}!9o5Tx}iQCB!jLfd3n^qK31Wg?vR zk9B);kyfwstnPbRl+QBPGQ2tAwv3(gC!Ng9wH4b>x5vlLuP9yR@Xz>eZ}BGFFwn*j&M4 zOmTf+)xr2JCwT3yQ%Pj6*-4jl6=;b=W8guym!ljm3uu=f`R*a#B+L6sZV9a{ZIP+> zZK}ZSeaT){CpQmI0O+jN;hP5(1-gc=X!2PdyYZK|Tx2A;z8t$?Q`nr(i79#9+#d%9 z9$_Pn!GRp<2R6`k?m2sryRyG4`W!45-HC@L(#Sc+50rzBilOPt*UEV!#G<79Wj4)+ z*2JwkzEL=a96E$qji8;4$TTWGG7%#r??O@6nYX&~JU5Z=7_7U<60oO&wQBe|la+sf zAE0pIZ&M;`>sxfdZ|vPry}=dEJ;?DzgoTMbJv7wkZc20 z*(tVvkUbpFM?VCN2K<-x+c5Cbm3N!5hH;#noCT}L3+15oHM(DgQ$(=xm7FT;_;jnh zO5@65pO>9@O}CNy`aN&>*_#dgR7*7%DJrtz&ct0-N9>RJ9J~oUhG}3>AFY9N`I6`9 zF6qZXB&B_Ai-JO@u1V^y(06aew;=Aq@1wB7e3EEVfG2P}Kd#{8(qnvg%0vcIOC`nQc8EuPA#;8y5xZre*}56Q+ooe^-{} zWOHu1zIx}CA4@up`akY8Iy_m>V(E0Ke*Y$Rzr%9FRp6%D%(`nfy0)EYXf(WH(p%}b zz%-LPayz2`mHV0~9Z)Mk00|!o`;)bke!jk#nY|r%k!K7Ic;f+i`vYC5-#aqo z9pA@extmpz4s+oy?%58X*yqeseTp@G9UbFsigogvi-w!sxXUs??cl%9ms7tOeqiT- zr=G7(TQrivHac!?oC&|>=*J_>^QrC zPH^kV1mogC9C7_0%fdB#!nB<`bDEt|zX2lwiv~Km$Ti%pU(ifIMFES*OPAI=ES3$0 zobeM!^-2x1yNp_;fYcTi{h zZv?B7Y&&_Ohs(k0+-p!VUU1x4`@ur>4Av<7#h^7Cy6moTAjCASXh9N z`4lcQ@3}N?;>$!4~6|)to{}LrPb_b z;i)4TyXWdYj0elNq-=jtuA(6o7LRpjO80n76<>kfQX?k%_d;|(#1OCj9fm^0Ecc?y z-f2pc?0~!H6KgtL@mZLXY_CaX`TS|O+Z2Z{`37HDz{LBh)+kzZXQsn1O}xD5pRk6s zwqv2RT@AxobvA_Agak&D(jOZ%woa&ZsT+x{cO`Ik-!v(0UEIr5VLPn*+1IYE|6N2X zcq*6YB;2PAeBPuosna;!Wn$B|w~t0~rkx6O=@0mV_{`|2{wI`QYdcr#&-?D;JE>@_ zucUqbDnttcp(>g{zPFj=8PhW^1Bt8eHv+{gkd>c(xk4e*e`HOmFrI)68REDO@2J^j%)en{OW%56NkSOy=lO3 zW;!c@JKyjqJmQ%X&KJFjXwK?tYo9xN7Ul#X9By@V)>Zl|AUEzk@PR(a6o*4O+uFnI zVtB24H-%JMqB3nidEBuF#gf)CUW|;eD0hudR@uzWhz*dqhpF^71!PL0`yZ;oZTM!t zzvy)-P6E{~s$t-^63s4XR4!>BI(oD$IUlb7lW2=4>!K18Qs&t6Od5sfT7p%9_GqL^ zQ1~OjZ{r8F=i8__FJL_R^~a6%ILkH4+ZZA{!}IUfAjQRAmYNGj``sP%-LN@eeS-EG;(P*G47sNJ$p z3>LS4;2pAd&XdCb!aK^hD%}X7sl%_XrPq-2BjV#dx};2^N%lFJ`}}p&f}3c=!Rlq< z=gh~CuJ(@#znr03G{)qT>Tk?yEwOsP-So3gX2TC^BxuEoJ9Sc*!((}NqEU$u0uVEI zK({?A2l+Mtho?`ULNZl;-4&!7jQ;=(3gIo4`SDbqeM)#4Vh?dumUQ z0G?Q7^V$?bP6O&qosU9vspihA94(m^N|FYxY2@b^u@G=<#UVTdFC45JOk<(Om&OR9yc zjg;|_zHnJ$Sq&-CMKJ=Rb6)jiVlM~k<;-AIeQc_5#klJ;-XF=c9WZJ%_qKE7Z*UfD zZ)-b}0ZTdWtF?68-P9wXY>&RZaKB&ygc?w;C02d8V-jzjTl;$Wf=S4ah5r77-aW^Q zJPw1)WSo=9We2Gg~9!MZpCgbRRg_;u^#p+sXKP z^FN`IuzU*>zHWEoFi*9uT~9@nE#-Bqci4o#=+Q!tAd$S!+PYBb;=OxwFiD%7EBX{f zE$0@v;xtK(L;-@_)h5StP`Qy!!Pacv^!1Y#9yd2PfWuzi-W}XT9|>H&LQHK#@lBL4 zO0yrXpfzmiaIkh+ErL2;VrIIcis$%~ND+LjrjT;suG{Xab~;S|*dnWs*d` z{qw|FCoxOOvpVQ@&&f@qq7ejyof9kT$}`nT>0lSI z4G3@N&NUV z`z~2dukL8(3|)erKqtPe#TETDE4OETyZR9MJ1)zj&jEF$-SNd-9wu3{$)qdN5FQzAHCV~$UHKVXDBu4<%05% znR-DRA6{(jg*50#vSOe_>f6#7Q zM1a*C&T>SSZ~uzb;2}bTee1hx_n{j_UmTt)-`L*n-5Z424h22_N4i0##l8m*TbP;m z5xd{8Nrv4%M~^NafpzL9n*-2!LJQdPrjyS5v96cY$RWvy^3Un^3Sx%_UCxWtIwx5c zIqnjpa|eslIhAHK_>v{C$#&PH6^2RpG&O}RB_#xFi2J1DTVm{~>K=`-G5_VlWQxwy z1NYT?g2rs^#`SgB6+9Nk8W5Wko_3W=mfyI)HQO5v{;KM)JynzPXXRP*Zl8E>no$LT zTfwRyJ)`(46;&x8_W1Ryb=A*y@iU$!h&77ksyU8CFEorfL|ub`qVH&HYbzZ6;0a&y z9w*lnWr0q|Pi~QmQ5zDpJ8{TYD@=6b45+v;v%$NXsJ@2YPPBbzJP`K!v9fuN~Uxeux}ntj-TPi1@O z*n+8V3pSO!YWQ$kr9E>E6|fvyLG@JvI0dPqabeycQj?^Ym(IIAo~*9>AZ4RhR;;bK z0(@N(SN0gflHwqD*3F?$q{X+EFdaKG;m(NObi`=-c zFzv^qetwU1)-l{w(Lne;2I4l~v7EnO7wL^4)y)J z)_V{@rT}Nu4y4%N#YSY?gP1O^e|)6n8ZqM@)*tAa1FUvAQb~p#Nb{Rfw{r?z$CBO@ zJc>QAuDw5(j=lnKc_3lK<&Jdx)MsI3j1&e7?FD-?fxOlFt%8XcmJq>{#;PUsynZSC zDARIeoF~?XWt^+-z4@_R-jtR-! z6hRP@45)tz1|!kUZX(#Jm5Bnoc4d&gz-BY8$AE%)&|p{cDwF}$y(}83DT8_lBO=lL zPl^y>pj;7kg|A0#eZwjC(uUN}x(^-;lcj!(hW@)O|JjQ404Xh$3>Ttv$#@nG(hPb4 z$$s$sWELc5Ft%RlB}Y(+>AbVO7t^-7?8ER0|Cb+VX^&vloGm!;l&XQ6latjhu!2aU zO(Y%M2oEt92T{9F7ungaa zy#<+}w0$jzX+Rhk`Zaj&m+A4doKy}}!v6+CC8ShWR+kRkfm z4EC=`3lH2o-q7+4$BP=N*&^fQV7wVryLzE)5g7M*t<4oJmNi&VY-}a4SD!7&5ZO{E zOeVA7Ud_eA6dTZdlws!xKO2T9xH(=mV+cDfx$${PEbJja7e0d4sH4LdHGE-}QVMK% zO3zlnYZlHqAuj{rGm}WZT*^P6AZ~S1mKXRYl3+!lB!WE5v|=s!uWksLi|YiU=n6VP z1`;Xc!9%5$cJG5XD+lt>p|0;{P~{+#83A~&SgUY!&+0orW1j>sVG+?y${N_{n87Af z*Ws8HMICv=?d@vWh4FAB{r#6q4dzkh4t)Al*ov7_X3a-WP4}I_08KY?y`i}|IQwfJ zUJX%K4y32^x>Jc>bBHpDmaax12HgvcXS!e=vjl2{tel)7BqYDo2;^l!_*%iibPun# z621$-->CY9XrUDOF{a-`cb{2Mp;!FW$hAZ;#IDK2ofb=z)M~N7Ap10s_R|GB1q6;0 z-H1CFF#?O4dT8j7e-<*|#)L7|r|1nQ2>`@^p}il5 zq9^msGnVOPGUMZ0;o~3n6-xPw=DYp@(iEQCimZAheEd@;eZRdThKH?WR1O{#5_AAx zOP4$=?g?U)ZnQr=1p5p-G4T8MKWg|7-#Y!K$=br?yF2(Xedj2+n~3>_L( z1VU+O?Z_X{k^>eS7RypXL%V{ch-@4$X5g2+!j^=8Hvu6ur>+7$2Az##<)={D?9IZ; zg_(;eNM5TQzrm_u>y)By045kBT)+wL$D@@>NfY*WkaJ<16e&x=>wgDU(ceu++jkFw zU|sS15>lkimSxVE*iiFyi3Qv?MA&7bb8x&E6|$kIi+xFeNu+|-g(MnAEd`E{X=wlPM+%|ek!I=LfBYN#du2HW>=Ou4va+(^(=Hbn z!%PaKDO{;-MnfY&qouB5jQ{!HKW`EPi_03SHcRdJ@8A9Y|4BHv^a3?hv;}DB{_*E4 zBp_q7EM@=a%7J(&y3I@X(f#vIX@Z#Wf2=gmTJq1|p`oKguw%D1jA8rtwH1ML`#qo& z|Hl*K1&|4pfaZMgrGH=h9WAYM7d@wQ&>xRRJVqc5&NK#dj;jp+zV=E4alT?@mOtM3 zueZ;DFCy~bvVicvul=`R{U7fFuSP%_TbGt|$;N+Q`vF+{RHn^M|9&06n6}KtqI;PC zeQiF#O*?IaIRE`R{{K($&lUCm>8A)3C>w(c0bn<}*Pw5SZ*c{Uw`s@c-s+nH_LzYQ z4@(g17KA7N+-JWQqdDn~MOWO#i;LfH29$gBW^CmpI!M5;nNLBs=FUC$t`P@NiAP?3 zJ|@HzUcAV@vp&%)!RJKjzO8vu$25Qq79otlRE7hE<+FmD858*XP8 zSg)3gOG$aMjLIGR$l>=By-FZSRSUDDP>VrHh1)-YT!PW;{hJfn%m2Ma=+@ghQP2iH z?CfmoJ%jj85+nwaoha!lqf$Cb!rneR+)9te?#rX#UcNo5>$o1)nE(6{fvvbl+0$#0 znu>%%Y^%G-_O|sh^)#4np)rs)#h=C4qBeBc1Lj9J)N`_prV_ zgA0WR@%-jZ_>$U#O;4C8^C^Nrsk+C-W#hexJHr`Jg7e>FqWpXNl9$lhxmZD9fg{ew zr*BERhkl7+OXt*Mc7sZ=r=yh?V#Zj(_yXk!IKO zPcPwlSFTqFWDI=K>RQ@=J}luNVvd1(;DbJ!Vx8!sYoP*ASs3#Oz`PX9PLm#|L1z_H z9qbsvZ-wLF+qSlH@JK(OLaMRj*vH4qvUmV>2!?)m^9~tLO-j@T_#DKW9Y_{Qf-|r! zK(AmernAIJ2&+@*;W-@sKSd(5>!@}VyMMrq(jd+ z9$u9hgP7P4W1WvGKB+g#cE;e>?+`op+_K+&$NI42$NFOUu(7KWM{3K?#o5=@Btdjx z>uJtiK7f1y=X8nR(M}}z*46&^^>cX*u)YW`SRI4ZHj<~lvP7c2n%T=dp)6iz2S>;L zu`S2nN9W0J*lS}GF!{moDW(54hV%aN)-(B zcy+E$&iC7TK?mqDC-0*S69|Q0V5u6W5bQ)c^NBAV{o_9rg+f`U5#&F;;4k&o$7xFR z*mfYzN)*0+^X3ms6FYLG119vN{Vj8IAaK8)90L*^8Uu$S>1HTcNrDid?m~4zxCyAN zBzdA5tra&=FU4=9zSRk2_`CRG4nk&CDh2=tt;RbQ6&U{X$h-+0j8m{KbuCZfi%Cy! z;KOLtSu82J9Xn)tjnPs+a_ktd^g)KwP0wIcz$}>adOn-tp8t#SgR~J;W}F-Tf8r-%83rGWC#T=Mp{*nJy+W3iyx`UR@`0ARK)pJ#+eA-j^1{jiKKA2%#v%SKPZ zEw4?9g&RK6!&PJT8(eeDw|K4`LfIU0zSF@R_{#9|k}}1A3r&~%3*ay0=$QtE2q@fV zA}Vt^RZffPx8TE-c&>1i*i9r{e{qn4`b|N~FgHiH$;)S!GI;0-Dk)6^&QwU1LwDNp za`X2F9b*gUBIX&FjGZeq6Xs=-Dhb&OE@Sh4@Iy{bas@B6TKKF zy4d(qMF^XjEh%Uwixvny!!6|`xG&w#&Xy^hs_)F522{$($aF@1fX%)zm#g22Z*vqA z-4iU}f0JF6o-lvCPIP92EmfDxmP@zJY$viO-wqn0RM?iB>HB~Adz^GnT3SkWta?F5 z|AJf)Nkc;(D#dm zkWDM%ivND$171+OYa}s=4to%~)6qp@5lGgYeN=;b57(*a*z14H0o|UQLE{>TyEn4X zGnE?TbcwBBFEAiqH}n2ZcJ?E;)E~UjT0odI&#($U6>;=B`&R$rEfpZH;`q)f#n%kBX{L`Lf*?0A;Y>pl|BCzYkakT!zjR~8lLd)`x zK|i|8h=v6Fw^+aBeNIEeG_^(mLH;Qq>vQ#1*QgErdKdXYP{kOPS(blDB&UhIzr#gM zO^rl>?J62|Kf@nk|0*2+YOB@=6zao@CUs1}vW0MZ7I&@eZ=_ndH;#F2LyoIS z@(1&A*TUS9lf@=EUB7332#2!qN~r8=_P653t0NVeFckDnM}r zywoCnmA_q~)Al;JwdR5FB9Kyr!;TaIwrP-hG+`+tRun=RyhI{d41h^EqwW+pXi=E-`++|_;f#qcw0)Pq4*)C^3T;VM zG+f}+G#)F{g9*|cP_vDRD8Ot)xP*%b+0)?qjqnWJ~N2~>gSoZ+4gF*CV(sg zoJQPUPC&zeArR{@aMOVS)bbR(Ue1Bp6$AhT^zuVEc~|l9V4ZJ6J8qc!zrCRRvdnAU zZw2K%Q;g!kSv4QvBtY#9u56Wo-3N%?+c@szl;{+Bu(j+4``b-vV)iplJjgPXckJqQ@g{KH^qI zw1W3m1cHfXaEgj$adDg@4fqyd*B%DmMcDo!2Auuz>HYBVcg%>~QtOjHy3pBt;u;*h z(^b#B1Q!yaFA9WqQhxGv?xNfy>rKom;Ue55K&iu ztziXRT#|wMuzz46mzwp72~7y_t4_|s#w$LLifLINN_3LeS6OsZmqU1VpKx~$jYa#S zb87=!2nurLPir6{fj>SbUb@s!b=FlKrJ#x}0Ag)5jmWmxy@j^vqXhUAW2CubX(U|Q z3@%m%eBPiax9}5WqNuz=0g%dCqEuE$WXqt>D0ou8gHAeg%;dOc(hgRiN+S<}hpAy* z=DCJ448kV2CJxF7a*?(A~|=I$$&tnN#tqnIso( zO^AT2u|*(bv)hKYucLSUp7m>yEHIptKX4$U!3QQjqjFD9SJn4tdKY#~k}|S^w_n&f z)eF9X;Vm;5JYg{_zC3fogrey4a1IC3vwj-7d8(1Vt?5C58wF$9%6|B-*5y_o zgj2s|nI|^aZ{?Bmy|AZBW%@~V5%{UUD6WAl`2A_Q4uX+T6?!~)gux?&x=e2VvXm{& z^;MN$;dC+ot_-t61dVJqo*zq12GH1&nS$)VBVso?KaRn&;HDvL$FRxg(cx0g?1um_ zSR%7{pbWiC)G=v2=gpPhP0)Z9;CtVh9|Pc-Z<=*Jjv0hiw#01D$?EwT2}?2H$X%$W z0!o#;-hJ1`kkr)H<`mEy4H_lp@6(Bu@oQDw2cW)an7_DI>VS_=P;U0stv(^-NmNIR zmU{M=oF^Zio;(zB1DB#Y=^ont1*(A51B6|kABu-oORq|T4OLwI>pn^vrY@;%)|(O8 zi-hvN_^__OA)oPoo0W7b@(tOk%|jmhOx*@P50o)euvpiw`G!Ri8XF!?a*9CItwx&F z3vLlzBum1urf@qV+Er!B7l1o*sU@vztHeWny5k#LpopfiTj>lS%3tr57nC4&xf--~ z4Jv)`F_H5C9JuY1HnJwsP+aF{)_%hsiH%>}ay;UO@AwNHQpYs&YB|El2I(4(UCzmEF=F8riN+?pT=ohKIs{BVo7@gcJ@Jzen9rLc~~nRl0M#3LprCVYH-txH@u z0v`%^Rj86Spxab-HlMWZL-baA5)*_o*VJVoVx>f{>Z$o@XSK$s$_p*yHwW4kPKsGg z5%w78%>``CT_8E3&&#{X>7oEV(;am1ClkS;}Y)N|uF3|9$7FvA*wqV$OT30m#Jl1z8Vez z@V%<9KZKj=JMZr_5zM6l$#`R;J~^!clB=ck^awcgNUjK1k!`94)nDwUp-xu(xbpzI z>1Y{02fKlpf>hwTO~~VU3F>(wQNs%E{jE>X`7jzxaPn3kq3x%zvLs3j-aigJeD4am zh?;tu{V-Un{V&R{Q(wqwYLH!!o^@YY)}{ffjo1w55M2saK{Ogj7r!fBXL3?BS4szb z9-hY!tR&p+BIho><>$W`8>>QMUcOx6=!EJkF2fygHfNapvNtCNKao}=O|hrDd+m1LsPUVAo8aL#CWHKT+pA++ zZc|ONpF@{Adh1%2;uVg7h+U~WmtzV{70 zrP0=nGdQ}E1z@s|=<0R`6<=@6h6+s^hnl^E!{~zpdDQQpk&1`L!u&yIyAHb17ga0i zC^J@;I%sKy0kbM@e|)ob3p$tusx{&UPhRVrfgbJ%Au$ooUwRA|R(rx3`n&c_AhGNZ zc|uJXN?t=1Kr8RrWyg_eV)xsADXw|3oa$io^%)p=AuCl?g9#Qu$muL$WNu1oD<{|_ z>1&=VYkZ#%hQ;GJlfgb)cJ13?W+RiNtX>7j|U zzM&ye&Rn))tv*RdZ}wAbG89J~J4CX3KKc2>5+B~Y0a{`Mbs`L7q4oj_L&ahk zOBDg38D?o(QM^8j)WeUcR~8aS@Be*OB%pKlOIBAxiEIEoYt^FKd3^EpWQ>%*lRHn6`m>&r3_IJFf1CTKXA zd+@=fz$=?!JAiW+EorsZ|5g76N0hg+Sy~_TQuwk3k<=OyWcIC+F7o4Z6R4F&!4r#H zF!c8LYQl|F;%;(k*zv!B3=V3bhY z33ly^%0NY%0p76bA3ZjGOrcl;PhXvyZS{Ud!(K)N6XhTa3z_C--Hg7|G`@Nv3(*n- z*@O=y27U@WFBsVFyn`E!SWgROTnlOaFIzPJfI%@I(jGoO*I$xCvqxV+;S&U+6hcSh zz&!bgsrnpD*ju*m-m@pB!|xS98p5P^Q)yuu%x8)Jd-4k@C;_y&bz8j!VaA_l`fdL? zYJ6&H>gCIiy`Elzxz}^IA4JrM4xwT9(COFG_U`;An+5x_#3zl7y+HOb*S6}k9KYqK z%EqjE)4G5Cu$soX14245EVLAudrz^T24WuiR%rwIzKe5yTUyM6ixLx z$k;s)W8GI`{`S81ppen$`$l;)HqZ7RlJAkcveI)YT?!tIOEZ)GMHJ}_=)*sRh#`kd zDYAQN4#aE*g(~v)YbH0S&Yok;M%%xYiCf(CocK|=`+IRK(49XIo;N9Y3cJe9kc4<=8}#Lq+Wsv6ILLTAcaACsPZ}d^FlO9`v!HS;f^;I z(U;83Ap@=?9BBq8COYb(wKjL8!^BvV?&3yus)KvTjee@mq_GW)t^`TquKc8?e#SR7 zQBphXgtZJek%Zfk=!j?45CUeHx=$n-6=GZfgUAWTB(@_TmG+->tnGRI z^)Vz3h-ZghTJ{6Sgmfl+uqc*l3KNXaGEY~c3s23Lx&r+(v@TbPrO)?7yQZd}+V4?D zZ90`(zrTAWe;Y|&P=&BdqVlOOk~iGNR9@`)=LI}n_g%Hs0RWngz#kXgFA4Kbgiuq6 zKfyXgiu3kmzw6d#NM#=!9VHG<5J^XJ?pE0==ECxwr>6++Wn@{XHux$W@Y_~PGZ^{N z=Q^pB`3&PLDpzkxN9U5#PUqd@uZ}rQUcAD7Ig%@{k}K0V_%_37F~Eu`8lg;+(1ygD zRgtOj47nf>T;*|>UAtw;=@Bkqf;hj?v;{WoV0EJ0uNaWsr2EW~HAg|)&~Vk5*aVOT zE;X9xV1I8pNJ?*%1uXXNl>=~v6Vub3(R2WQwE~|Wx$G3}_r14OM&)yz%@NjpWxsaV zJ)}8SC(0a*+Lmf}D82s>wdUbLXR*icbDwUCx!cpln-WerXi_K;r?NZugFVYX8_f?&qk#GToPD`@*KO0Mi5Umrco8Roo>~eP3!nEDx)3Dsj4a zpV8gt@nQAJCr^hm6QWPX8hKH%_T9O(78C$H!&jWmnM&W?t`KI2TLSh}H4D2UOV@|Y zs|E|(1`^5z1RCVAcdhjq;?!Bp6ElSXGs;Kh!Q8hC(ajvH;&|+qiWmzaH0pa5=*b|n zdHZ$8(&)5Y>$`eSbx0RhWM^-dlllEDrQ-Qq`^nKGifevaA8xF@UCd{?Y3K00(ej^F z-|y-84|rLwrhQX5&3jn{+^l%+_1lV-v8;a|2_}h%+KN(h^77Ct6I%vHVtMEy3XX(R zN~+b#Aq!SFnVBHbj{XS92-=pIL3MkQxAku>0F1hTj(x=W3dL(jHos{@T^+)TZ?Cr2 zxCu~h;u1#u=kW$na@bGkVl}`0gcH**xE^sE9dUGYtZQh9Sh0Sgq4c}Ngv|Tumx()0 z)?PffD%+BuCAA~v(7Aq(t&?B#hez>mRmbIZ=E7Z==|?!XV)?-A;GW<0og^ayuUFc@ zywG=3L7CLzL5~20b;SzBSp^?OL<#TU3H*8q-2f-t3U>I7UukWqz-@@8tLK%u2>&Hi zI@$9y^rO?N2O3rsR#m-3SMR2#4d|6-<8|Xoe0(Pm0%V-uRtW)r0IdwZRBh7wprasl z87OssKRyoE&qJzauv7y~^|*k_Q}C|{jYTe%e08JW58S9w7`fnAK)N*RGk>$ldI#mL zw2+CdR@`!cf$MJm<~Nd?w&s_qbm?DVdi>*!wNX>0xMsW39@TU>gwPrq)2*|x<7Ew2 z*LcD!El)=F_GOUuQxooWe)<7&rC2C1RV~MAWE%kAs3<5wn2=d> z4^JgP8uKCw$3#kZ)zZ z>MK8jn7>RWn0XnW`*e4AgV<43 z&!}1UJ}2e8?1R>a<45G?15`8T@19`Z_BdM@;iS^xsg+88E~!GD9~LWJh1^c!%=4DWV4`f?euJy&3eZs^HQC77AxA2K>zdM$CVZ-Z%C zqORunYQMo_Jvd5xSLq!-$t)x3c-z$L=dG#}xc}}aw zc%T3C0>Sy(JZZWbTrkb@hWjIuo_cXlpQ-2RCkZS(!+-fJ(m4m%cpdbpYf7T~p9@Mq z!KX=r7=0UOeTITOsl^_%5!ulZC|uGSbC1JAuE6|lgPA^$f6REA z2M$pELi=JKz`j)~~oO05+VQ7UQu=JjQsx`6#UwRJn+= zHO(JqOseW9%m(x?_q7h$7ljl@zWr2^$i2s4f}%RWea(J%s$fZLhiv|@X*J@8Az~V*Wi`coz;(&_uB94mI+%TFvm!Rh@ z!XAPaC3uza1zvmsA#8Nb%`J)|@OEW3@kjSwYqwJ$a7m}e1a4Luwma~$JV$SZ|D=sk zw)6LWd-j}CMN{v~avC0lW=LeMRRUonICnTKJe9B!jEH5st3KeEwB?&x_voj4tM++r z8?Q8f+w7k*S~Gc@cBOvsPP44nzLF6fY!kNWw+WW0s3XUb*MI#?#?NO(;*^18UkejX zxJPC3y_Q<2U}qcL-&9iJW7cPuS}?%2?>Wy_dWq~25;Z;vK{zURr zd1&NJZ@!b+bL=E@S*wb-m6vCBUXz-))wMsdUUg+_aK7%^;?n)l|5{#b*s4INlsR13 z90!h}g_d0mj|yNIMVgJyw&B?D}v!|YTpbXj?U%{{z$W1)(SpXo6U z?pTdC+^7f(ZS}gc@V>c?+< z$J9(b!Vi0HNVT2y@;Pu&sx&m6`aFy2v;`{7PJD_lGzk)PX|}2@53Wy(sF;@m*Qwt} z8jOYCE}o2W>T89hJV&pavRfNv_jJ^*_+Rt74Ih{FYZ=RuBk1TJDJ+eY_r%}&?-Qu1 z=R4}r$>Ne~;Nu`oC^9Ur$!Ha9z?2g&q#`%$V<@IBJ5B4mq^RZ2Lzh<-Ga%_%YkXIw zwD`|s6m8mla)WrDU~Yv%wS{U@kQ}TboyyO+;mhCYJoCB*nVsAAS^i?TL5oB2}+e+`M0V_eGxx=MB9W~*e zZiR`fOhCK@_q@|fzh9N$NM2_057Iwa@2+37|l*T{t$=J z=)`cZ>BqM)DB|{bS&>YZg#j_FNKqd50yQu+7Tv|+M#|+-F+2VsG!}A0q9jgKZYYjG z?&hX!PECtahB5A0V3jDr?nnI{guGKrYh_DXW0~C&RMT@u4jfQTnlWilqcYtOFDX|! zc4pPS?oTPdo^Z?L{x27oJ=p67HtITw7IF>+da@jiIe9kqX zf@p#h5U|aX5PG1~G5|X7aRMAuYeeDpo+TS=yMnsdZDSF-amK`fxZk^?#s!}Z@nl=# zY+U_>y=k*@PT2>>#C8SEQ#V%oo3tzJZmSY{znr?)@xYoB_)+525||eu-@Lqu>JbG_ zu^M7-wjMOWm&F35jN_IM2Rj!ZbZ%bO3N2#j!SwJvw^g z4-VYj({qH~&D|Xp4CqU0yDLy`2#p1Lc7&ZbY!v){V7I^ILu5+~5a%z~R=IWey|odM zMcPN_G?tblUQmjBus`uoc>c|8iVCxx$1d(#_H5O=OY^S1OXLLw|B1T(bXgv`$ zH}QDo^VLZ6CMG7Hhn`VceNn~L-^cgSHD-&2Sau@S-^>|JD5TwWXtx z@pnUcxNY_{_ubQYTWJ24pPYRl*Oxu~Xn&CBbz%DYD=T-u24)R@T|_F6*l;-m$ObUr zdR_kQaZ94MAfOBhiO8$T1eL(6Vj_%4t~f7#_UIf#1)qYa6`I7G4`})f6FcV?6dD(R zk+zzGSn#a1)u8>g^1}2A%FX=z7#qlNU;Uh(b$M0w8y_eCd^Pc1Kvv9VUUoV-cqHA) z=Jw1tsgI-X!s~3-`d`*Q`=C?*P$6@FB z7^y13PDuXZM#cmcSV^xbI;`n$c$%5#)5d33>bZ zty4NIVoA_`In{`6<6c00UIU1qbZ0n(qXr!v9!k=ScHMLKnw#IRB;K0=n(M&jh&KHA~!lc&dez!8Kb2Mcv z0QJkzSd-8A1yhjczFYM39kGWYJ^hiR6#d>D{@3fJ@C;ChB~D$}l* z2aiK*@}llZ2nj#@V5u*;mLF+&D-ouI@h|No^r{M1WFn-n!J^uC1;yzxMw3tPn^C`dV767u`Bn={u4O*)R@PFk6$a_XsX!G{JO>F`S3 zr>85%xLRt?Hhjmi+i^`;!(|gLfmrBnef|8*viD)9r*8Eb0u)I2({<%pi1-q}3= z_gD>swuRY& z{`&?iHG1j&h^v^e)=3h0Q zVDn3ywi|(r&ar$A;S2$C0WsEN(>MH5G5EgKN=zl&K-gMZ2U5sR$bUL-5!Cf^)@^B? zsF|Z60b#XOrrqg-;=)YJ7Fv_&sSdm&K-W?K9QF*rE@Bj5N=QhE5>SkBmj)hm$|KCq zwzO58YhOsP2*dY)gD2W%wj1i**%kG%d_C3l*g+kw>rT5Psyoh>Yo=V}BmJplTiQC8r)jXu@8eMwD!8c4jnIk9_%}?2(lHvwpvs*($#6 z<)!jrc4%}D7RK~o(L3u}6s}qr0Z+5~M9Vk0Svoixt)MsI2;aB+ z>w?Rxm)i?R?%*bCPTDjlub4mQdZHQuQ}cbbY5Pp_#%-D15(?Ho5(3J$9%j$#C zUA^%83-CG8$I%@qWhbxF$P|I_NI>y%NW?cJ??leS^WxW8_T7~+@4}wD8JyHf{KUdY zE`We0m0i$*^j9;x2BMi=YV0@I7ZTzwpqtk~qeS%$9W;Rk0w@1~by{DcZ_=B#vkj(t z=`k{EB30u18-{N8?7uZ~&U44ExGx@7=mnOFh}>$k@@MlgY0Hh6m)rWRAw`RXQQz`- zg7RzUM991<7iu-$G;##2I|75(_=qFq*py&x>f5l&11Tl5FQPKf9q?&u*jy0l_2a%< z{!SJ_TO!GXOS5-30oE$meP6Wtr+llAT(vBG>n58j$%^=tBQ65+*(!n&qPF?8LP0bj z$Co~FQ921D;}h_en0hO8?mQB-SkXF{zq4L3tQ}dM1SLCIu3SG$6SQTfdxGArqi(Lx z5SdR~KJ=O7N%!rK8;(y|cc-)G$Y5D@|@)9`aAclE!Fh5=IBk_NL~be~)W9xoU0JtA)Oe_m+jZ6H|^w7lMKU+OYy zvBW91aWaDk8p-eW=>1H-ww^_dnVKQUOj6awQ{UivWAiqgrFA23T5%GC8CyrAxo>w# zJviaueGdNk)VD77wVulvS-KI)6f^Dr?n;C<+iM=Tn-arioC0Bp+F#-iewt<}%}>}R zwNfs4BGK^SRDXkPeb`|0f=8cg82;k)?oQ-jlv$jsb&-BMe!V^ea9ory zkpp%4zn&2qysp;p=xx2OqRNRs(UHEv6@bBhXkrw)h(y{zdvam^%fbo%wdkLMkP^T> zr$XkB)%{xTPUOpn3HMy{gx&&6rF9zupEC42ePOdbaUR=7gehWN9A5{sU~&#{N{aZ* zQaTEqZb>vdtAH32Y4fIMD2>5ydFp-YqotM1eR*X~P)4N+MugU7SZ^1@z-BrGEJ7%CSlZ{T1 z$d@%hIorGwv;`tmWnFK0)uS`36^znfiO(-xUrbRqgat>HL_5T=KTzTp=LP1&C#xEr ziy3lE+r{8Tw6~$V1PRnuB_+Ot`vbqVD&kuYq|4{6Z&x@Vccwf+T_vW!;n_l9?Rbzt zeuY$&2-4_?MpF5H(bV62624t5`U#U%VoO{msABf%A7bb+c}zM$fhnP|0+qjAc?9&Y zD^e7|x+u2^H8Wo}*_BvrDJ`;uR-ajo2~QALR`@O_Tq{3&*8W zmyRI_eB6zmNMjQs7x?+}=c?zO{w#}dsICqJz!Hyb`d+=2+h~D*F7~*?=kDrKR{FAre#fH%^o^HPPjo5 z*Ba=}{i-nLD|6!b;fq=CVz?Kg)S|C;NNkKuVuM3j^s=RzqQw10iA+*g$5#&9!K-zv z^CT!Y;FXMgAxR_YMDDbtpT<0@txpK%vBrGR|7G%*atf}d$16#F3z=OK-$sqx7Z;ZXSW5CBL29oxk zhZjqu&rJ7(4W?WQdv$`7R z{_1^K%C+lGSE^T)e{hQMjvXh!93oO{6%~4VkgC~Nthk&mJndJgICQIZnT^f-lJS-S)TQO%%rxEE%iu=sRa2^k8kD{n6*&~x~VHi-acf2N&~%VR`V{&%2%Ps5&WdJHPhK1 zJh%WH$?Q~3{b+{%2I&@f4G;hs$YExtric3p$_1wyXnxCNe5BbN@@e3=f?F5EFMp?L z9=tUJlKIGq|>O-uFQ28xAj??aT0gva~NvVM%rsDj}jM9(-Y)X$ok%Y{McN@N+?t#d8B0L zwk2QOzK}0#Hn8^i>(lVILo1{CLDh@}>*`ZGDZ@DZJWCi+7F=|yjs@axAkt8+I5zI` zJ=F`FLqtnp%NYcyvb#vM*MD;X!U_m?A1PM{$pIp@XugNO-|N@E?=N)^sI2PHV&4qW zi0k-jq6$2CU*2+$uI|u*X|y6aeth44`QDxnb?0F<0k5@4_lA`UKs2FhL3l%G&OkAM zBO2OpqkKFFvfe#~f3o-z><*_1?qa*2r9}g&jza}R!K$*+!Ab%+xdpT2{ZgW(e8N|p zYE6~7*Cf7H7mj@XY(V13y;BL1ZfGq0M0vv|+qQr4{#|eu>>foKnT`U{YNq~%Tc>47 z=0xdA_D*lXfUKuNIcvYu(nj7Iq98!K8C~c>v>*>XqO02sN4XQAWS4lon#U?*tHn2M zg?bFlF|^&S_amE)d*p-sFuw`U0zz2e73KV4cHj{BO%CgvVmIp^Jqm^MJQ^gx^yeV}f6 zktzb(!ZzQra!7^#9nRx<#vLt+^a9?ElLy&A9GT}8Gi=Y7P&E> z*Iwi>vO1|*!_kpQ!P^3NX#_NB&^@aDmAISuZJQb!1w%D<@0Mc|Zl|G%u`N_m><2mn z=>NXNLB@J-a<}IYw;O}yjd_9s_s`fGNO+}+Wdwg7FNfw`#uf7urNUt;=BHM7R>%2?{T-r z(?6XRV(@eixA5B&ofW!+4Z&-HaXPXD3=kD*Ts2;3AV!Qar0cJs4Xfa@l|rdq*{45o zOKGk5m3g>H#k(&{-cZu2%K6!-GnB^MxznyD6itS~PJoScQ4SRp8%WzWQXuBm>P=}z zu9@hnYD6SN#TMJ@sl5k1i;pL4gQ-(?^08ijd_9F9ELXRd7$m)be0x!ubl>mG9@4#q z`B_VvhYrc2#N}eahCHNOe}YMj>#Y^?826>{;QV(HfygfTPFoopPe5{VJTPzpe8`VL zV4zC}vKU>GQOfdnHUStSQO~27Dmn=q`?O}+6fwG0{!#8baqxU9EVaa}J-Gh(;c{Xx zyxQkb>)AA|J|MC?V)fRP!;kwPiNa^XlqXuldFN}O1YX&Jze_uksm`s9h+vxMf2|Cy|ejcL6F52i=4 zNv=@>(g_2bJ4Xe1b%^kQ7lMX6CfWTo>UJ1d!O{e@*4ddEwE982*Wr;7mVYP5=~V74 zE}YiuH~cw2xp96j9;l!+(wLUy+_^)%&xv1OAtjqXi*OSy0iQyVWurso>(`>Xk&}ps z(q+#f?9^AQ;#XQ(tgl}7I-r~aYc5}m%S5R1lbkHi}Bs6JZ zKe)S*P3g0!nShKT@S7Q_q|-Z6zZ1`6ks z^3DH7gb<7ytEKiA1b#qW`aoWWS1&s?zGFB4^#}^$4|QhhFp+P!^ax+r0n(s{>SuV{ ze}Ve}i0mx?hJKL#9Eu+-2n6MzM%(^Z@s2yK;IQN;W;T0Tn=rEdcSV?)2>GOcj`elI z{1PHMWdt8^{Ev!=IPk!iiZBoziGCACN54-dT<)ATD+YFB;Mp z0-si4x=9sgYqE8XkQb4uXom%UQJ$SzXqfjOZsd5A_WX+az-=8ydSgi}lNWm>JZs1G z?-}krF$WEGZo3H&{Y!a~NzShudSQ-0=sHW@mBs zXC+F+7I0+yyLGyrUMAP%&h&-3InA4iB{~KYB(MUCs6cH zETaxUhH}AOg^@1swXynz}4D%*ml)<6+6wc!DmejVqR>G!X`5o08S83}Kv} z#URISridsiUS6sQ;;dRDY;ns|cEgwrf`j*aTsL9gv@N&aOMqyylP=wo36*w=C9SzD zmhyK3Z_)~iAzvphyt4CzZ*6GoojV(s+n`lrz|>e%nk<_fM48Y%hTEwBdnY2dV->s6 zNPIt@6P(_xt$2ei&dUmkLb7jas#XRi^vbT2DQA;XQ}sy6TUje<8{QCT@H|DS{& z-$Ew4)J~a& zygW5aRnx|M!J8E_K2!xD4Zb&=rW|CQX+jjYtfD(=;DUwzOigJS$U(IRzDnTg>}{9} zszP)$rvQ)xaYRN=PR`}aW`Go-We4S}*~`{E?7xP__+9KLG0!Z&$o4EJuo`x;CnUnS za>{Hi8scFdYEhs5@u9;3+_B_j_NyL5pB>m`9T|Nl+G%kOB_lA$KvR?llt0mrkGL=N z(%8bHDcS_WSCmrV+*P0s^1t#_uLJVYEo%^XEDfh8nV&~|rfd7|W!?#5V>JCPKKF}A znCJz!?q7nnv_Ebu^2>>S9!}0@=45!YtPjmSP#WP*UboJWWKm#CXXaqOh|>Hs$?twN zc=lF~d>srk+;dpK*X;S=P3NI@g@D7SwM8g6RT+f0T_@-)8%L$h20niLSaKlGPMpv$ zQif64c_E5@2t$<4FD0QgpK_x=!J7qhZq5C~j<7+nZB9-}uW=FBwX_-3refVatAmar3pp!lle*XOV@bGl8)eQ9XoaA1}o3K0?)?8=ZEkwRX z<_b98_1?HPYM0VIjX}4)-;Z$k415mJSmdcbV2f5&eaO#%HC|g&liMLT!$23vL6CK! zu&C5hTdBBG>}T=^ZV0-X^_C9UYrYcv4P z^o{9RUUX}Mf|BL75`2Ndw)|5(WgsZ9*trs_yFb)Wn6KQ+ogN)d5anNyF;7#Nr!(k( z-{WajD4Gh#9i&*6G2w+O5AQIb#Kp6At!EddU5V72q+(_D0s#Sa$L;fP;EnJNCmzdD zt>NskQV`?;&vK{{jtRbPW9o64nVBaTPy$8agj~Q%w?o8r)fkIF0&d2GLkn^ny%b&+ z2&~ZAIM#V~6lKv9ObNS@{2dUzb&0?SKn7MPSyY`+65yHDje|@7Cf&3>J=uHLLm8Og zP!Rm(zxL9yFVSJdqg_5v+4mCthMJ#ja00uj+4-S8)w0xWC1rT_OSN+?3oEN|=!x$g zyR8!N$UrjS>6?0kTa^*%mE-VWw<80$nN1<5 z1iD*4ykQxLWKlPxCF4+VJK{xEc!^qFT z&cFx)0s=VIwgK4S;;Jom<{bg`7}`L1^?aS0f}B1Q0Xz8q)9h?d7Ks~lbgsCAZoWJJ zl8w3dIB`MQu^0)vT5DPsN|}R`%rT!lA#sJ?RvNF>@r8)JhEFauQoV_Q`KDebGR?aPBtOaMAKRt)_CTNV=5;*EiY}?gOs%KSv7^AnDT7$-+~iV z*f89r4JYW~wyT`>&Oh1A0~$MTS5vosJSM4lbB~$msXPDw7^_v%YSIO<;O?vB%q#fv z!&i2`t9w}&Hfa2LD)T8iKyPrWAqbT1T3UE#SzR8rl?0y7nQ$cq#j^ydx{ZbyiT{W} zp|N5R@qFx+SI2CVaY@Z^vTphohEVK5y8@%w%Dp!b3`Q4)3SJptn15OD;6lgx^#(*_ zTkEWChj(Vt6VIw0XCdy903)DW`Vcl39S=WLw&BYrm(z$SZa~EF$*U zY8CDTTvJ(5JM4K*(3?X_Wu(p5pB1ZN&ks+1n(>v@p;N2qE(-Wwes1;qU5k6pjey+n zkF;;!B{cW<36khp5Cra3;gn${%AZTZIrm(r>NX0Es3;>(t4%bvG_A#b8z! zh4Mx(e!9(MmRNP#NjWge?&LRWuewc7r-W70M9~ZHAfnxG$D3}*ml*K4s>K!&JlkV4 zn=t+%+jNAKTs!R^66WVriPH&t!6($O{J>x%1Yi9ec{NG1&Ha?*nwQD8-QRAzE zq0YqIGq$@_Gxlo*hLNw$5i9VTddq8t)0X>_*VWIvUu;N}FVW=h*)MZYF4BJQH+5L| z4<3CHIPvPTzW9q8?V^pePc%p6ADQVl$ZFK|4>Y@qFbGAQx(Z2t-iT3aT%CTCAX24+rL2A0T@YMsq$IM4o}LS z;m*Vy`v+9LsmLalHbMfmUr~vHKNw_(KYF!&ILD0>m%E0Xrs>pjR0gZO#Xm$BKU!(Q zNzSIu-Rp9bC_h^c-nqu6I_&1s%_lugUizL8j#I%^r{(&%3Lr;3Qnf!ZIic*N&CCmw8|a_!v6sw$qh=MIu6_lcFLMMRe!_L-n zwoZY8NuI?oZ#hypwg?v;v%#=N`gDK8HLAf$3tyiTC}Tt4wIXACgmJm%N1hjIR>ob2 z7H8()csCxeUdGh#)gjP<(sxsAQSnw zaKrI(QPxrpRNU7N-4S0}Vj$+l z?Uaiqm9AP5%)`HBCx5chgBcgq2lxq7DM4cWYY29*OEGw4QRkRHeeVbP8$v6;Km2Kx zo4Qf;c@dwdo~m7`ig`t8h7A=gx5bT&P_s<6H<^B_kxpGGP+?}sC4iGP`5(GG8OCl< zL;6g6F3%N{S9R@)s*ze$aQ(#w)*LiYJ-79kBQ`APg(d{O(AEh7xBkW~4L+PUhnQ8j zwu-8pp-sHE?NhV*4~69Z03*uD$C&6WSv*q#L zAs7aKsFs&Ru8H#d$*}r7xpCkKt54#wGKMun`zG)n5r&0J_mKOu9^OS?mvduYE!{bH7{*|w$c zppjARty}8{uKvD-^v2g$!Oy|Mf^T7?B{)#G?lEbB_nBdC#7xhLZJ#BO zojo>E1`$s!sz0?11MRfu-UL)q!R|Hq9T(n(4PU<2CC5HLnea-f`ETXqUkZXcnm?#Z z*ZfD4-#xkfbF_1J6wLsY8VIG}fCOJR6kg$z6G}#0=()pm0ERcB>|eC^>>1(bg&r8C zJW-N1;V(%? zKYqgDapCPaM~3&9+6y2+ag#I$O3aGAJQ&2^Xt5mY<=zIN($<0p1jn@z`no3T5E`G5 z8at^SZo^vYJmfQ>4BU6A^rru&v{q_&nk;UX`%-;|;7n&2?Y))5c{F@)KaLcaC!`_Q zT_8by7_zQe;BXIt}LsLTum_&gTSD`0ZLPJxt_17%#j^kgE`0u@~6ti|G zH0?SDTS*KIB7*3`)m9~K8dBBHNHS7+4em8$<=hPR3*;Cv_nMd>n*98`r#H?qXx$Gl zEPt1>N5FpFg3_CVt=9(jT;1lmpd=WQkbpb}+Q2gmB=PgX2lDpl>)&+N0w9lm4cX?q^mXLY%uh+N)@;&p((KP))x?aOs(-Xkr^vDFvg zL$%qWNF+7oEv&+^0RJuk0`mdkEH+*EC>{M#@>aYR9Ld)d8gbXx=N{SJ88qnU=C55N z_eB14y||Ui&2P@<7Jk2-$PT)hzcY=)u)}e+WCCa)gsI9Sv1n8TRe%BN>ay&N2M@9p zE$A3^g(mkk^wWYC=24y91y9cX`wez%S_eHN3I6(5nZ=K5KVw*JMNg+gkWK#(V75-G z#|;&G=WLYQ;57@qj6h5P3|t-nJ4AKEvx#)4qbYMyl%>G`Knc`5_Rh@{hpgEmjOt|OnEW;dmXx3s%ht#=Jj5B zp)4#U)N2WsiLRnUdVnC{OVKtkFwoVtKhq@7yfEZby9-9e&AL%lMGdzYv)v5|e(dnv z1jaP$RGU)@c&<2Dy2aSo!uOr`zj7Ed`5>O5@5f9d4EhGu1`^V29$#5gV$fXirLTDX z!`DQ!Iy71MbeAx$yMMoWo@)*yRe>$l2Ytq0C{10$hCu}pu$pIGI0stb27sYKumpZ| zo744o^YT4E6HIhR`@8DUC&tnBLv%s1PP3FN!y6JTknPu8}9S;LSqatHvX<>^|1bhqe_r4V|hF9{TVYH^%k^?BrT(l;%6 z^|j)8H`h4pg{Lv9t;=`2t^xLX$++bls5mTh+yJ8g`xeE*unK9ds;+>`pP)V-7QlCi zix8tgvU%@pdGofnHgR6QR);_1Dj?i68ZZWaXW;<}p!HeHPd_2VdkWcV=|dQ5ollXm zL|WCZ>N&|W@_MZ|JX)N-lyP%UZA7Ayb*cj%-|gz96(9>Lrg&JgGg6CJx< z2A*vLT7Ja-iCex8s}E|0iy!} zed9zXW0Q%|bEY%`^MfR6sQ$pBDxc>fN5LP3!eR_?$uc|#I^ttlw}na!j7RGn#|bq3 z>lx%}wk9&7e1`&0U=z`w@<;vXJ{KXkN#h;vN(BIZ{&8KdmW810T%DfJEQNBVkz$q zZ@0qUJ954$eP@XQla5-rEFN0CKRrhkVb`x+XV>Pwr~{X=c!X2cRKt&RaS(|2k;xl0 z4_NO@G+2+~TbjS>zE%ni`_5S}qI7DTHRAi5&5)GGmL}P74Hb*@xQ+pFYI|11Y9>WxoR+6_$`uxj84APN+*JOXiVa+I*1pxNx$bb= zo@&ev?5&>13Z~DOc9*I=c)d5G&V*jH z4OB4`1wF?^dpKJ!ZceJ6v;c|}^pqwdLT>T5$!xo_1aD4xOk!LbF(PAS@SV-fz%ZHI zIJxQ`SINe^+e^5NO}zD#iN$df>7H9=R}-d~MmttXJ;ar_-~;MXdf_O3aOPBcJvg{O z(MEMplUAQMTfL{{e5q}j=#P&M`!*v`@&0^#^7C>0_nJQfam>Z_2gq5D36)Eq+=wRV zaeehsGm8riqH6n#Ltu>#$5;sbiwAq$3R3AN#e>xMU_GBYrf;YZ}cll54Ql2nPsT_^8s zYdrGBYqrYKa31NL*L%tyokC@i8!_8!Yhxba%)@o3&D(zjyIXt$)$hFi>JJ^G;~i{S zx_u_)?;9;3!q22UEa=04BPa!A+sBdmximkaQbxvFF#{9t4MQ)D*T+XIbd`0X3s@9p zX@G~4O;3V`1w;l6@5`G!z=O3i?_^mR{7$yqaA0F|ob<#ct2+7J%|?rEo&RE!^!;7) z4#>ke7c(gcM7X;>^DgL;G0+*k2P(YwMb&u+w0RHeYP;uQb}kUTqH-SMIv1;#_Rl~2 zl;v@~7$Wg|ZA9De)eFMP?28Jn`Jc@$~oIa*Kl2Wfa7&dBaaoYN05 zUCH%@munB`xGAsa7l=M=1-Olb*nNV51OQ8Y>%K9AfJu^~|CTGcyCo)fczW0H@Z<$f zmb(_8ul}J~Iyz;Wsqc5z{?+4?5QhUe8SLRt;i_fbfglOc+32n=Ys3! z-mi<~*+`+yow{O`@A$MKEr|IhzCv&}cxMV;m+#*#w=5|rAON?;)0WQaVw}N6+puZV zCRtg&$YIFLqd7q}8Q$p*p^%oA7ML%-;2#}KLkEq))pmULS?Vj#wngLoMvTfA7E=6o z{d#ddmrw#;8Tl$eC!-~6|4qRsN6X)Sxl5^Qi*4>>dt?}A>2Eap{2mT2R7PgJbL@DX zaGoiawt6+~vh{69dW_kJEthgD4x_kd%;-Gp8j{xRsyD^sIE>DgG20?h&LFi2VUjJ$ zOa7~gdf-#V?&HVzC6}vQ94Z}aE(R=26~dmtEw2lPG=}=}8i+?!3Dc8i&XP)V&`qBa zKq~|li`xh9v`C?eRHDx*R|HyPY4*Pt6aPcK5e=LO8ojCEh^2b8D6hFxt&rlvLe#}?)SG@!H>gc(n=!XAQE zw1e&lCKH=z;A*Xo|64TwEMT zbz=~q?05Z-&DMYZ%AJ9Uv8()d7RY>ivLAw9UYsH9mHCA3tt!!VR!#H@yaB`BpxX%|e9tcDKcuxms4RlOVx-fR@B<=a!Z6#=_kZXCT zC+Z?1A`F38rpcNVXa+@KG*GYJ4Nx>4%jD00G9L&Cpis~rE5PHFZ3lIgh#Gq!mQ5SY zOQRCpf&c)6iy5<+_}G;{T^!CG6BE7+1>ixvCCax6oGmPUk8Ob7)|dW%DaTO=T8DBS zG&Zivjl6g<;oJ9bl}wyrLc4xeG_3_7e0*x^mek_9ceR2`%d*W6MX*z4qA2e!;q8PyGsnVkcH*tm0vB&=folScv7^GR0||H+CleZC=0Wy>j_j z+CyVLARCUjlEH??#^deat=&LVHp5@@3Uj?%6=B+^XIMEY%h}-93{|!EJRxid4>1B3 z(ttQ*&#(N1g+YT6hKoZ@cVd1kAHhm44{EGGUeraJ`?pOk5}TchOkMdQb`O19((Ki_ z#hdK^+(=e4mY3goB`cEKfUY6cQT{FTQe%T}`BK9NEhhxutjqk-oO@*PA#=II<4*R^ z+qb2uFQL%gngD`f!n!a>z)&T<=vbWzHDCNdcAG|N(Wh6t5;Cy{A9JDF%DVV zvINrKk_rOrAJD(|pYfr-e0X}iG;{e=Qm&F~3?~6E`~lN1gFA*eH@$zTt@*bDRUb7# zjAnbj)}Xz=E=3irU|7RP+%d|W1r3;mQ>X*`cREDQ5bL`6noAW(V2B3it|t6339N)} z{!DwBg7m+QkBC{yP%dp^D>eAv{y1CqgG))@AeQ(EH}ZXO<03}i6w;#@6P z3FSd}>yaj&--Y@3`cJs61>fv_i1jr9#OR}smw-h(2ue4`D8^YwL>&WAr*a2EXm+=j zR*uQNet^KIzJJfXdw0v)+o`EmaFO6t9<78nGXT7@E#cxyN~ht>3D*GNoP9`Ba|};9 zI?SKywHUHhacB}mN``xjR8tmW%!DM%9(_U9sSy6K61qwSpLqYJ$Mf(up`sZK&TwtH$WDPyv35|v6 z1MpTYz&nN1HSpLSNH9=MgICowy8#Qs;EL5-k1a1d1%WyqD#Y%XZ9C!L0pxzRX;A`V zD;~EE3jV-o!y=_P-Y8QtxU{Sc*JD4_(-7!kiiel(NVNJ<4kiWrnk~<&t1oa}PD!b& z2;KrdM`}*aNZ=A7E7cRY%H7{p>2rS6mpDgEOiWNGx2C>?GS}nnw{PF}0ppNWlyo4# zv^bPqK#SCRU0|vpnIU~iwHI_c_zeqU~o`7oFBr1UXufd6+-YRJXDq0i9=I{nQtQm z{>TCHYGz)yF7c1Z1v!0p>p_nlbMqXfXL!{r%^6W!s{&J`rS&3&U4T_Iq|FOZ6(mX| zZB+m?2b1O#HNZeCspVdP& z8_Wgt0f+u`p3%ukPjBzY3l~1P!eH)$YIkp6-!^c0NA6mu!Swsq%1iT^tWV{jQ5zhE z(-=KC04g5L$*_@fm_Bju)BNKPrfpdm2Ci`uXM$`C)aAiucYl}AR7|?CaE&3bxR<07 zj9#KvhVA$$pp&f%3Y)*qe$`nI;I#RDlMqUwgY7xo7E53DRPM`{FJQ1i8r2_$9015D zD#j+M!QU=1u^q<_`lw>{3SM`HL8$FWCEW`|?eNXJ)Iz(?wAjVO%3B%kq9 zxiI|sxu?O5DowyqkAAwwAKA#WNYm67|s~3GLhZ51hFIv0wCposRtqq?q z@#&ECT?x9S7~Qu6cvEBJcgP^8)brY=&{ixO=9NNR^}#bflwvqv2h7YMJM0U~0f-c! z+*#H}3L~mj-Y#Ac5*S0o8e_6jecSO9!h^pme&D2bVRSun=DI%VQUbYnlADRgGdmXm zO$LMj+@94T@=e9j;@W^bku}a|K+mZ!QKD5gPXO|STh?(n#2V*ElNE?Q`whU3E}^~z zbPI^h^z?L2A!Wx20p1xQM89RM+iuYo)zRw*Ct>dlhhFH=^v!QN*ASR|cFF|(hO1JL z#h>I%z3c@fBSeE|zS8G=omPjyRl@@GC@6WO3*0E3sAmNzUvN~+y8V1BSI&aAg6&a= zvpK>9{wN|MLdC5+py4aqci00WW}^;eD<;q&+hXa~8rsArDkLNX$<`0^_v=xLLq(C@h{P$8QQ+F`3d^z=NTpZNqWjo>JR zxB_;*jYld~^qUd;rc}S;9pjW4#Z>HA#`1hU>ouwRYsE!qS)#RtNDC$1n>MO}Xi4D} z9n{4ktg;ra%~+7&9F;h|y*S^gSALW<)<(;Nb3Fv#KNDOWfey*1UqCY)DHkbjXkBw>=Pbxt{oYSz`Tth%0dg4HC)4b(WO#MdX1*2Z z%{h1Z_JaHOcfcG7cXt5}?m4gx=WQfcMt^~{27~EjpB}cHl=<)TbMJwN{E^;Lia0Dk zN)I8~4)Z6z{+)g!Yfg18-a0-|ox-vrkPu|f;`sb6Kq@GK+H+ukYOA~?PyUXzJ8cqt zOYKeK^fDiKUJP5|uD<6QmpUc*u>qI)HKyPoxtA&~9OHibyDYzZC!Xhxb(&VDfBsbV z{Zz@jQ}N>uzn)rk=ujiFLDVF-L=P~1U=Kibd83RB)OiH9JMj`^9V*4M^!%+`w`}r{ z$ix~QK78}9zW|YK`up!Ni(7lHH>ff0j|@24s@1IO7+#UAbV|#4*%H&tCr_v-cfioh z$&uyv>3zYzY}qB~vtQ<#Y167s{kDxYY7T9;%H^^g7XiqKA9gHcL?bc5BOkBI2k52^ z0QBe1onx>X?S3p_2g4)6%E{@z&GV(_sRzu>_s;o|E-70znb?$77|ILw-8>jQ@@Z%& z>Dsj;hYx$=T!W-}#MHFl)n=uLOJQLWxf#krCmL?-Mh)Q-i+p@b|GMsb%PQzGxk|$4 z3ynAEdfF=5sV=q+X|uOU1ID^fiP_3m!P&qiT0+k5la3R zNQm0n+Frg>NJ_%6UjXF1wY3$ef5in&^wOqpU?&sdMJit*o4>hx%+4-KH3?SbcJ}t2 zkIwp{`RC)~L;d?}Nk&z(ObrB??sJzo9Ps9> zZ_L`Ud3bv-p-?C+EN|v+ZD@aH^9|lSxrcMmK9`jI!S>hAJuECNXpl)JIbMK+g9FLr znW&7+QbKBf^4_gq1_mzcNRT2@OEx-gT^5zDwoh<%mCE_8?)P0v6%E0RE{CH+kpaE4WnY3hl}|{&Eqn z)vH+vDDHFYGqbR$eSI?ZL(?>hvdNKX4Z)WQcG+7A9T#owDug9O2ZESLJPIAJXqtzu zP(&{bcsL2Tn{8`XQ7|Z;lpj^S2(N|0l9H=B5+33OLNe-8!iWdJ7BCUMTydt^QscsB zUQ*JdDtXqW8W-Qp$hfytK8pJN>w8W@b#{WsEcD{Vr4Zz0+W@QjMs@QR zRZ?f!hr+dN>F_#gK-l`c+3<(5d9z?lUFwv%zVYQYd3kI5Yq~c{CangQiucPUC}?3~ zvYv|-QwbeOTN@h!yb%?v!H13wVnqD|iF2MB0&L34IMw03iZHq&QhO`bRz*+7lS8FCNezDZ zE0KEwHfA>s9Pf)8apmXZd+}+!)p&nFzcqTi5Z$Y1^!pKfEHbf9Sb{?fd%{O}>_gD?&cyh5 zHUdiV$2fmj@pAk0;MOQa^djwS;J)x#>NXA=WY|1Uol1|XAL%OJiF5%wzB2P1v&{bf zW6v!&ZyE5yConeVZb4tJ&KRkoR#E{&Ax1THYQraxz!-`9Eth*s!CYXdgh%m>631|@ zt>BsAvi+3IPD@jl=0)>(hz_@_4)wD1^-^*q~zQUXLYSvE z1J6XXD;siYICDz^07xHbuCG_yF9$P0`fRIFR43U-WEx1fbe?f^-xj6DNdZN?>MxxfArONb*W&+ffIcu7*Q~MoM&!+24xD^F+cp~P>FojWV~Zoqd%LVKr@ADp1OJ9zL*~?J6uP0tSqs5;*skiXb6>%1K%~kDuSQx9_>@E!q*hQ~0f;;&d;8t?E%2H|T|NkN6@0Fk zJEBs7!>OX8B5V^^aG;+dx<7paH7DcX9Z(X^1qHP;K42Msv}a(LO_#tK&FBF$I|m+D1AYJmFB(p+~$6yK1dnx_C?Qj0w^ztxBzwE z*3!aCL1JV)7&9?3fes7Q*_EqSU5$%Fjz0#IL(>NYI#|#_e*O9d!$gJc+h;MY7K?Vo zu^(c&8`+jqHKE-)b&U`fJq`8ut{+SuG8|PWZSt>8u2^~=x_R~d5#^vL!B|VX69R9~ za<=*hFHPIP?c>3S-d%Lqw+V`N4yW46PT?{uUHCZuV<frLXC`1H zyMB0-5Q)}l8MobRao^6tp=!sUnm2F?@*P}HuDu!+W##Ow*QpiG?>XMT&s6ulfOPxM zh|}8Iq0Ji^-SskhqL`z>;YAl8r+X9fi5@)bvQ42rhZCoB^I-g5tVD_7PVrFQyM{94GzGbNsywh)vB)$#F)4WUT^fy+O--x+DY?Bb z?1N6XJX=#!)92w6PDMM!#WiGN5xE99sZoH>w0&z63; zo3UI9*E;9BckJs)F(nwY06?vC^9{CF5fL2OJqTlo2?;W>x;WugkK*!NVa|V`RkVfel8A&!Su5@&;N71&zvKYLVFMPLLRIo9_ z@%_e`1O3cFJl)#?$m)z8V|M$i4 z%7H2(0R`EdBDO33^G97gYOT$_Ue~z)_X8|E4azq>1%us2#{c}0FQat(nL3U`Vhazg zMi;Mt`&Kfhns@1Qp5s2Ywzg-^+&_57Ppr&ZYVkK(J;Q6Q`S$erEm87sgvG1v-u>LL zKVg@zmxqUklhc5B(GLu%w#4rpwCWLZznz)M6oBEzRQLGk0n7{tH}DQa_Xi~}zFNI1 zTdK=oN}ZrtIQfZ9*YQZp%CZEY8wznO0opYG$Z`TPkv?6FKAwX>I1}Dd9TQ6VQU|=8tK9eSsufm*3YxAj2 zIlg~B3(0_j@EdAOi~l>PNAa*1s5%Lds}dn0ArTcvIyLN_0=gK9kaV0xOANw$VKfO( zL&HuGuvN-=Cxd zslOjMERm>D==FcpvV(ln0S(;s8`>d)LUcp=@2^(OoBdSY*VUbXc@_pzr=T(;FaHCL z{hlGzU&sp#R*158x9kCut~#lE(;eebLJnFAu+J2ika$*8BeQ8!cug^;s4cCnq#5nT zjej>cH=}*qyt$6+GiII335-b)_f~B@(%sujdY1P5okMdze%#tj#7N6`);xh#*p^x^l>+Djg-#>QvGBIMEfxq?BAEVfEiOGzzcOuKk^ zVjy8?uoMH^!on+E#YIIwe*N0HV+R6Nj9Ph&1g4HFg(AISE1!^uG1;R>$u$ZpDJfU3 zXxgk?dfq@fX{!T=XY&@!jY-cemgc6WC^Mtte2%qMXp`C@gn^3siZ7_EDk;K3LS1j) z?pBV8i8-y@71OqMccuqo5&58jbOGGl`Qmj!lj@6q5Gtl-m#8L^ch-%K!bpsQ=9%(* zx&28{+6hdBML6ykWEU65)qO&^AE*u7dl|hMi-5q|wL>U>L-LA`Y~)~LJCOO-MI@iS zx)_BRYGhyEU)W8osDo`LYOCz*LuiX;Ft{8zc1iU2r{za}TJN_$=UcdlKbaY__gv-= zzg1Z1f#m^OX@qfJbpV6i-11On#>cOjIgO@+XNg6tR7^Eth3abCl4g+t8d9-~70BP= z;p_rW+OVo-B+!Q7!GnV-1zHh`pJM^BJ%eQhHBAokx$wj7wWZN!`z<%aDh_VT1Ls&4 z~dZ{VmxL?A_6z;K^ToW>_*60RR#b89Y;P5ZlJQzW(9?~T03mF zi;IhMKbvFIX5U$_weWo~*y2jp9!c3)yo|imR()jexX>^lLF)9P<%dpkOJkw;aNFB^ zE-@(fxp;WeS6P0w6R6hBHnN265%8@Y9Z4HcG{(|W{KnV_m-mk>GAG!0q*~hAoVM|2 zyZv(({HcgJs;BE)_AXq%{1v!#c%iaATbFHhxq>M#U@Q4NXk;oCSbd z6+U~A11oPIRE=;E-|YvmHz9KMl~P3GWg5hgQ9r<`#wdgz8ziQH(o#kKpx+ihk;W(uW}(By&}XVmQX0p&#@^l@Dbc;m53#|^ z%L^&pv|t!_7c&J+?$DLF_utLV{-~IfpMMhH2ciRVs_dps+1c5#uRh`}01puJP5FQe z+wWr{g>OerAnf<$q08f%&vn@KMa~Zo4gi1QMA91I8$_m z5en$kVk+RpN(>{m4i61EQuB}aeXLn|h6rdb{dIG84%iV{|IIpIo+F zP&vE75hGn}3*h+d8PN-AD9p#dd~x74z+l+O2h%)EK~T{Fd|)A%(cp-mR+nr^Ky)ff zOAG88;Kx7+xSK8US*4}dgw|A@Oft=Ob#fAmkGUw%{!{f{diuHAQOtngZH1tP&4|N2 go3sBMx|*{!dcL$wO}FUA>SjQ{`u literal 0 HcmV?d00001 diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/image4.png b/assets/images/accelerating-pytorch-with-cuda-graphs/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..87c57d85e9a24eabce00ab287d050f36ef897d73 GIT binary patch literal 18249 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 literal 0 HcmV?d00001 diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/image7.png b/assets/images/accelerating-pytorch-with-cuda-graphs/image7.png new file mode 100644 index 0000000000000000000000000000000000000000..31e26545a2579903e318cb26e625debc9906ce12 GIT binary patch literal 4266 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 Q;a>$#b}qK1);?GM1D^bhEC2ui literal 0 HcmV?d00001 diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/image8.png b/assets/images/accelerating-pytorch-with-cuda-graphs/image8.png new file mode 100644 index 0000000000000000000000000000000000000000..ce851019d5cdc50c788839a8eb0e6f54f465b632 GIT binary patch literal 52645 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 XqI2uvi|6@Wt0Qx91QgCAr+@i3ii@CR literal 0 HcmV?d00001 diff --git a/assets/images/accelerating-pytorch-with-cuda-graphs/overview.png b/assets/images/accelerating-pytorch-with-cuda-graphs/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..598929dec45dc5c348406fc11b8f4ed17dce129e GIT binary patch literal 65319 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 yyX^Tcdk`7 Date: Thu, 21 Oct 2021 18:21:29 -0300 Subject: [PATCH 13/20] [PYT-635] table style correction --- _posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md index 068646d89221..39146e5c6ee6 100644 --- a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md +++ b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md @@ -171,6 +171,7 @@ The PyTorch CUDA graphs functionality was instrumental in scaling NVIDIA’s MLP |-----------------------------|----------------:|-------------------------:| | Mask R-CNN | 74.042 | 91.340 | | BERT | 67.668 | 87.402 | + Table 1. MLPerf training v1.0 performance improvement with PyTorch CUDA graph. From 6386415e4de2786d840799851840f7efb0ed2b76 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Fri, 22 Oct 2021 09:10:05 -0300 Subject: [PATCH 14/20] [pyt-635] removed site.baseUrl for testing purpose --- ...-21-accelerating-pytorch-with-cuda-graphs.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md index 39146e5c6ee6..26523ff6180a 100644 --- a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md +++ b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md @@ -17,11 +17,10 @@ CUDA graphs support in PyTorch is just one more example of a long collaboration The benefits of CUDA graphs can be demonstrated with the simple example in Figure 1. On the top, a sequence of short kernels is launched one-by-one by the CPU. The CPU launching overhead creates a significant gap in between the kernels. If we replace this sequence of kernels with a CUDA graph, initially we will need to spend a little extra time on building the graph and launching the whole graph in one go on the first occasion, but subsequent executions will be very fast, as there will be very little gap between the kernels. The difference is more pronounced when the same sequence of operations is repeated many times, for example, over many training steps. In that case, the initial costs of building and launching the graph will be amortized over the entire number of training iterations. For a more comprehensive introduction on the topic, see our blog [Getting Started with CUDA Graphs](https://developer.nvidia.com/blog/cuda-graphs) and GTC talk [Effortless CUDA Graphs](https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s32082/). -

-Cuda graphs reduce launching overhead by bundling multiple GPU operations into a single launchable unit, i.e., a graph. On the top, you can see five individual launches; whereas on the bottom, with CUDA graphs, they are all bundled into a single launch, reducing overhead. +Cuda graphs reduce launching overhead by bundling multiple GPU operations into a single launchable unit, i.e., a graph. On the top, you can see five individual launches; whereas on the bottom, with CUDA graphs, they are all bundled into a single launch, reducing overhead.
- Figure 1. Benefits of using CUDA graphs + Figure 1. Benefits of using CUDA graphs

@@ -36,7 +35,7 @@ For distributed multi-GPU workloads, NCCL is used for collective communications.

-With NCCL CUDA graph support, all the kernel launches for NCCL AllReduce for  the forward/backward propagation can be bundled into a graph to reduce overhead launch time. +With NCCL CUDA graph support, all the kernel launches for NCCL AllReduce for  the forward/backward propagation can be bundled into a graph to reduce overhead launch time.
Figure 2. Looking at a typical neural network, all the kernel launches for NCCL AllReduce can be bundled into a graph to reduce overhead launch time.

@@ -180,7 +179,7 @@ Table 1. MLPerf training v1.0 performance improvement with PyTorch CUDA graph. Deep learning frameworks use GPUs to accelerate computations, but a significant amount of code still runs on CPU cores. CPU cores process meta-data like tensor shapes in order to prepare arguments needed to launch GPU kernels. Processing meta-data is a fixed cost while the cost of the computational work done by the GPUs is positively correlated with batch size. For large batch sizes, CPU overhead is a negligible percentage of total run time cost, but at small batch sizes CPU overhead can become larger than GPU run time. When that happens, GPUs go idle between kernel calls. This issue can be identified on an NSight timeline plot in Figure 3. The plot below shows the “backbone” portion of Mask R-CNN with per-gpu batch size of 1 before graphing. The green portion shows CPU load while the blue portion shows GPU load. In this profile we see that the CPU is maxed out at 100% load while GPU is idle most of the time, there is a lot of empty space between GPU kernels.

-NSight timeline plot of Mask R-CNN shows that the CPU is maxed out at 100% load while GPU is idle most of the time, and a lot of empty space between GPU kernels +NSight timeline plot of Mask R-CNN shows that the CPU is maxed out at 100% load while GPU is idle most of the time, and a lot of empty space between GPU kernels
Figure 3: NSight timeline plot of Mask R-CNN

@@ -188,7 +187,7 @@ Deep learning frameworks use GPUs to accelerate computations, but a significant CUDA graphs can automatically eliminate CPU overhead when tensor shapes are static. A complete graph of all the kernel calls is captured during the first step, in subsequent steps the entire graph is launched with a single op, eliminating all the CPU overhead, as observed in Figure 4..

-With CUDA graph, the entire graph is launched with a single op, eliminating all the CPU overhead. +With CUDA graph, the entire graph is launched with a single op, eliminating all the CPU overhead.
Figure 4: CUDA graphs optimization

@@ -203,7 +202,7 @@ Similarly, by graph capturing the model, we eliminate CPU overhead and accompany

- Synchronization free training eliminates CPU synchronization + Synchronization free training eliminates CPU synchronization
Figure 5. By using a fixed size tensor and a boolean mask as described in the text, we are able to eliminate CPU synchronizations needed for dynamic sized tensors

@@ -217,10 +216,10 @@ CUDA graphs are being actively integrated into other PyTorch NGC model scripts a

- CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced. + CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced.

- CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced. + CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced.
Figure 6: CUDA graphs optimization for the DLRM model.

From 138492a7f1e2aeda7b140338568e28452141e325 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Fri, 22 Oct 2021 09:57:01 -0300 Subject: [PATCH 15/20] [PYT-635] site baseUrl rollback2 --- ...-10-21-accelerating-pytorch-with-cuda-graphs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md index 26523ff6180a..da7a84ffc9a2 100644 --- a/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md +++ b/_posts/2021-10-21-accelerating-pytorch-with-cuda-graphs.md @@ -18,7 +18,7 @@ The benefits of CUDA graphs can be demonstrated with the simple example in Figur

-Cuda graphs reduce launching overhead by bundling multiple GPU operations into a single launchable unit, i.e., a graph. On the top, you can see five individual launches; whereas on the bottom, with CUDA graphs, they are all bundled into a single launch, reducing overhead. +Cuda graphs reduce launching overhead by bundling multiple GPU operations into a single launchable unit, i.e., a graph. On the top, you can see five individual launches; whereas on the bottom, with CUDA graphs, they are all bundled into a single launch, reducing overhead.
Figure 1. Benefits of using CUDA graphs

@@ -35,7 +35,7 @@ For distributed multi-GPU workloads, NCCL is used for collective communications.

-With NCCL CUDA graph support, all the kernel launches for NCCL AllReduce for  the forward/backward propagation can be bundled into a graph to reduce overhead launch time. +With NCCL CUDA graph support, all the kernel launches for NCCL AllReduce for  the forward/backward propagation can be bundled into a graph to reduce overhead launch time.
Figure 2. Looking at a typical neural network, all the kernel launches for NCCL AllReduce can be bundled into a graph to reduce overhead launch time.

@@ -179,7 +179,7 @@ Table 1. MLPerf training v1.0 performance improvement with PyTorch CUDA graph. Deep learning frameworks use GPUs to accelerate computations, but a significant amount of code still runs on CPU cores. CPU cores process meta-data like tensor shapes in order to prepare arguments needed to launch GPU kernels. Processing meta-data is a fixed cost while the cost of the computational work done by the GPUs is positively correlated with batch size. For large batch sizes, CPU overhead is a negligible percentage of total run time cost, but at small batch sizes CPU overhead can become larger than GPU run time. When that happens, GPUs go idle between kernel calls. This issue can be identified on an NSight timeline plot in Figure 3. The plot below shows the “backbone” portion of Mask R-CNN with per-gpu batch size of 1 before graphing. The green portion shows CPU load while the blue portion shows GPU load. In this profile we see that the CPU is maxed out at 100% load while GPU is idle most of the time, there is a lot of empty space between GPU kernels.

-NSight timeline plot of Mask R-CNN shows that the CPU is maxed out at 100% load while GPU is idle most of the time, and a lot of empty space between GPU kernels +NSight timeline plot of Mask R-CNN shows that the CPU is maxed out at 100% load while GPU is idle most of the time, and a lot of empty space between GPU kernels
Figure 3: NSight timeline plot of Mask R-CNN

@@ -187,7 +187,7 @@ Deep learning frameworks use GPUs to accelerate computations, but a significant CUDA graphs can automatically eliminate CPU overhead when tensor shapes are static. A complete graph of all the kernel calls is captured during the first step, in subsequent steps the entire graph is launched with a single op, eliminating all the CPU overhead, as observed in Figure 4..

-With CUDA graph, the entire graph is launched with a single op, eliminating all the CPU overhead. +With CUDA graph, the entire graph is launched with a single op, eliminating all the CPU overhead.
Figure 4: CUDA graphs optimization

@@ -202,7 +202,7 @@ Similarly, by graph capturing the model, we eliminate CPU overhead and accompany

- Synchronization free training eliminates CPU synchronization + Synchronization free training eliminates CPU synchronization
Figure 5. By using a fixed size tensor and a boolean mask as described in the text, we are able to eliminate CPU synchronizations needed for dynamic sized tensors

@@ -216,10 +216,10 @@ CUDA graphs are being actively integrated into other PyTorch NGC model scripts a

- CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced. + CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced.

- CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced. + CUDA graphs optimization for the DLRM model. The impact is larger for smaller batch sizes where CPU overheads are more pronounced.
Figure 6: CUDA graphs optimization for the DLRM model.

From 89cf9a9768891fcdabbde6ca6fb3c838587edf49 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Fri, 22 Oct 2021 10:38:34 -0300 Subject: [PATCH 16/20] [PYT-634] modified episodes title, added Watch CTA --- Gemfile.lock | 3 +-- _events/episode_20.md | 3 ++- _events/episode_27.md | 2 +- _events/episode_6.md | 2 +- _includes/latest_episodes.html | 1 + _sass/events.scss | 1 + 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index fbd99d920d5d..93509aabe8c4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -273,5 +273,4 @@ DEPENDENCIES RUBY VERSION ruby 2.5.1p57 -BUNDLED WITH - 2.2.22 + diff --git a/_events/episode_20.md b/_events/episode_20.md index a365f3b19469..31b6400c8d0b 100644 --- a/_events/episode_20.md +++ b/_events/episode_20.md @@ -2,8 +2,9 @@ category: live-stream title: Episode 20 guest: E.Ulises Moya Sanchez and Abraham Sanchez -company: A Robust PyTorch Trainable Entry Convnet Layer in Fourier Domain +company: PyTorch Monogenic ConvNet Layer date: September 29, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/B7.png +video: https://pytorch.org --- diff --git a/_events/episode_27.md b/_events/episode_27.md index f279b3e43d7a..10757b2c7a9b 100644 --- a/_events/episode_27.md +++ b/_events/episode_27.md @@ -2,7 +2,7 @@ category: live-stream title: Episode 27 guest: Dr. Ariel Biller -company: "The Fundamentals of MLOps for R&D: Orchestration, Automation, Reproducibility" +company: "MLOps" date: December 8, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/I1.png diff --git a/_events/episode_6.md b/_events/episode_6.md index 70c57db27540..a1c264b48cbe 100644 --- a/_events/episode_6.md +++ b/_events/episode_6.md @@ -2,7 +2,7 @@ category: live-stream title: Episode 6 guest: Ludovic Denoyer -company: A Robust PyTorch Trainable Entry Convnet Layer in Fourier Domain +company: Rlstructures date: June 23, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/D2.png diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index dac38c791e6d..c2a71b264695 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -23,6 +23,7 @@

Latest Episodes

{% if item.poster %}
{% endif %}
diff --git a/_sass/events.scss b/_sass/events.scss index 5bdec18d9c62..248a2d613230 100644 --- a/_sass/events.scss +++ b/_sass/events.scss @@ -260,6 +260,7 @@ .episode-info { display: flex; + justify-content: space-between; span { padding-left: 5px; padding-right: 5px; From db42fd4fd6626fc140c9060c79416c6039793e94 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Fri, 22 Oct 2021 10:58:41 -0300 Subject: [PATCH 17/20] [PYT-634] added links to video in episodes --- _events/episode_1.md | 1 + _events/episode_10.md | 1 + _events/episode_11.md | 1 + _events/episode_12.md | 1 + _events/episode_13.md | 1 + _events/episode_14.md | 1 + _events/episode_15.md | 1 + _events/episode_16.md | 1 + _events/episode_17.md | 1 + _events/episode_18.md | 1 + _events/episode_19.md | 1 + _events/episode_2.md | 1 + _events/episode_20.md | 2 +- _events/episode_3.md | 1 + _events/episode_4.md | 1 + _events/episode_5.md | 1 + _events/episode_6.md | 1 + _events/episode_7.md | 1 + _events/episode_8.md | 1 + _events/episode_9.md | 1 + _includes/latest_episodes.html | 2 +- _includes/upcoming_episodes.html | 4 ++-- 22 files changed, 23 insertions(+), 4 deletions(-) diff --git a/_events/episode_1.md b/_events/episode_1.md index 633f5dfa60ae..29806278c97c 100644 --- a/_events/episode_1.md +++ b/_events/episode_1.md @@ -6,4 +6,5 @@ company: TorchDrift date: May 19, 2021 time: 1 pM PST poster: https://assets.pytorch.org/pted2021/posters/I3.png +video: https://www.youtube.com/watch?v=rV5BhoKILoE --- diff --git a/_events/episode_10.md b/_events/episode_10.md index c9cbd975b535..ce232d6ef4ac 100644 --- a/_events/episode_10.md +++ b/_events/episode_10.md @@ -6,4 +6,5 @@ company: TorchStudio date: July 21, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/F4.png +video: https://www.youtube.com/watch?v=2YZRw2BF8Gw --- diff --git a/_events/episode_11.md b/_events/episode_11.md index 6027d756afbf..148837879c4e 100644 --- a/_events/episode_11.md +++ b/_events/episode_11.md @@ -6,4 +6,5 @@ company: PyTorch Lightning date: July 28, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/E4.png +video: https://www.youtube.com/watch?v=A1bkh4gNDJA --- diff --git a/_events/episode_12.md b/_events/episode_12.md index 74647c014c39..1821c62e1975 100644 --- a/_events/episode_12.md +++ b/_events/episode_12.md @@ -7,4 +7,5 @@ date: August 4, 2021 time: 1PM PST poster: https://assets.pytorch.org/pted2021/posters/C2.png link: https://www.youtube.com/pytorch +video: https://www.youtube.com/watch?v=QIX9b9EAZOY --- diff --git a/_events/episode_13.md b/_events/episode_13.md index 8500bf29e8f1..b4b24783c9dc 100644 --- a/_events/episode_13.md +++ b/_events/episode_13.md @@ -7,4 +7,5 @@ date: August 11, 2021 time: 1PM PST poster: https://assets.pytorch.org/pted2021/posters/H6.png link: https://www.youtube.com/pytorch +video: https://www.youtube.com/watch?v=m6ouC0XMYnc --- diff --git a/_events/episode_14.md b/_events/episode_14.md index dfc9be18a5c6..4bec8f2b7fcf 100644 --- a/_events/episode_14.md +++ b/_events/episode_14.md @@ -7,4 +7,5 @@ date: August 17, 2021 time: 9AM PST poster: https://assets.pytorch.org/pted2021/posters/C7.png link: https://www.youtube.com/pytorch +video: https://www.youtube.com/watch?v=Ge5T6eZ2WY4 --- diff --git a/_events/episode_15.md b/_events/episode_15.md index 60c98e77b928..86e1ce3b911c 100644 --- a/_events/episode_15.md +++ b/_events/episode_15.md @@ -7,4 +7,5 @@ date: August 25, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/K1.png link: https://assets.pytorch.org/pted2021/posters/K1.png +video: https://www.youtube.com/watch?v=-4kOxux_XSQ --- diff --git a/_events/episode_16.md b/_events/episode_16.md index b06e598f8c7e..9e382bfc76c2 100644 --- a/_events/episode_16.md +++ b/_events/episode_16.md @@ -7,4 +7,5 @@ date: September 1, 2021 time: 9AM PST poster: https://assets.pytorch.org/pted2021/posters/H8.png link: https://www.youtube.com/pytorch +video: https://www.youtube.com/watch?v=tHYgd7aP8m0 --- diff --git a/_events/episode_17.md b/_events/episode_17.md index 23908836e355..2f9ee644c9bf 100644 --- a/_events/episode_17.md +++ b/_events/episode_17.md @@ -6,4 +6,5 @@ company: Catalyst date: September 8, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/K2.png +video: https://www.youtube.com/watch?v=GLdLz27GoLs --- diff --git a/_events/episode_18.md b/_events/episode_18.md index 08f3b0ee910d..3ac7d9b7b375 100644 --- a/_events/episode_18.md +++ b/_events/episode_18.md @@ -6,4 +6,5 @@ company: PyTorch Ignite date: September 15, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/G4.png +video: https://www.youtube.com/watch?v=vJqdgmTzo7E --- diff --git a/_events/episode_19.md b/_events/episode_19.md index 0c7c35e89e9f..ec7e94dff3e5 100644 --- a/_events/episode_19.md +++ b/_events/episode_19.md @@ -6,4 +6,5 @@ company: Qualcomm date: September 22, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/D4.png +video: https://www.youtube.com/watch?v=1Q3I4OKU29I --- diff --git a/_events/episode_2.md b/_events/episode_2.md index 45e52ef72ce7..8cbcb0bdb2a7 100644 --- a/_events/episode_2.md +++ b/_events/episode_2.md @@ -6,4 +6,5 @@ company: HuggingFace date: May 26, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/C3.png +video: https://www.youtube.com/watch?v=wE3bk7JaH4E --- diff --git a/_events/episode_20.md b/_events/episode_20.md index 31b6400c8d0b..4cb43daa48d3 100644 --- a/_events/episode_20.md +++ b/_events/episode_20.md @@ -6,5 +6,5 @@ company: PyTorch Monogenic ConvNet Layer date: September 29, 2021 time: 9 AM PST poster: https://assets.pytorch.org/pted2021/posters/B7.png -video: https://pytorch.org +video: https://www.youtube.com/watch?v=nIGjvxaE7jo --- diff --git a/_events/episode_3.md b/_events/episode_3.md index 0eacd7625e60..34ad7432ce2a 100644 --- a/_events/episode_3.md +++ b/_events/episode_3.md @@ -6,4 +6,5 @@ company: AutoDesk date: June 2, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/A1.png +video: https://www.youtube.com/watch?v=LBOIxA5sg2A --- diff --git a/_events/episode_4.md b/_events/episode_4.md index 2feca0bc1425..0333d0e6b6d8 100644 --- a/_events/episode_4.md +++ b/_events/episode_4.md @@ -6,4 +6,5 @@ company: TorchIO date: June 9, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/B7.png +video: https://www.youtube.com/watch?v=UEUVSw5-M9M --- diff --git a/_events/episode_5.md b/_events/episode_5.md index 8a7813ffed3f..21f9946084c0 100644 --- a/_events/episode_5.md +++ b/_events/episode_5.md @@ -6,4 +6,5 @@ company: PyTorchTS date: June 16, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/A2.png +video: https://www.youtube.com/watch?v=-Ib0lFlbDXs --- diff --git a/_events/episode_6.md b/_events/episode_6.md index a1c264b48cbe..47471c2c666c 100644 --- a/_events/episode_6.md +++ b/_events/episode_6.md @@ -6,4 +6,5 @@ company: Rlstructures date: June 23, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/D2.png +video: https://www.youtube.com/watch?v=ZjwwMoVLkXQ --- diff --git a/_events/episode_7.md b/_events/episode_7.md index 01740105ca92..9b97ee7c0fbf 100644 --- a/_events/episode_7.md +++ b/_events/episode_7.md @@ -6,4 +6,5 @@ company: Ray date: June 30, 2021 time: 1 PM PST poster: https://assets.pytorch.org/pted2021/posters/H1.png +video: https://www.youtube.com/watch?v=3EOXDJPzSsY --- diff --git a/_events/episode_8.md b/_events/episode_8.md index fa5ec0d87eda..cc871c45e38d 100644 --- a/_events/episode_8.md +++ b/_events/episode_8.md @@ -6,4 +6,5 @@ company: Pystiche date: July 7, 2021 time: 1 PM PST poster: https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbDB6Z1VhLUZqWngyT1ZHQXRuaEtnVjV6WkRQd3xBQ3Jtc0tsN0IxU1VfRW9aOExIYXBrNTAxWklxbWw5WnZiTXpyLUxPamcyT2NrUFpNYXF4Z1pNLWJndFEzR2FsMjBRY1lzQlo1Z1prYjFqZ1hsZFFZVjRnOFRma0ZMUWxsMUF6VHBtMjNHMUFsZjZpOGJPY1BoNA&q=https%3A%2F%2Fassets.pytorch.org%2Fpted2021%2Fposters%2FD7.png +video: https://www.youtube.com/watch?v=lCOjSiHnQwU --- diff --git a/_events/episode_9.md b/_events/episode_9.md index 12ce9abb0e08..cdf5be3cbcb7 100644 --- a/_events/episode_9.md +++ b/_events/episode_9.md @@ -5,4 +5,5 @@ guest: Seth Juarez and Maryanne Wachter company: PyLadies date: July 14, 2021 time: 1 PM PST +video: https://www.youtube.com/watch?v=rIwxrb89MNc --- diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index c2a71b264695..53258eb1777f 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -20,7 +20,7 @@

Latest Episodes

- {% if item.poster %} + {% if item.poster or item.video %}
  • Poster
  • Watch
  • diff --git a/_includes/upcoming_episodes.html b/_includes/upcoming_episodes.html index 05ace9158040..6a2fc529d8e2 100644 --- a/_includes/upcoming_episodes.html +++ b/_includes/upcoming_episodes.html @@ -1,4 +1,4 @@ -

    Upcoming Episodes

    + From 7b2f17a520fe80ba7a64bbc4e302957cd739f855 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Fri, 22 Oct 2021 11:09:05 -0300 Subject: [PATCH 18/20] [PYT-634] conditional correction on CTA display --- _includes/latest_episodes.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/_includes/latest_episodes.html b/_includes/latest_episodes.html index 53258eb1777f..ae0f982721a8 100644 --- a/_includes/latest_episodes.html +++ b/_includes/latest_episodes.html @@ -20,12 +20,14 @@

    Latest Episodes

- {% if item.poster or item.video %} -
    -
  • Poster
  • +
      + {% if item.poster %} +
    • Poster
    • + {% endif %} + {% if item.video %}
    • Watch
    • + {% endif %}
    - {% endif %}
{% endif %} From 00bd981c8f50a7f867877baa019ae4ccd88f3ca6 Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Mon, 25 Oct 2021 18:31:32 -0300 Subject: [PATCH 19/20] deleted episode 27 --- _events/episode_27.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 _events/episode_27.md diff --git a/_events/episode_27.md b/_events/episode_27.md deleted file mode 100644 index f279b3e43d7a..000000000000 --- a/_events/episode_27.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -category: live-stream -title: Episode 27 -guest: Dr. Ariel Biller -company: "The Fundamentals of MLOps for R&D: Orchestration, Automation, Reproducibility" -date: December 8, 2021 -time: 9 AM PST -poster: https://assets.pytorch.org/pted2021/posters/I1.png ---- From 37b14f266ac0367e247eb29ba5cad81a1f82865d Mon Sep 17 00:00:00 2001 From: arielmoguillansky Date: Mon, 25 Oct 2021 18:36:39 -0300 Subject: [PATCH 20/20] pull from pyt fork --- ...10-21-pytorch-1.10-new-library-releases.md | 147 ++++++++---------- 1 file changed, 69 insertions(+), 78 deletions(-) diff --git a/_posts/2021-10-21-pytorch-1.10-new-library-releases.md b/_posts/2021-10-21-pytorch-1.10-new-library-releases.md index 755ff7049d96..811abbb0813b 100644 --- a/_posts/2021-10-21-pytorch-1.10-new-library-releases.md +++ b/_posts/2021-10-21-pytorch-1.10-new-library-releases.md @@ -8,85 +8,86 @@ Today, we are announcing a number of new features and improvements to PyTorch li Some highlights include: -* **TorchX** - a new SDK for quickly building and deploying ML applications from research & development to production. +* **TorchX** - a new SDK for quickly building and deploying ML applications from research & development to production. * **TorchAudio** - Added text-to-speech pipeline, self-supervised model support, multi-channel support and MVDR beamforming module, RNN transducer (RNNT) loss function, and batch and filterbank support to `lfilter` function. See the TorchAudio release notes [here](https://github.com/pytorch/audio/releases). * **TorchVision** - Added new RegNet and EfficientNet models, FX based feature extraction added to utilities, two new Automatic Augmentation techniques: Rand Augment and Trivial Augment, and updated training recipes. See the TorchVision release notes [here](https://github.com/pytorch/vision/releases). # Introducing TorchX - -TorchX is a new SDK for quickly building and deploying ML applications from research & development to production. It offers various builtin components that encode MLOps best practices and make advanced features like distributed training and hyperparameter optimization accessible to all. +TorchX is a new SDK for quickly building and deploying ML applications from research & development to production. It offers various builtin components that encode MLOps best practices and make advanced features like distributed training and hyperparameter optimization accessible to all. Users can get started with TorchX 0.1 with no added setup cost since it supports popular ML schedulers and pipeline orchestrators that are already widely adopted and deployed in production. No two production environments are the same. To comply with various use cases, TorchX’s core APIs allow tons of customization at well-defined extension points so that even the most unique applications can be serviced without customizing the whole vertical stack. -Read the [documentation](https://pytorch.org/torchx) for more details and try out this feature using this quickstart [tutorial](https://pytorch.org/torchx/latest/examples/hello_world.html). +Read the [documentation](https://pytorch.org/torchx) for more details and try out this feature using this quickstart [tutorial](https://pytorch.org/torchx/latest/quickstart.html). # TorchAudio 0.10 -### (Stable) Text-to-speech pipeline +### [Beta] Text-to-speech pipeline TorchAudio now adds the Tacotron2 model and pretrained weights. It is now possible to build a text-to-speech pipeline with existing vocoder implementations like WaveRNN and Griffin-Lim. Building a TTS pipeline requires matching data processing and pretrained weights, which are often non-trivial to users. So TorchAudio introduces a bundle API so that constructing pipelines for specific pretrained weights is easy. The following example illustrates this. ```python -import torchaudio - -bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_CHAR_LJSPEECH - -# Build text processor, Tacotron2 and vocoder (WaveRNN) model -processor = bundle.get_text_preprocessor() -tacotron2 = bundle.get_tacotron2() +>>> import torchaudio +>>> +>>> bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_CHAR_LJSPEECH +>>> +>>> # Build text processor, Tacotron2 and vocoder (WaveRNN) model +>>> processor = bundle.get_text_preprocessor() +>>> tacotron2 = bundle.get_tacotron2() Downloading: 100%|███████████████████████████████| 107M/107M [00:01<00:00, 87.9MB/s] -vocoder = bundle.get_vocoder() +>>> vocoder = bundle.get_vocoder() Downloading: 100%|███████████████████████████████| 16.7M/16.7M [00:00<00:00, 78.1MB/s] +>>> +>>> text = "Hello World!" +>>> +>>> # Encode text +>>> input, lengths = processor(text) +>>> +>>> # Generate (mel-scale) spectrogram +>>> specgram, lengths, _ = tacotron2.infer(input, lengths) +>>> +>>> # Convert spectrogram to waveform +>>> waveforms, lengths = vocoder(specgram, lengths) +>>> +>>> # Save audio +>>> torchaudio.save('hello-world.wav', waveforms, vocoder.sample_rate) -text = "Hello World!" - -# Encode text -input, lengths = processor(text) - -# Generate (mel-scale) spectrogram -specgram, lengths, _ = tacotron2.infer(input, lengths) - -# Convert spectrogram to waveform -waveforms, lengths = vocoder(specgram, lengths) - -# Save audio -torchaudio.save('hello-world.wav', waveforms, vocoder.sample_rate) ``` -For the details of this API please refer to [the documentation](https://pytorch.org/audio/0.10.0/pipelines#tacotron2-text-to-speech). You can also try this from [the tutorial](https://pytorch.org/tutorials/intermediate/text_to_speech_with_torchaudio_tutorial.html). +For the details of this API please refer to [the documentation](https://pytorch.org/audio/0.10.0/pipelines#tacotron2-text-to-speech). You can also try this from [the tutorial](https://pytorch.org/tutorials/intermediate/text_to_speech_with_torchaudio.html). ### (Beta) Self-Supervised Model Support TorchAudio added HuBERT model architecture and pre-trained weight support for wav2vec 2.0 and HuBERT. HuBERT and wav2vec 2.0 are novel ways for audio representation learning and they yield high accuracy when fine-tuned on downstream tasks. These models can serve as baseline in future research, therefore, TorchAudio is providing a simple way to run the model. Similar to the TTS pipeline, the pretrained weights and associated information, such as expected sample rates and output class labels (for fine-tuned weights) are put together as a bundle, so that they can be used to build pipelines. The following example illustrates this. ```python -import torchaudio - -bundle = torchaudio.pipelines.HUBERT_ASR_LARGE - -# Build the model and load pretrained weight. -model = bundle.get_model() +>>> import torchaudio +>>> +>>> bundle = torchaudio.pipelines.HUBERT_ASR_LARGE +>>> +>>> # Build the model and load pretrained weight. +>>> model = bundle.get_model() Downloading: 100%|███████████████████████████████| 1.18G/1.18G [00:17<00:00, 73.8MB/s] -# Check the corresponding labels of the output. -labels = bundle.get_labels() -print(labels) +>>> # Check the corresponding labels of the output. +>>> labels = bundle.get_labels() +>>> print(labels) ('', '', '', '', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z') - - # Infer the label probability distribution -waveform, sample_rate = torchaudio.load(hello-world.wav') - -emissions, _ = model(waveform) - -# Pass emission to (hypothetical) decoder -transcripts = ctc_decode(emissions, labels) -print(transcripts[0]) +>>> +>>> # Infer the label probability distribution +>>> waveform, sample_rate = torchaudio.load(hello-world.wav') +>>> +>>> emissions, _ = model(waveform) +>>> +>>> # Pass emission to (hypothetical) decoder +>>> transcripts = ctc_decode(emissions, labels) +>>> print(transcripts[0]) HELLO WORLD + ``` -Please refer to the [documentation](https://pytorch.org/audio/0.10.0/pipelines#wav2vec-2-0-hubert-representation-learning) for more details and try out this feature using [tutorial, Google Colab, or examples]. +Please refer to the [documentation](https://pytorch.org/audio/0.10.0/pipelines#wav2vec-2-0-hubert-representation-learning) for more details and try out this feature using this [tutorial](https://pytorch.org/tutorials/intermediate/speech_command_recognition_with_torchaudio_tutorial.html). ### (Beta) Multi-channel support and MVDR beamforming Far-field speech recognition is a more challenging task compared to near-field recognition. Multi-channel methods such as beamforming help reduce the noises and enhance the target speech. @@ -94,26 +95,25 @@ Far-field speech recognition is a more challenging task compared to near-field r TorchAudio now adds support for differentiable Minimum Variance Distortionless Response (MVDR) beamforming on multi-channel audio using Time-Frequency masks. Researchers can easily assemble it with any multi-channel ASR pipeline. There are three solutions (ref_channel, stv_evd, stv_power) and it supports single-channel and multi-channel (perform average in the method) masks. It provides an online option that recursively updates the parameters for streaming audio. We also provide a tutorial on how to apply MVDR beamforming to the multi-channel audio in the example directory. ```python -from torchaudio.transforms import MVDR, Spectrogram, InverseSpectrogram - -# Load the multi-channel noisy audio -waveform_mix, sr = torchaudio.load('mix.wav') -# Initialize the stft and istft modules -stft = Spectrogram(n_fft=1024, hop_length=256, return_complex=True, power=None) -istft = InverseSpectrogram(n_fft=1024, hop_length=256) -# Get the noisy spectrogram -specgram_mix = stft(waveform_mix) -# Get the Time-Frequency mask via machine learning models -mask = model(waveform) -# Initialize the MVDR module -mvdr = MVDR(ref_channel=0, solution=”ref_channel”, multi_mask=False) -# Apply MVDR beamforming -specgram_enhanced = mvdr(specgram_mix, mask) -# Get the enhanced waveform via iSTFT -waveform_enhanced = istft(specgram_enhanced, length=waveform.shape[-1]) +>>> from torchaudio.transforms import MVDR, Spectrogram, InverseSpectrogram +>>> +>>> # Load the multi-channel noisy audio +>>> waveform_mix, sr = torchaudio.load('mix.wav') +>>> # Initialize the stft and istft modules +>>> stft = Spectrogram(n_fft=1024, hop_length=256, return_complex=True, power=None) +>>> istft = InverseSpectrogram(n_fft=1024, hop_length=256) +>>> # Get the noisy spectrogram +>>> specgram_mix = stft(waveform_mix) +>>> # Get the Time-Frequency mask via machine learning models +>>> mask = model(waveform) +>>> # Initialize the MVDR module +>>> mvdr = MVDR(ref_channel=0, solution=”ref_channel”, multi_mask=False) +>>> # Apply MVDR beamforming +>>> specgram_enhanced = mvdr(specgram_mix, mask) +>>> # Get the enhanced waveform via iSTFT +>>> waveform_enhanced = istft(specgram_enhanced, length=waveform.shape[-1]) ``` - -Please refer to the [documentation](https://pytorch.org/audio/0.10.0/transforms.html#mvdr) f for more details and try out this feature using the [MVDR tutorial](https://github.com/pytorch/audio/blob/main/examples/beamforming/MVDR_tutorial.ipynb). +Please refer to the [documentation](https://pytorch.org/audio/0.10.0/transforms.html#mvdr) for more details and try out this feature using the [MVDR tutorial](https://github.com/pytorch/audio/blob/main/examples/beamforming/MVDR_tutorial.ipynb). ### (Beta) RNN Transducer Loss The RNN transducer (RNNT) loss is part of the RNN transducer pipeline, which is a popular architecture for speech recognition tasks. Recently it has gotten attention for being used in a streaming setting, and has also achieved state-of-the-art WER for the LibriSpeech benchmark. @@ -133,10 +133,6 @@ Please refer to the [documentation](https://pytorch.org/audio/main/prototype.htm ### GPU Build GPU builds that support custom CUDA kernels in TorchAudio, like the one being used for RNN transducer loss, have been added. Following this change, TorchAudio’s binary distribution now includes CPU-only versions and CUDA-enabled versions. To use CUDA-enabled binaries, PyTorch also needs to be compatible with CUDA. -### (Prototype) RNN Transducer Loss -The RNN transducer loss is used in training RNN transducer models, which is a popular architecture for speech recognition tasks. The prototype loss in torchaudio currently supports autograd, torchscript, float16 and float32, and can also be run on both CPU and CUDA. For more details, please refer to [the documentation](https://pytorch.org/audio/master/rnnt_loss.html). - - # TorchVision 0.11 ### (Stable) New Models @@ -158,8 +154,7 @@ efficientnet = models.efficientnet_b0(pretrained=True) efficientnet.eval() predictions = efficientnet(x) ``` - -See the full list of new models on the [torchvision.models](https://pytorch.org/vision/master/models.html) documentation page +See the full list of new models on the [torchvision.models](https://pytorch.org/vision/master/models.html) documentation page. We would like to thank Ross Wightman and Luke Melas-Kyriazi for contributing the weights of the EfficientNet variants. @@ -186,11 +181,10 @@ intermediate_outputs = model2(x) print(intermediate_outputs['layer4'].shape) ``` - We would like to thank Alexander Soare for developing this utility. ### (Stable) New Data Augmentations -Two new Automatic Augmentation techniques were added: [Rand Augment](https://arxiv.org/abs/1909.13719) and [Trivial Augment](https://arxiv.org/abs/2103.10158). They apply a series of transformations on the original data to enhance them and to boost the performance of the models. The new techniques build on top of the previously added [AutoAugment](https://github.com/pytorch/vision/pull/3123) and focus on simplifying the approach, reducing the search space for the optimal policy and improving the performance gain in terms of accuracy. These techniques enable users to reproduce recipes to achieve state-of-the-art performance on the offered models. Additionally, it enables users to apply these techniques in order to do transfer learning and achieve optimal accuracy on new datasets. +Two new Automatic Augmentation techniques were added: [RandAugment](https://arxiv.org/abs/1909.13719) and [Trivial Augment](https://arxiv.org/abs/2103.10158). They apply a series of transformations on the original data to enhance them and to boost the performance of the models. The new techniques build on top of the previously added [AutoAugment](https://github.com/pytorch/vision/pull/3123) and focus on simplifying the approach, reducing the search space for the optimal policy and improving the performance gain in terms of accuracy. These techniques enable users to reproduce recipes to achieve state-of-the-art performance on the offered models. Additionally, it enables users to apply these techniques in order to do transfer learning and achieve optimal accuracy on new datasets. Both methods can be used as drop-in replacement of the AutoAugment technique as seen below: @@ -206,7 +200,6 @@ transforms.Resize(256), transforms.RandAugment(), # transforms.TrivialAugmentWide() transforms.ToTensor()]) ``` - Read the [automatic augmentation transforms](https://pytorch.org/vision/master/transforms.html#automatic-augmentation-transforms) for more details. We would like to thank Samuel G. Müller for contributing to Trivial Augment and for his help on refactoring the AA package. @@ -214,9 +207,7 @@ We would like to thank Samuel G. Müller for contributing to Trivial Augment and ### Updated Training Recipes We have updated our training reference scripts to add support for Exponential Moving Average, Label Smoothing, Learning-Rate Warmup, [Mixup](https://arxiv.org/abs/1710.09412), [Cutmix](https://arxiv.org/abs/1905.04899) and other [SOTA primitives](https://github.com/pytorch/vision/issues/3911). The above enabled us to improve the classification Acc@1 of some pre-trained models by over 4 points. A major update of the existing pre-trained weights is expected in the next release. - -Thanks for reading. If you’re interested in these updates and want to join the PyTorch community, we encourage you to join [the discussion](https://discuss.pytorch.org/) forums and [open GitHub issues](https://github.com/pytorch/pytorch/issues). To get the latest news from PyTorch, follow us on [Facebook](https://www.facebook.com/pytorch/), [Twitter](https://twitter.com/PyTorch), [Medium](https://medium.com/pytorch), [YouTube](https://www.youtube.com/pytorch) or [LinkedIn](https://www.linkedin.com/company/pytorch). +Thanks for reading. If you’re interested in these updates and want to join the PyTorch community, we encourage you to join [the discussion](https://discuss.pytorch.org/) forums and [open GitHub issues](https://github.com/pytorch/pytorch/issues). To get the latest news from PyTorch, follow us on [Twitter](https://twitter.com/PyTorch), [Medium](https://medium.com/pytorch), [YouTube](https://www.youtube.com/pytorch) and [LinkedIn](https://www.linkedin.com/company/pytorch). Cheers! - --Team PyTorch +Team PyTorch