├── .gitignore ├── .gitattributes ├── AUTHORS ├── COPYRIGHT ├── rsrc ├── packages │ ├── win │ │ └── online-illustrator │ │ │ └── online-illustrator.ccp │ └── mac │ │ ├── offline-acrobat │ │ └── ngl-preconditioning-data.json │ │ └── lan-illustrator │ │ └── ngl-preconditioning-data.json └── files │ ├── QnJpZGdlMXt9MjAxODA3MjAwNA-OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx-80.operatingconfig │ ├── SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx-80.operatingconfig │ ├── UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0-80.operatingconfig │ └── QnJpZGdlMXt9MjAxODA3MjAwNA-ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0-80.operatingconfig ├── .github ├── PULL_REQUEST_TEMPLATE.md ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── CONTRIBUTING.md └── workflows │ ├── ci.yml │ └── publish.yml ├── Cargo.toml ├── rustfmt.toml ├── src ├── main.rs ├── cli.rs ├── utilities.rs ├── descriptions.rs └── types.rs ├── LICENSE ├── CODE_OF_CONDUCT.md ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.cargo/ 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ccp linguist-detectable=false 2 | *.rs linguist-detectable=true 3 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Authors ordered by first contribution 2 | 3 | Daniel Brotsky 4 | -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | Copyright 2020 Adobe 2 | 3 | Adobe holds the copyright for all the files found in this repository. 4 | 5 | See the LICENSE file for licensing information. 6 | -------------------------------------------------------------------------------- /rsrc/packages/win/online-illustrator/online-illustrator.ccp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adobe/adobe-license-decoder.rs/master/rsrc/packages/win/online-illustrator/online-illustrator.ccp -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | 4 | ## Related Issue 5 | 6 | 7 | ## Tasks 8 | 9 | 10 | - [ ] I have signed the [CLA](http://adobe.github.io/cla.html). 11 | - [ ] I have written tests and verified that they fail without my change. 12 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "adobe_license_decoder" 3 | version = "1.4.2" 4 | authors = ["Daniel Brotsky "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | structopt = { version = "0.3.21", features = ["wrap_help"] } 9 | serde_json = "1.0.59" 10 | base64 = "0.13.0" 11 | shellexpand = "2.0.0" 12 | chrono = "0.4.19" 13 | glob = "0.3.0" 14 | keyring = "1.0.0" 15 | eyre = "0.6.5" 16 | visdom = "0.4.0" 17 | zip = "0.5.11" 18 | 19 | [[bin]] 20 | name = "adobe-license-decoder" 21 | path = "src/main.rs" -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Why do you need this feature? Please describe.** 11 | A clear and concise description of what's missing. For example: I need to know ... about my licenses, but the tool doesn't tell me that. 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context about the feature request here. 21 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | # allow unstable features is only allowed in nightly builds 2 | #unstable_features = true 3 | 4 | # set the options that control other options 5 | max_width = 90 6 | #width_heuristics = "Max" 7 | 8 | # alphabetic list of non-default options 9 | # (unstable ones are commented out) 10 | #combine_control_expr = false 11 | #empty_item_single_line = false 12 | fn_args_layout = "Compressed" 13 | #format_code_in_doc_comments = true 14 | #force_multiline_blocks = true 15 | #format_strings = true 16 | #match_block_trailing_comma = true 17 | #merge_imports = true 18 | #normalize_comments = true 19 | #overflow_delimited_expr = true 20 | #trailing_comma = "Vertical" 21 | use_field_init_shorthand = true 22 | #wrap_comments = true 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. the command line used: `adobe-license-decoder ...` 16 | 2. the working directory (if relevant) 17 | 3. the output produced (provide excerpt or attach a file) 18 | 4. a listing of your OperatingConfigs directory or package directory (if relevant) 19 | **Security note**: do *not* attach license files. 20 | 21 | **Observed behavior** 22 | A clear and concise description of what you expected to happen. 23 | 24 | **Expected behavior** 25 | A clear and concise description of what you expected to happen. 26 | 27 | **Operating System** 28 | - Windows or Mac 29 | - OS version 30 | 31 | **Additional context** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 Adobe 3 | All Rights Reserved. 4 | 5 | NOTICE: Adobe permits you to use, modify, and distribute this file in 6 | accordance with the terms of the Adobe license agreement accompanying 7 | it. 8 | */ 9 | mod cli; 10 | mod descriptions; 11 | mod types; 12 | mod utilities; 13 | 14 | use cli::{Opt, DEFAULT_CONFIG_DIR}; 15 | use descriptions::{describe_directory, describe_file}; 16 | use eyre::Result; 17 | use structopt::StructOpt; 18 | use utilities::FileInfo; 19 | 20 | fn main() -> Result<()> { 21 | let opt: Opt = Opt::from_args(); 22 | if let Ok(info) = FileInfo::from_path(&opt.path) { 23 | if info.is_directory { 24 | describe_directory(&info, opt.verbose)?; 25 | } else { 26 | describe_file(&info, opt.verbose)?; 27 | } 28 | } else { 29 | if opt.path.eq_ignore_ascii_case(DEFAULT_CONFIG_DIR) { 30 | eprintln!("Error: There are no licenses installed on this computer") 31 | } else { 32 | eprintln!("Error: No such directory: {}", &opt.path) 33 | } 34 | std::process::exit(1); 35 | }; 36 | Ok(()) 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright 2020 Adobe. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thanks for choosing to contribute! 4 | 5 | The following are a set of guidelines to follow when contributing to this project. 6 | 7 | ## Code Of Conduct 8 | 9 | This project adheres to the Adobe [code of conduct](../CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [Grp-opensourceoffice@adobe.com](mailto:Grp-opensourceoffice@adobe.com). 10 | 11 | ## Contributor License Agreement 12 | 13 | All third-party contributions to this project must be accompanied by a signed contributor license. This gives Adobe permission to redistribute your contributions as part of the project. Sign our [CLA](http://adobe.github.io/cla.html). You only need to submit an Adobe CLA one time, so if you have submitted one previously, you are good to go! 14 | 15 | ## Code Reviews 16 | 17 | All submissions should come in the form of pull requests and need to be reviewed by project committers. Read [GitHub's pull request documentation](https://help.github.com/articles/about-pull-requests/) for more information on sending pull requests. 18 | 19 | Lastly, please follow the [pull request template](PULL_REQUEST_TEMPLATE.md) when submitting a pull request! 20 | -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 Adobe 3 | All Rights Reserved. 4 | 5 | NOTICE: Adobe permits you to use, modify, and distribute this file in 6 | accordance with the terms of the Adobe license agreement accompanying 7 | it. 8 | */ 9 | use structopt::StructOpt; 10 | 11 | pub const DEFAULT_CONFIG_DIR: &str = if cfg!(target_os = "macos") { 12 | "/Library/Application Support/Adobe/OperatingConfigs" 13 | } else if cfg!(target_os = "windows") { 14 | "${ProgramData}/Adobe/OperatingConfigs" 15 | } else { 16 | "This module can only run on MacOS or Windows" 17 | }; 18 | 19 | #[derive(Debug, StructOpt)] 20 | /// Adobe License Decoder 21 | /// 22 | /// Decodes all the installed license files on the current machine. 23 | /// If you specify a directory, it will decode all the license files 24 | /// or preconditioning files found in that directory. 25 | pub struct Opt { 26 | /// Output additional data about each package (e.g., census codes). 27 | /// Specify this option more than once (-vv) to look for local activations 28 | /// of each installed license being decoded. 29 | #[structopt(short, long, parse(from_occurrences))] 30 | pub verbose: i32, 31 | 32 | /// path to directory or file to decode 33 | #[structopt(default_value = DEFAULT_CONFIG_DIR)] 34 | pub path: String, 35 | } 36 | 37 | #[cfg(test)] 38 | mod tests { 39 | use super::DEFAULT_CONFIG_DIR; 40 | use crate::utilities::FileInfo; 41 | 42 | #[test] 43 | fn test_os() { 44 | let config_path = String::from(DEFAULT_CONFIG_DIR); 45 | assert!( 46 | config_path.ends_with("/Adobe/OperatingConfigs"), 47 | "This module can only be compiled on Mac or Win" 48 | ); 49 | let app_support_path = config_path.trim_end_matches("/Adobe/OperatingConfigs"); 50 | assert!( 51 | FileInfo::from_path(app_support_path).is_ok(), 52 | "Application Support path is not present" 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_dispatch: 3 | pull_request: 4 | push: 5 | branches: 6 | - master 7 | 8 | name: Rust CI (stable) 9 | 10 | jobs: 11 | ci: 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | matrix: 15 | arch: [x86_64-apple-darwin, aarch64-apple-darwin, x86_64-pc-windows-msvc] 16 | include: 17 | - arch: x86_64-pc-windows-msvc 18 | os: windows-2022 19 | - arch: x86_64-apple-darwin 20 | os: macos-11 21 | - arch: aarch64-apple-darwin 22 | os: macos-11 23 | 24 | steps: 25 | - name: upgrade XCode 26 | uses: maxim-lobanov/setup-xcode@v1 27 | if: ${{ matrix.os == 'macos-11' }} 28 | with: 29 | xcode-version: latest-stable 30 | 31 | - name: XCode build target to aarch64-apple-darwin 32 | run: | 33 | echo SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) >> $GITHUB_ENV 34 | echo MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) >> $GITHUB_ENV 35 | if: ${{ matrix.arch == 'aarch64-apple-darwin' }} 36 | 37 | - name: fetch head 38 | uses: actions/checkout@v2 39 | 40 | - name: install Rust toolchain 41 | uses: actions-rs/toolchain@v1 42 | with: 43 | profile: minimal 44 | target: ${{ matrix.arch }} 45 | toolchain: stable 46 | components: rustfmt, clippy 47 | 48 | - name: Format check 49 | uses: actions-rs/cargo@v1 50 | with: 51 | command: fmt 52 | args: --all -- --check 53 | 54 | - name: Clippy check 55 | uses: actions-rs/cargo@v1 56 | with: 57 | command: clippy 58 | args: -- -D warnings 59 | 60 | - name: Build debug 61 | uses: actions-rs/cargo@v1 62 | with: 63 | command: build 64 | args: --target ${{ matrix.arch }} 65 | 66 | - name: Test 67 | uses: actions-rs/cargo@v1 68 | if: ${{ matrix.arch != 'aarch64-apple-darwin' }} 69 | with: 70 | command: test 71 | args: --target ${{ matrix.arch }} 72 | 73 | - name: Build release locked 74 | uses: actions-rs/cargo@v1 75 | with: 76 | command: build 77 | args: --target ${{ matrix.arch }} --release --locked 78 | 79 | - name: Upload executables 80 | uses: actions/upload-artifact@v2 81 | with: 82 | name: executables 83 | path: | 84 | target/**/adobe-license-decoder 85 | target/**/adobe-license-decoder.exe 86 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Adobe Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language. 18 | * Being respectful of differing viewpoints and experiences. 19 | * Gracefully accepting constructive criticism. 20 | * Focusing on what is best for the community. 21 | * Showing empathy towards other community members. 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances. 27 | * Trolling, insulting/derogatory comments, and personal or political attacks. 28 | * Public or private harassment. 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission. 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting. 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at Grp-opensourceoffice@adobe.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [http://contributor-covenant.org/version/1/4][version] 72 | 73 | [homepage]: http://contributor-covenant.org 74 | [version]: http://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | # This runs on new tags only. To trigger, create a tag and push it upstream. Do not manually create a release 2 | # in the Github UI 3 | # 4 | # Basic workflow: 5 | # 6 | # 1. Create release for tag 7 | # a. capture upload URl 8 | # 2. Run builds for all target architectures 9 | # 3. Zip executables so we preserve exec permissions and don't have to give the 10 | # binary files weird names 11 | # a. the zip filename contains version and architecture info 12 | # 4. Upload assets to release URL 13 | name: release 14 | 15 | on: 16 | push: 17 | tags: 18 | - 'v*' 19 | 20 | jobs: 21 | create-release: 22 | runs-on: ubuntu-22.04 23 | outputs: 24 | upload_url: ${{ steps.release.outputs.upload_url }} 25 | version: ${{ env.VERSION }} 26 | steps: 27 | - name: Get version from release tag 28 | shell: bash 29 | run: | 30 | echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV 31 | echo "version is: ${{ env.VERSION }}" 32 | - name: Create the release 33 | id: release 34 | uses: actions/create-release@v1 35 | env: 36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 37 | with: 38 | tag_name: ${{ env.VERSION }} 39 | release_name: Adobe License Decoder ${{ env.VERSION }} 40 | build-release: 41 | name: build-release 42 | needs: ['create-release'] 43 | runs-on: ${{ matrix.os }} 44 | strategy: 45 | matrix: 46 | arch: [x86_64-apple-darwin, aarch64-apple-darwin, x86_64-pc-windows-msvc] 47 | include: 48 | - arch: x86_64-pc-windows-msvc 49 | os: windows-2022 50 | exec: adobe-license-decoder.exe 51 | - arch: x86_64-apple-darwin 52 | os: macos-11 53 | exec: adobe-license-decoder 54 | - arch: aarch64-apple-darwin 55 | os: macos-11 56 | exec: adobe-license-decoder 57 | steps: 58 | - name: upgrade XCode 59 | uses: maxim-lobanov/setup-xcode@v1 60 | if: ${{ matrix.os == 'macos-11' }} 61 | with: 62 | xcode-version: latest-stable 63 | 64 | - name: XCode build target to aarch64-apple-darwin 65 | run: | 66 | echo SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) >> $GITHUB_ENV 67 | echo MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) >> $GITHUB_ENV 68 | if: ${{ matrix.arch == 'aarch64-apple-darwin' }} 69 | 70 | - name: fetch head 71 | uses: actions/checkout@v2 72 | 73 | - name: install Rust toolchain 74 | uses: actions-rs/toolchain@v1 75 | with: 76 | profile: minimal 77 | target: ${{ matrix.arch }} 78 | toolchain: stable 79 | 80 | - name: Build release locked 81 | uses: actions-rs/cargo@v1 82 | with: 83 | command: build 84 | args: --target ${{ matrix.arch }} --release --locked 85 | 86 | - name: Archive release 87 | shell: bash 88 | run: | 89 | distname=adobe-license-decoder-${{ needs.create-release.outputs.version }}-${{ matrix.arch }} 90 | mkdir dist 91 | cp target/${{ matrix.arch }}/release/${{ matrix.exec }} dist/ 92 | cd dist 93 | if [ "${{ matrix.os }}" = "windows-2022" ]; then 94 | 7z a "$distname.zip" ${{ matrix.exec }} 95 | echo "ASSET=$distname.zip" >> $GITHUB_ENV 96 | else 97 | tar czf "$distname.tar.gz" ${{ matrix.exec }} 98 | echo "ASSET=$distname.tar.gz" >> $GITHUB_ENV 99 | fi 100 | cd .. 101 | - name: Upload release archive 102 | uses: actions/upload-release-asset@v1.0.2 103 | env: 104 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 105 | with: 106 | upload_url: ${{ needs.create-release.outputs.upload_url }} 107 | asset_path: dist/${{ env.ASSET }} 108 | asset_name: ${{ env.ASSET }} 109 | asset_content_type: application/octet-stream 110 | -------------------------------------------------------------------------------- /src/utilities.rs: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 Adobe 3 | All Rights Reserved. 4 | 5 | NOTICE: Adobe permits you to use, modify, and distribute this file in 6 | accordance with the terms of the Adobe license agreement accompanying 7 | it. 8 | */ 9 | extern crate base64; 10 | extern crate chrono; 11 | extern crate shellexpand; 12 | 13 | use chrono::prelude::*; 14 | use eyre::{Result, WrapErr}; 15 | use serde_json::Value; 16 | use std::collections::HashMap; 17 | use std::fs::{metadata, File}; 18 | use std::path::Path; 19 | 20 | pub type JsonMap = HashMap; 21 | 22 | pub struct FileInfo { 23 | pub pathname: String, 24 | pub filename: String, 25 | pub name: String, 26 | pub extension: String, 27 | pub is_directory: bool, 28 | pub mod_date: String, 29 | } 30 | 31 | impl FileInfo { 32 | pub fn from_path(path: &str) -> Result { 33 | let path: String = shellexpand::full(path)?.into(); 34 | let info = metadata(&path)?; 35 | let path_object = Path::new(&path); 36 | let is_directory = info.is_dir(); 37 | let mod_date: DateTime = info.modified()?.into(); 38 | Ok(FileInfo { 39 | pathname: path.to_string(), 40 | filename: path_object 41 | .file_name() 42 | .unwrap_or_default() 43 | .to_string_lossy() 44 | .to_string(), 45 | name: path_object 46 | .file_stem() 47 | .unwrap_or_default() 48 | .to_string_lossy() 49 | .to_string(), 50 | extension: path_object 51 | .extension() 52 | .unwrap_or_default() 53 | .to_string_lossy() 54 | .to_string(), 55 | is_directory, 56 | mod_date: mod_date.format("%Y-%m-%d %H:%M:%S %Z").to_string(), 57 | }) 58 | } 59 | 60 | pub fn from_name_and_extension(name: &str, extension: &str) -> Result { 61 | let filename = format!("{}.{}", name, extension); 62 | Ok(FileInfo { 63 | pathname: filename.to_string(), 64 | filename, 65 | name: name.into(), 66 | extension: extension.into(), 67 | is_directory: false, 68 | mod_date: "Unknown".into(), 69 | }) 70 | } 71 | } 72 | 73 | pub fn u64decode(s: &str) -> Result { 74 | let bytes = base64::decode_config(s, base64::URL_SAFE_NO_PAD)?; 75 | String::from_utf8(bytes).wrap_err("Illegal payload encoding") 76 | } 77 | 78 | pub fn u64encode(s: &str) -> Result { 79 | Ok(base64::encode_config(s, base64::URL_SAFE_NO_PAD)) 80 | } 81 | 82 | pub fn json_from_base64(s: &str) -> Result { 83 | serde_json::from_str(&u64decode(s)?).wrap_err("Illegal payload data") 84 | } 85 | 86 | pub fn json_from_str(s: &str) -> Result { 87 | serde_json::from_str(s).wrap_err("Illegal license data") 88 | } 89 | 90 | pub fn date_from_epoch_millis(timestamp: &str) -> Result { 91 | let timestamp = timestamp 92 | .parse::() 93 | .wrap_err("Illegal license timestamp")?; 94 | let date = Local.timestamp(timestamp / 1000, 0); 95 | Ok(date.format("%Y-%m-%d").to_string()) 96 | } 97 | 98 | pub fn json_from_file(info: &FileInfo) -> Result { 99 | let file = 100 | File::open(Path::new(&info.pathname)).wrap_err("Can't read license file")?; 101 | serde_json::from_reader(&file).wrap_err("Can't parse license data") 102 | } 103 | 104 | pub fn shorten_oc_file_name(name: &str) -> Result { 105 | let parts: Vec<&str> = name.split('-').collect(); 106 | if parts.len() != 3 { 107 | Ok(name.to_string()) 108 | } else { 109 | Ok(format!("{}-...-{}", parts[0], parts[2])) 110 | } 111 | } 112 | 113 | #[cfg(test)] 114 | mod tests { 115 | use super::*; 116 | 117 | #[test] 118 | fn test_file_info_from_path() { 119 | if let Ok(fi) = FileInfo::from_path("src") { 120 | assert!(fi.is_directory); 121 | assert!(fi.extension.is_empty()); 122 | } else { 123 | panic!("Failed to create file info from 'src' directory."); 124 | } 125 | if let Ok(fi) = FileInfo::from_path("src/main.rs") { 126 | assert!(!fi.is_directory); 127 | assert!(fi.extension.eq_ignore_ascii_case("rs")); 128 | assert!(fi.name.eq_ignore_ascii_case("main")); 129 | } else { 130 | panic!("Failed to create file info from 'src/main.rs' file"); 131 | } 132 | if let Ok(_) = FileInfo::from_path("no-such-directory") { 133 | panic!("Created file info for non-existent path"); 134 | } 135 | } 136 | 137 | #[test] 138 | fn test_file_info_from_name_and_extension() { 139 | let fi = FileInfo::from_name_and_extension("foo", "bar").unwrap(); 140 | assert_eq!(fi.filename, "foo.bar"); 141 | assert_eq!(fi.pathname, "foo.bar"); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /rsrc/files/QnJpZGdlMXt9MjAxODA3MjAwNA-OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx-80.operatingconfig: -------------------------------------------------------------------------------- 1 | {"ocSpecVersion":"1.1","signatures":[{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6MTAzLCJjZXJ0aWZpY2F0ZURldGFpbHMiOlt7ImlkIjoiTjBRME9UVXlNamREUVRZM05rRkdNRUk1TWtKRU16aENPVGcyT0RNMU1VRSIsInN1YmplY3ROYW1lIjoiQWRvYmUgQ29udGVudCBDZXJ0aWZpY2F0ZSA1MS02IiwiaGV4U2VyaWFsTnVtYmVyIjoiM2FiNmRiN2MiLCJzaGExSGFzaCI6IjA0RUZEQ0MzMURGRkZDNEJDQTA0MkJFNzY0Q0JEMDAwN0IwQTI4OEIiLCJzZXF1ZW5jZSI6MSwiZG93bmxvYWRQYXRoIjoiTjBRME9UVXlNamREUVRZM05rRkdNRUk1TWtKRU16aENPVGcyT0RNMU1VRS5kZXIifSx7ImlkIjoiTWtSRk5qUkdOVGc1TlRkQk1VWTJOa1JDTmtRelJUY3pNMFF3UkRORU1qVSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDUxLTEwNCIsImhleFNlcmlhbE51bWJlciI6IjY5NmY1MmNhIiwic2hhMUhhc2giOiI3Qzc5QzBEOENEMDZEQThEMTFEQkNERjhGRTNDRTMxQjIzRTQ3NDRGIiwic2VxdWVuY2UiOjIsImRvd25sb2FkUGF0aCI6Ik1rUkZOalJHTlRnNU5UZEJNVVkyTmtSQ05rUXpSVGN6TTBRd1JETkVNalUuZGVyIn1dfQ","signature":""},{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6MTAyLCJjZXJ0aWZpY2F0ZURldGFpbHMiOlt7ImlkIjoiTkVaRVFrRkdPVEpCTTBJNE1EWTNNRE5DTmpVNU5VTTBOVVUyTkVJM1JrWSIsInN1YmplY3ROYW1lIjoiQWRvYmUgQ29udGVudCBDZXJ0aWZpY2F0ZSA1MS01IiwiaGV4U2VyaWFsTnVtYmVyIjoiMWMzMzg1NjQiLCJzaGExSGFzaCI6IkEyOUM1ODAxRjIzQzEyRTgyNTBBQTYyRTI2MDMxOTU5MkU0QzlEMzAiLCJzZXF1ZW5jZSI6MSwiZG93bmxvYWRQYXRoIjoiTkVaRVFrRkdPVEpCTTBJNE1EWTNNRE5DTmpVNU5VTTBOVVUyTkVJM1JrWS5kZXIifSx7ImlkIjoiTTBRelJUQTJSVUV4TWpSRVJqUkJORU15T1VJM1F6bEZNMFV4UlVORlFrWSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDUxLTEwMyIsImhleFNlcmlhbE51bWJlciI6IjI3NGMwOWFiIiwic2hhMUhhc2giOiJCRUI1MzU2NjZFQkRBQTlENzU5RTk0NjJDRDg2QjU4RjQ3RjExODQzIiwic2VxdWVuY2UiOjIsImRvd25sb2FkUGF0aCI6Ik0wUXpSVEEyUlVFeE1qUkVSalJCTkVNeU9VSTNRemxGTTBVeFJVTkZRa1kuZGVyIn1dfQ","signature":""}],"payload":"eyJpZCI6IjA5NTQ2Yjk1LTM3MzQtNDdhNC04YzE5LWE3MWVhMzMyOTdlNiIsIm5wZElkIjoiT1RVelpUVmlaV1l0WVdKbU15MDBOR1V4TFdGallqVXRabVpoTjJNeU1EWTRZalF4IiwibmdsQXBwSWQiOiJCcmlkZ2UxIiwibnBkUHJlY2VkZW5jZSI6ODAsImFzbnBEYXRhIjp7InRlbXBsYXRlSWQiOiJNMk14TWpJNU5ERXRaRGN4WlMwMFlUZzNMV0kwTVdRdFlqRTFNakV6Wm1RM04ySmwiLCJjdXN0b21lckNlcnRIZWFkZXJzIjpbeyJoZWFkZXIiOiJleUpqYjI1MFpXNTBVMmxuYm1GMGRYSmxRV3huSWpvaVVsTTFNVElpTENKMGNuVnpkR1ZrUTJWeWRFWnBibWRsY25CeWFXNTBRV3huSWpvaVUwaEJMVFV4TWlJc0luUnlkWE4wWldSRFpYSjBSbWx1WjJWeWNISnBiblJKYm1SbGVDSTZNeXdpWTJWeWRHbG1hV05oZEdWRVpYUmhhV3h6SWpwYmV5SnBaQ0k2SWs5RlZYcE9SR1JEVVd0R1FrNHdTa0pPVkdONFRucFdRazVxV1RGTk1GVTBVVlJyTUU5VlJYbE5lbFVpTENKemRXSnFaV04wVG1GdFpTSTZJa0ZrYjJKbElFTnZiblJsYm5RZ1EyVnlkR2xtYVdOaGRHVWdOVEl0TmlJc0ltaGxlRk5sY21saGJFNTFiV0psY2lJNklqUXpaREE0TXpkbElpd2ljMmhoTVVoaGMyZ2lPaUpFUVRRME5VSXdNRGs1TmpJd05qRXpNRFZDTkVZM1EwUkRSRFl4T0VZMk5qazFOVFUxTUVZeElpd2ljMlZ4ZFdWdVkyVWlPakVzSW1SdmQyNXNiMkZrVUdGMGFDSTZJazlGVlhwT1JHUkRVV3RHUWs0d1NrSk9WR040VG5wV1FrNXFXVEZOTUZVMFVWUnJNRTlWUlhsTmVsVXVaR1Z5SW4wc2V5SnBaQ0k2SWxGVlVrUk5hbFpIVW1wUk5GSlZTVFJPUkdONVQxVlpNazVGVFROTlJGRjRUV3BuTWxKRldrSk9hMUVpTENKemRXSnFaV04wVG1GdFpTSTZJa0ZrYjJKbElFbHVkR1Z5YldWa2FXRjBaU0JEUVNBMU1pMDBJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTXpZMU5ESTBORFVpTENKemFHRXhTR0Z6YUNJNklqVTJOakV6TjBVNE56TXdOME0zUWtRME5qQkZOREV6UmpJeVFqTTVNRU0wTkVJMVFVTTBOeklpTENKelpYRjFaVzVqWlNJNk1pd2laRzkzYm14dllXUlFZWFJvSWpvaVVWVlNSRTFxVmtkU2FsRTBVbFZKTkU1RVkzbFBWVmt5VGtWTk0wMUVVWGhOYW1jeVVrVmFRazVyVVM1a1pYSWlmVjE5Iiwic2lnbmF0dXJlIjoie3tjdXN0b21lclNpZ25hdHVyZTF9fSJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TWl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklrNUZSVFZOTUUxM1RrUlJOVkZxYkVaT2FrWkZUVVJqZVUxcVl6Vk5la1V5VVdwc1EwOUVXVFJPUlZVaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTlRJdE5TSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkzTkRkbE5EVWlMQ0p6YUdFeFNHRnphQ0k2SWtWQlJrVkNRVGszTjBGRk1VRTJOekE1TmpBeE0wTTJRek0xUlVNek56VkVNak5HTWtRMU4wVWlMQ0p6WlhGMVpXNWpaU0k2TVN3aVpHOTNibXh2WVdSUVlYUm9Jam9pVGtWRk5VMHdUWGRPUkZFMVVXcHNSazVxUmtWTlJHTjVUV3BqTlUxNlJUSlJhbXhEVDBSWk5FNUZWUzVrWlhJaWZTeDdJbWxrSWpvaVQxVlZlRkZxWkVWUFZWSkZUbXRSTUZKRVVYcE9WRlY0VGtWT1JGSnFXVEJPTUVrelRtcG5ORTVWVFNJc0luTjFZbXBsWTNST1lXMWxJam9pUVdSdlltVWdTVzUwWlhKdFpXUnBZWFJsSUVOQklEVXlMVE1pTENKb1pYaFRaWEpwWVd4T2RXMWlaWElpT2lJME1tRTFPREUyWXlJc0luTm9ZVEZJWVhOb0lqb2lSRVpGUXpFMFJqaEVSREkwTjBFNU9UQkdNa05DT1VFM016VkJRa1ZDUmpnek9ESTJRekJCUVNJc0luTmxjWFZsYm1ObElqb3lMQ0prYjNkdWJHOWhaRkJoZEdnaU9pSlBWVlY0VVdwa1JVOVZVa1ZPYTFFd1VrUlJlazVVVlhoT1JVNUVVbXBaTUU0d1NUTk9hbWMwVGxWTkxtUmxjaUo5WFgwIiwic2lnbmF0dXJlIjoie3tjdXN0b21lclNpZ25hdHVyZTJ9fSJ9XSwiYWRvYmVDZXJ0U2lnbmVkVmFsdWVzIjpudWxsLCJjdXN0b21lckNlcnRTaWduZWRWYWx1ZXMiOm51bGx9LCJwcm9maWxlU2VydmVyVXJsIjoiaHR0cHM6Ly90ZXN0OjEyMyIsInByb2ZpbGVSZXF1ZXN0UGF5bG9hZFBhcmFtcyI6eyJkZXZpY2VQYXJhbXMiOlsiZGV2aWNlSWQiLCJvc1VzZXJJZCIsImRldmljZU5hbWUiLCJvc05hbWUiLCJvc1ZlcnNpb24iLCJjdXJyZW50RGF0ZSIsImVtYmVkZGVkQnJvd3NlclZlcnNpb24iLCJlbmFibGVWZGlNYXJrZXJFeGlzdHMiLCJpc1ZpcnR1YWxFbnZpcm9ubWVudCIsImlzT3NVc2VyQWNjb3VudEluRG9tYWluIiwiaXBBZGRyZXNzIiwibWFjQWRkcmVzcyJdLCJhcHBQYXJhbXMiOlsibmdsQXBwSWQiLCJuZ2xBcHBWZXJzaW9uIiwibmdsTGliVmVyc2lvbiIsIm5nbEFwcFByb2ZpbGVTY29wZSIsIm5nbExpYlJ1bnRpbWVNb2RlIiwiY3VycmVudEFzbnBJZCIsImxvY2FsZSIsImFwcE5hbWVGb3JMb2NhbGUiLCJhcHBWZXJzaW9uRm9yTG9jYWxlIiwibmdsQXBwTGF1bmNoU3RhdGUiLCJhc25wQ2VydHNHcm91cElkIiwiY3VzdG9tZXJDZXJ0c0dyb3VwSWQiXX0sImRlcGxveW1lbnRNb2RlIjoiRlJMX0xBTiIsImJyYW5kaW5nIjp7Im5hbWUiOiJBZG9iZSBQcm9kdWN0aW9uIFRlc3QgLSBGUkwgUUUifSwicHJvZmlsZVNlcnZlckNlcnRGaW5nZXJwcmludCI6IjA0MTBFQzA2OTc4REYzQzEwMjlCNkQ0Nzk3MDQ1OTFBN0FCMEM1MTM1QzE5Q0NDODQxNThDMjRCOUYwQUNBNjRCRTUxNjRCRjcwODk4OEMzMTI5Q0E3OEVDMDNCMTFENkU2Mjc5RDNDREQwNjZBNkZDQUZEMTlCM0RFRjQyNTcwIn0"} -------------------------------------------------------------------------------- /src/descriptions.rs: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 Adobe 3 | All Rights Reserved. 4 | 5 | NOTICE: Adobe permits you to use, modify, and distribute this file in 6 | accordance with the terms of the Adobe license agreement accompanying 7 | it. 8 | */ 9 | use crate::types::{DeploymentMode, OperatingConfig}; 10 | use crate::utilities::{date_from_epoch_millis, shorten_oc_file_name, FileInfo}; 11 | use eyre::{eyre, Result}; 12 | use std::cmp::Ordering::Equal; 13 | 14 | pub fn describe_directory(info: &FileInfo, verbose: i32) -> Result<()> { 15 | let json_file = format!("{}/ngl-preconditioning-data.json", info.pathname); 16 | if let Ok(info) = FileInfo::from_path(&json_file) { 17 | return describe_file(&info, verbose); 18 | } 19 | let pattern = format!("{}/*.ccp", info.pathname); 20 | for path in glob::glob(&pattern).unwrap() { 21 | if let Ok(info) = FileInfo::from_path(path.unwrap().to_str().unwrap()) { 22 | return describe_file(&info, verbose); 23 | } 24 | } 25 | let pattern = format!("{}/*.operatingconfig", info.pathname); 26 | let mut ocs: Vec = Vec::new(); 27 | for path in glob::glob(&pattern).unwrap() { 28 | if let Ok(info) = FileInfo::from_path(path.unwrap().to_str().unwrap()) { 29 | let oc = OperatingConfig::from_license_file(&info)?; 30 | ocs.push(oc) 31 | } 32 | } 33 | if ocs.is_empty() { 34 | Err(eyre!( 35 | "No license files found in directory: {}", 36 | info.pathname 37 | )) 38 | } else { 39 | ocs.sort_by(|oc1, oc2| match oc1.npd_id.cmp(&oc2.npd_id) { 40 | Equal => oc1.app_id.cmp(&oc2.app_id), 41 | otherwise => otherwise, 42 | }); 43 | describe_operating_configs(&ocs, verbose) 44 | } 45 | } 46 | 47 | pub fn describe_file(info: &FileInfo, verbose: i32) -> Result<()> { 48 | if info.extension.eq_ignore_ascii_case("json") { 49 | let mut ocs = OperatingConfig::from_preconditioning_file(info)?; 50 | ocs.sort_by(|oc1, oc2| oc1.app_id.cmp(&oc2.app_id)); 51 | describe_preconditioning_data(&ocs, verbose); 52 | Ok(()) 53 | } else if info.extension.eq_ignore_ascii_case("ccp") { 54 | let mut ocs = OperatingConfig::from_ccp_file(info)?; 55 | ocs.sort_by(|oc1, oc2| oc1.app_id.cmp(&oc2.app_id)); 56 | describe_preconditioning_data(&ocs, verbose); 57 | Ok(()) 58 | } else if info.extension.eq_ignore_ascii_case("operatingconfig") { 59 | let oc = OperatingConfig::from_license_file(info)?; 60 | describe_operating_configs(&vec![oc], verbose) 61 | } else { 62 | Err(eyre!("Not a license file: {}", info.pathname)) 63 | } 64 | } 65 | 66 | fn describe_operating_configs(ocs: &[OperatingConfig], verbose: i32) -> Result<()> { 67 | let mut current_npd_id = ""; 68 | for (i, oc) in ocs.iter().enumerate() { 69 | if !current_npd_id.eq_ignore_ascii_case(&oc.npd_id) { 70 | current_npd_id = &oc.npd_id; 71 | println!("License files for npdId: {}:", &oc.npd_id); 72 | describe_package(oc, verbose); 73 | println!("Filenames (shown with '...' where the npdId appears):") 74 | } 75 | println!("{: >2}: {}", i + 1, shorten_oc_file_name(&oc.filename)?); 76 | describe_app(-1, &oc.app_id, &oc.cert_group_id, verbose); 77 | println!(" Install date: {}", &oc.install_datetime); 78 | // if -vv is given, check for locally cached licenses 79 | if verbose > 1 { 80 | if let Ok(date) = oc.get_cached_expiry() { 81 | println!( 82 | " Cached activation expires: {}", 83 | date_from_epoch_millis(&date)? 84 | ) 85 | } else { 86 | println!(" No cached activation") 87 | } 88 | } 89 | } 90 | Ok(()) 91 | } 92 | 93 | fn describe_preconditioning_data(ocs: &[OperatingConfig], verbose: i32) { 94 | for (i, oc) in ocs.iter().enumerate() { 95 | if i == 0 { 96 | println!("Preconditioning data for npdId: {}", &oc.npd_id); 97 | describe_package(oc, verbose); 98 | println!("Application Licenses:") 99 | } 100 | describe_app(i as i32, &oc.app_id, &oc.cert_group_id, verbose); 101 | } 102 | } 103 | 104 | fn describe_package(oc: &OperatingConfig, verbose: i32) { 105 | if verbose > 0 { 106 | println!(" Package License ID: {}", &oc.npd_id); 107 | } 108 | println!(" License type: {}", &oc.mode); 109 | if verbose > 0 { 110 | if let DeploymentMode::FrlIsolated(codes) = &oc.mode { 111 | if codes.len() == 1 { 112 | println!(" Census code: {}", codes[0]); 113 | } else { 114 | println!(" Census codes: {}", codes.join(", ")); 115 | } 116 | } 117 | } 118 | println!(" License expiry date: {}", &oc.expiry_date); 119 | println!(" Precedence: {}", &oc.precedence); 120 | } 121 | 122 | fn describe_app(count: i32, app_id: &str, group_id: &str, verbose: i32) { 123 | println!( 124 | "{}App ID: {}{}", 125 | if count < 0 { 126 | String::from(" ") 127 | } else { 128 | format!("{: >2}: ", count + 1) 129 | }, 130 | app_id, 131 | if verbose > 0 { 132 | format!(", Certificate Group: {}", group_id) 133 | } else { 134 | String::new() 135 | } 136 | ); 137 | } 138 | -------------------------------------------------------------------------------- /rsrc/files/SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx-80.operatingconfig: -------------------------------------------------------------------------------- 1 | {"ocSpecVersion":"1.1","signatures":[{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6MTAzLCJjZXJ0aWZpY2F0ZURldGFpbHMiOlt7ImlkIjoiTjBRME9UVXlNamREUVRZM05rRkdNRUk1TWtKRU16aENPVGcyT0RNMU1VRSIsInN1YmplY3ROYW1lIjoiQWRvYmUgQ29udGVudCBDZXJ0aWZpY2F0ZSA1MS02IiwiaGV4U2VyaWFsTnVtYmVyIjoiM2FiNmRiN2MiLCJzaGExSGFzaCI6IjA0RUZEQ0MzMURGRkZDNEJDQTA0MkJFNzY0Q0JEMDAwN0IwQTI4OEIiLCJzZXF1ZW5jZSI6MSwiZG93bmxvYWRQYXRoIjoiTjBRME9UVXlNamREUVRZM05rRkdNRUk1TWtKRU16aENPVGcyT0RNMU1VRS5kZXIifSx7ImlkIjoiTWtSRk5qUkdOVGc1TlRkQk1VWTJOa1JDTmtRelJUY3pNMFF3UkRORU1qVSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDUxLTEwNCIsImhleFNlcmlhbE51bWJlciI6IjY5NmY1MmNhIiwic2hhMUhhc2giOiI3Qzc5QzBEOENEMDZEQThEMTFEQkNERjhGRTNDRTMxQjIzRTQ3NDRGIiwic2VxdWVuY2UiOjIsImRvd25sb2FkUGF0aCI6Ik1rUkZOalJHTlRnNU5UZEJNVVkyTmtSQ05rUXpSVGN6TTBRd1JETkVNalUuZGVyIn1dfQ","signature":""},{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6MTAyLCJjZXJ0aWZpY2F0ZURldGFpbHMiOlt7ImlkIjoiTkVaRVFrRkdPVEpCTTBJNE1EWTNNRE5DTmpVNU5VTTBOVVUyTkVJM1JrWSIsInN1YmplY3ROYW1lIjoiQWRvYmUgQ29udGVudCBDZXJ0aWZpY2F0ZSA1MS01IiwiaGV4U2VyaWFsTnVtYmVyIjoiMWMzMzg1NjQiLCJzaGExSGFzaCI6IkEyOUM1ODAxRjIzQzEyRTgyNTBBQTYyRTI2MDMxOTU5MkU0QzlEMzAiLCJzZXF1ZW5jZSI6MSwiZG93bmxvYWRQYXRoIjoiTkVaRVFrRkdPVEpCTTBJNE1EWTNNRE5DTmpVNU5VTTBOVVUyTkVJM1JrWS5kZXIifSx7ImlkIjoiTTBRelJUQTJSVUV4TWpSRVJqUkJORU15T1VJM1F6bEZNMFV4UlVORlFrWSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDUxLTEwMyIsImhleFNlcmlhbE51bWJlciI6IjI3NGMwOWFiIiwic2hhMUhhc2giOiJCRUI1MzU2NjZFQkRBQTlENzU5RTk0NjJDRDg2QjU4RjQ3RjExODQzIiwic2VxdWVuY2UiOjIsImRvd25sb2FkUGF0aCI6Ik0wUXpSVEEyUlVFeE1qUkVSalJCTkVNeU9VSTNRemxGTTBVeFJVTkZRa1kuZGVyIn1dfQ","signature":""}],"payload":"eyJpZCI6ImY4MjM4YWI1LWU2NDMtNDBhNi04ZDljLTVhOTVjYWE0ODg2NCIsIm5wZElkIjoiT1RVelpUVmlaV1l0WVdKbU15MDBOR1V4TFdGallqVXRabVpoTjJNeU1EWTRZalF4IiwibmdsQXBwSWQiOiJJbGx1c3RyYXRvcjEiLCJucGRQcmVjZWRlbmNlIjo4MCwiYXNucERhdGEiOnsidGVtcGxhdGVJZCI6Ik5XWTVOek5pWkRFdE0ySXdZaTAwWXpaaUxUazVNemN0WkRVMlpqYzRNRFpsTVdKaiIsImN1c3RvbWVyQ2VydEhlYWRlcnMiOlt7ImhlYWRlciI6ImV5SmpiMjUwWlc1MFUybG5ibUYwZFhKbFFXeG5Jam9pVWxNMU1USWlMQ0owY25WemRHVmtRMlZ5ZEVacGJtZGxjbkJ5YVc1MFFXeG5Jam9pVTBoQkxUVXhNaUlzSW5SeWRYTjBaV1JEWlhKMFJtbHVaMlZ5Y0hKcGJuUkpibVJsZUNJNk15d2lZMlZ5ZEdsbWFXTmhkR1ZFWlhSaGFXeHpJanBiZXlKcFpDSTZJazlGVlhwT1JHUkRVV3RHUWs0d1NrSk9WR040VG5wV1FrNXFXVEZOTUZVMFVWUnJNRTlWUlhsTmVsVWlMQ0p6ZFdKcVpXTjBUbUZ0WlNJNklrRmtiMkpsSUVOdmJuUmxiblFnUTJWeWRHbG1hV05oZEdVZ05USXROaUlzSW1obGVGTmxjbWxoYkU1MWJXSmxjaUk2SWpRelpEQTRNemRsSWl3aWMyaGhNVWhoYzJnaU9pSkVRVFEwTlVJd01EazVOakl3TmpFek1EVkNORVkzUTBSRFJEWXhPRVkyTmprMU5UVTFNRVl4SWl3aWMyVnhkV1Z1WTJVaU9qRXNJbVJ2ZDI1c2IyRmtVR0YwYUNJNklrOUZWWHBPUkdSRFVXdEdRazR3U2tKT1ZHTjRUbnBXUWs1cVdURk5NRlUwVVZSck1FOVZSWGxOZWxVdVpHVnlJbjBzZXlKcFpDSTZJbEZWVWtSTmFsWkhVbXBSTkZKVlNUUk9SR041VDFWWk1rNUZUVE5OUkZGNFRXcG5NbEpGV2tKT2ExRWlMQ0p6ZFdKcVpXTjBUbUZ0WlNJNklrRmtiMkpsSUVsdWRHVnliV1ZrYVdGMFpTQkRRU0ExTWkwMElpd2lhR1Y0VTJWeWFXRnNUblZ0WW1WeUlqb2lNelkxTkRJME5EVWlMQ0p6YUdFeFNHRnphQ0k2SWpVMk5qRXpOMFU0TnpNd04wTTNRa1EwTmpCRk5ERXpSakl5UWpNNU1FTTBORUkxUVVNME56SWlMQ0p6WlhGMVpXNWpaU0k2TWl3aVpHOTNibXh2WVdSUVlYUm9Jam9pVVZWU1JFMXFWa2RTYWxFMFVsVkpORTVFWTNsUFZWa3lUa1ZOTTAxRVVYaE5hbWN5VWtWYVFrNXJVUzVrWlhJaWZWMTkiLCJzaWduYXR1cmUiOiJ7e2N1c3RvbWVyU2lnbmF0dXJlMX19In0seyJoZWFkZXIiOiJleUpqYjI1MFpXNTBVMmxuYm1GMGRYSmxRV3huSWpvaVVsTTFNVElpTENKMGNuVnpkR1ZrUTJWeWRFWnBibWRsY25CeWFXNTBRV3huSWpvaVUwaEJMVFV4TWlJc0luUnlkWE4wWldSRFpYSjBSbWx1WjJWeWNISnBiblJKYm1SbGVDSTZNaXdpWTJWeWRHbG1hV05oZEdWRVpYUmhhV3h6SWpwYmV5SnBaQ0k2SWs1RlJUVk5NRTEzVGtSUk5WRnFiRVpPYWtaRlRVUmplVTFxWXpWTmVrVXlVV3BzUTA5RVdUUk9SVlVpTENKemRXSnFaV04wVG1GdFpTSTZJa0ZrYjJKbElFTnZiblJsYm5RZ1EyVnlkR2xtYVdOaGRHVWdOVEl0TlNJc0ltaGxlRk5sY21saGJFNTFiV0psY2lJNklqSTNORGRsTkRVaUxDSnphR0V4U0dGemFDSTZJa1ZCUmtWQ1FUazNOMEZGTVVFMk56QTVOakF4TTBNMlF6TTFSVU16TnpWRU1qTkdNa1ExTjBVaUxDSnpaWEYxWlc1alpTSTZNU3dpWkc5M2JteHZZV1JRWVhSb0lqb2lUa1ZGTlUwd1RYZE9SRkUxVVdwc1JrNXFSa1ZOUkdONVRXcGpOVTE2UlRKUmFteERUMFJaTkU1RlZTNWtaWElpZlN4N0ltbGtJam9pVDFWVmVGRnFaRVZQVlZKRlRtdFJNRkpFVVhwT1ZGVjRUa1ZPUkZKcVdUQk9NRWt6VG1wbk5FNVZUU0lzSW5OMVltcGxZM1JPWVcxbElqb2lRV1J2WW1VZ1NXNTBaWEp0WldScFlYUmxJRU5CSURVeUxUTWlMQ0pvWlhoVFpYSnBZV3hPZFcxaVpYSWlPaUkwTW1FMU9ERTJZeUlzSW5Ob1lURklZWE5vSWpvaVJFWkZRekUwUmpoRVJESTBOMEU1T1RCR01rTkNPVUUzTXpWQlFrVkNSamd6T0RJMlF6QkJRU0lzSW5ObGNYVmxibU5sSWpveUxDSmtiM2R1Ykc5aFpGQmhkR2dpT2lKUFZWVjRVV3BrUlU5VlVrVk9hMUV3VWtSUmVrNVVWWGhPUlU1RVVtcFpNRTR3U1ROT2FtYzBUbFZOTG1SbGNpSjlYWDAiLCJzaWduYXR1cmUiOiJ7e2N1c3RvbWVyU2lnbmF0dXJlMn19In1dLCJhZG9iZUNlcnRTaWduZWRWYWx1ZXMiOm51bGwsImN1c3RvbWVyQ2VydFNpZ25lZFZhbHVlcyI6bnVsbH0sInByb2ZpbGVTZXJ2ZXJVcmwiOiJodHRwczovL3Rlc3Q6MTIzIiwicHJvZmlsZVJlcXVlc3RQYXlsb2FkUGFyYW1zIjp7ImRldmljZVBhcmFtcyI6WyJkZXZpY2VJZCIsIm9zVXNlcklkIiwiZGV2aWNlTmFtZSIsIm9zTmFtZSIsIm9zVmVyc2lvbiIsImN1cnJlbnREYXRlIiwiZW1iZWRkZWRCcm93c2VyVmVyc2lvbiIsImVuYWJsZVZkaU1hcmtlckV4aXN0cyIsImlzVmlydHVhbEVudmlyb25tZW50IiwiaXNPc1VzZXJBY2NvdW50SW5Eb21haW4iLCJpcEFkZHJlc3MiLCJtYWNBZGRyZXNzIl0sImFwcFBhcmFtcyI6WyJuZ2xBcHBJZCIsIm5nbEFwcFZlcnNpb24iLCJuZ2xMaWJWZXJzaW9uIiwibmdsQXBwUHJvZmlsZVNjb3BlIiwibmdsTGliUnVudGltZU1vZGUiLCJjdXJyZW50QXNucElkIiwibG9jYWxlIiwiYXBwTmFtZUZvckxvY2FsZSIsImFwcFZlcnNpb25Gb3JMb2NhbGUiLCJuZ2xBcHBMYXVuY2hTdGF0ZSIsImFzbnBDZXJ0c0dyb3VwSWQiLCJjdXN0b21lckNlcnRzR3JvdXBJZCJdfSwiZGVwbG95bWVudE1vZGUiOiJGUkxfTEFOIiwiYnJhbmRpbmciOnsibmFtZSI6IkFkb2JlIFByb2R1Y3Rpb24gVGVzdCAtIEZSTCBRRSJ9LCJwcm9maWxlU2VydmVyQ2VydEZpbmdlcnByaW50IjoiMDQxMEVDMDY5NzhERjNDMTAyOUI2RDQ3OTcwNDU5MUE3QUIwQzUxMzVDMTlDQ0M4NDE1OEMyNEI5RjBBQ0E2NEJFNTE2NEJGNzA4OTg4QzMxMjlDQTc4RUMwM0IxMUQ2RTYyNzlEM0NERDA2NkE2RkNBRkQxOUIzREVGNDI1NzAifQ"} -------------------------------------------------------------------------------- /rsrc/files/UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0-80.operatingconfig: -------------------------------------------------------------------------------- 1 | {"ocSpecVersion":"1.1","signatures":[{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6NTMsImNlcnRpZmljYXRlRGV0YWlscyI6W3siaWQiOiJRakl5UmtKR1JUUTRSa0UyT1VRelJFSkZOalUwUkRVMVJESkRNRVkzUVRRIiwic3ViamVjdE5hbWUiOiJBZG9iZSBDb250ZW50IENlcnRpZmljYXRlIDQxLTYiLCJoZXhTZXJpYWxOdW1iZXIiOiI2MDE2ZDk4MCIsInNoYTFIYXNoIjoiQUNGMTM4RkVFNUUyQ0Y1MjI5OEI4MzE5QzZCNzA5MjMwMjM1RUYzNiIsInNlcXVlbmNlIjoxLCJkb3dubG9hZFBhdGgiOiJRakl5UmtKR1JUUTRSa0UyT1VRelJFSkZOalUwUkRVMVJESkRNRVkzUVRRLVpHUXpNamhoWTJNdFpURTJZeTAwTlRJMExUZ3pPV0l0WkdSa01EVXdOVEl6TkdVMC5kZXIifSx7ImlkIjoiT1VORE1EazBSRGd3UmtJek5UWTBPVVJCUWtJMlJETTROa1V6UkVSRlFqRSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDQxLTU0IiwiaGV4U2VyaWFsTnVtYmVyIjoiMjNmMzFlNTAiLCJzaGExSGFzaCI6IjA3MjkxRjNFODNCQjQ3NTE3QUZBRENGMzhFRTY0N0E0RkVFNzc2NkUiLCJzZXF1ZW5jZSI6MiwiZG93bmxvYWRQYXRoIjoiT1VORE1EazBSRGd3UmtJek5UWTBPVVJCUWtJMlJETTROa1V6UkVSRlFqRS1aR1F6TWpoaFkyTXRaVEUyWXkwME5USTBMVGd6T1dJdFpHUmtNRFV3TlRJek5HVTAuZGVyIn1dfQ","signature":""},{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6NTIsImNlcnRpZmljYXRlRGV0YWlscyI6W3siaWQiOiJRekJCTjBZMlFrVXlRVFZGTWpneVFUSXlSalZHTXpaR1EwVkNORGswTTBZIiwic3ViamVjdE5hbWUiOiJBZG9iZSBDb250ZW50IENlcnRpZmljYXRlIDQxLTUiLCJoZXhTZXJpYWxOdW1iZXIiOiIzYjJkNzE0YiIsInNoYTFIYXNoIjoiNTBFRTY0OTAzNTQ1N0RBMkY4OENDQTFDRDAzRUYyQzQ3NDc2Nzc5NyIsInNlcXVlbmNlIjoxLCJkb3dubG9hZFBhdGgiOiJRekJCTjBZMlFrVXlRVFZGTWpneVFUSXlSalZHTXpaR1EwVkNORGswTTBZLVpHUXpNamhoWTJNdFpURTJZeTAwTlRJMExUZ3pPV0l0WkdSa01EVXdOVEl6TkdVMC5kZXIifSx7ImlkIjoiTlRRME5rTkZOVEpETUVKRE9ESkJRamN6TVRORVJEaERPVUUxTXpNeE56VSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDQxLTUzIiwiaGV4U2VyaWFsTnVtYmVyIjoiNTg4NWI4NDEiLCJzaGExSGFzaCI6IjA5MzZBRjI5QjMyMzFEMUVBOTgwQjQyNkFDOUVFODNDMzdDNzU4NTYiLCJzZXF1ZW5jZSI6MiwiZG93bmxvYWRQYXRoIjoiTlRRME5rTkZOVEpETUVKRE9ESkJRamN6TVRORVJEaERPVUUxTXpNeE56VS1aR1F6TWpoaFkyTXRaVEUyWXkwME5USTBMVGd6T1dJdFpHUmtNRFV3TlRJek5HVTAuZGVyIn1dfQ","signature":""}],"payload":"eyJpZCI6IjA0ODg2ZWFmLTYyN2MtNDBkZC1iZmY2LWI5NmM4NmY2ZDM4YyIsIm5wZElkIjoiWkdRek1qaGhZMk10WlRFMll5MDBOVEkwTFRnek9XSXRaR1JrTURVd05USXpOR1UwIiwibmdsQXBwSWQiOiJQaG90b3Nob3AxIiwibnBkUHJlY2VkZW5jZSI6ODAsImFzbnBEYXRhIjp7InRlbXBsYXRlSWQiOiJXa2RSZWsxcWFHaFpNazEwV2xSRk1sbDVNREJPVkVrd1RGUm5lazlYU1hSYVIxSnJUVVJWZDA1VVNYcE9SMVV3ZTMxaE1XTXhNV0k1T1MxbU5XSmxMVFF6TlRrdFlUazROeTFoWm1OaU9EVXhaV1kzWWpRIiwiY3VzdG9tZXJDZXJ0SGVhZGVycyI6W3siaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TXl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklrMUVRa2RTUkdzd1RVVmFSRTVGU1RKTlZVNUZUbnBhUkZGcVJUSlNSVTVEVG1wVk1WRnFUVE5TVlVVaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTkRJdE5pSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJak5pWkRabE1EbGxJaXdpYzJoaE1VaGhjMmdpT2lKRE1UaERSa1E1UTBZNE0wUXlRalpFTVVFeU56QkNNalkwTVVWQ1JUWkRPRVkzTTBSQ09ERTRJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxRVFrZFNSR3N3VFVWYVJFNUZTVEpOVlU1RlRucGFSRkZxUlRKU1JVNURUbXBWTVZGcVRUTlNWVVV0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5TEhzaWFXUWlPaUpTYTAxNlVrVlJNMUpxVlRST2VrRjRUVlZLUms1RlZrSk5WRlpEVVdwWk1WRnFWVFJQUlU1RlQxUk5JaXdpYzNWaWFtVmpkRTVoYldVaU9pSkJaRzlpWlNCSmJuUmxjbTFsWkdsaGRHVWdRMEVnTkRJdE5DSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJall6WkdFek1UY3dJaXdpYzJoaE1VaGhjMmdpT2lKQk1FWXdNMEV3TUVReE5rTTRPVVZDTmtWRFFUZzNNRVUzUlVFMVJETTVSREF5UmtKQ1EwRkRJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWxKclRYcFNSVkV6VW1wVk5FNTZRWGhOVlVwR1RrVldRazFVVmtOUmFsa3hVV3BWTkU5RlRrVlBWRTB0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5WFgwIiwic2lnbmF0dXJlIjoie3tjdXN0b21lclNpZ25hdHVyZTF9fSJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TWl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklrMVViRVZQVlVsNFVtcFdSbEpGV1RKT1ZHUkdVV3BSZDAxcVpFSk9la1pEVWtWVk5GRlVVVFZOYW1zaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTkRJdE5TSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkyT0RWaVlqbGlJaXdpYzJoaE1VaGhjMmdpT2lKQlJESXdOREZEUkVOQ05rVXhNREpET0RNMVJrRTVSVUU0T0VJM1JUUXdNakE0UlRkQ1FqRkRJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxVWJFVlBWVWw0VW1wV1JsSkZXVEpPVkdSR1VXcFJkMDFxWkVKT2VrWkRVa1ZWTkZGVVVUVk5hbXN0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5TEhzaWFXUWlPaUpOUlZVeVRucE5lbEpFYTNwT1JVa3lUbFZKZDFGNlNUTk5ha1pIVDFWUmVVNVVSa2RTVkVGM1RVUlZJaXdpYzNWaWFtVmpkRTVoYldVaU9pSkJaRzlpWlNCSmJuUmxjbTFsWkdsaGRHVWdRMEVnTkRJdE15SXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkzWWpFME1EUTBJaXdpYzJoaE1VaGhjMmdpT2lKQ1JESkNNRVpGTWpKQk1UWXpSRVpCTWtRNU1qQkJNMFl4UlVNeU9FUkZRVFkxTlVRNFJUQTFJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxRlZUSk9lazE2VWtScmVrNUZTVEpPVlVsM1VYcEpNMDFxUmtkUFZWRjVUbFJHUjFKVVFYZE5SRlV0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5WFgwIiwic2lnbmF0dXJlIjoie3tjdXN0b21lclNpZ25hdHVyZTJ9fSJ9XSwiYWRvYmVDZXJ0U2lnbmVkVmFsdWVzIjp7InNpZ25hdHVyZXMiOnsic2lnbmF0dXJlMSI6IldOVmFHMUQ5UTkwT0F6SF95dzhnaUhrcXdrTzRQcURfdkcxYk5yd3lGblR1eW9YUjUwdnk1LTVHbWVuNE8tZHA5bVJNaTdPcV9OcGk0UTJwY3dRNkNoOGtDTmtQLXhpczRDRG1FTEFFVnRiUGVMbUtkSEFiSEFjWmpJU2JIVmlmc3FtU0t1STdHNF8zRVkydU11blVBQlFsUE1pYWFseGNpN0FuR0JOb3pobXBDb3lYMDhIMDFreTRVVFZYdWswOTdWbXFSX1JIc01oZVcwUTJIWWZuU3FFelJqRGdLR3JrRm1kLW1qd3doQ05Ic1hyVGxVTExSNXVGZkRvODBXNVppNXRxdkRuREItRGNMTkVoVEN4bHJhQ2t2cE9sUjhvQkNNZmhuU3RlTFhfN3BzM0RPRDVPN3lkSUg4NUNiUEpjWm5PbG0xMlpab3NPUENVRndTY1NzVUpEM2UxcTlmS2xveXdnZm9ic2UzYlVnU0ZrQzQ1am4xeTBtYjFLZm4xeFBoYVBUc2c4NE9CWnUzdFBTdXA4c1dVVjVJQVBOMnBGQkp3S0VIbVhrV01nOWViQllZbkNhRjc3ZUJrYUc1R0YwTldvcXg5SFVpODV0akc0dFhmQXkwMmlSZklfQzZnRnFwUkptN3hIWHVYM3FDNnhQeFRBYkk0cktJMGdaVWdacnctdU5RUWUzSnY5SzBveDVISGF2WW9mXzdqcVJMRjRnYTY3LXkzY1RGeGpHalpVMXFYOHVwTDVDT3U0bXEwR0hPNG5ncXdoNndMV2ZIRVRDeV84RktyMGhWSEpka3lOa1cyOGEzMjkxOTY1dnNPYlAzeDVDbldEN1ZWRDg0dUFyMEhNTkM3eEdUUDc0VFdNNjE0ajNTZ2JtMkdPcEE4YXc4QTc1R1E1MmlvIiwic2lnbmF0dXJlMiI6ImtDc0ROQTNGOFIwMmlkU2Z0YW1MTHdUSEtxTVNwT25JaXRrekxvdUgxWmZYQnpFaXhTWWV4cnJ3MGFjOXVXbkg3T09SZ2hWX1NhZlB1RUN3bjE0Sms3NzJ1UEtLRG5Tdnh6bjRjci13RGZVWWkwR1lqZ2R5WXFrbkNHSTRDQVVjQ3M4bl9vM2s2QkQxSjYtVk1mS3gyaVljYnVmeUZPbXo1ZFkwbXFhZHV6TG1heVRfaUNzRFlGc0pTaklXdkxZMUpZYzY5dklzZU9id2pyTl9ZdGJWZFMtcUh0bnBvV3BUUDNHNm9sTTQ4LUdUcXdzZ0lZenpTdko0SVBlLU4zVXozRWRvSDRYcWtZNUNZVTc0Q2prdEdfV1dCcmJ0MGlZdXNSeTNtd1lPRW1UQTR5ZHlvdVBMczM5NTBocTJCTU1NVFB3bEZtbGhncUlIUTZkNVo0cUNaQzQ3Zm0zMTNVblU2OUF1OHZiYkp4STkzWHFOY3hYVHVvU1V1VWREdm0wZG5XLWVfZXlCSWxnSjlKTG9VQVFka3NPWnROajlwY2FpaU9Vd3JmMkk0ZFU1SHNSNG9vU2dnRE11QkxCM1piMTRteGZzQmdrcndVQnB2WHg1Q2psZERtTTF6d2ZzbmpxeEFUVmI0c0FYcU9NS1FXdU8wa1JQMnY3U0dnZm9RMVVsLTFhRXdoMzVHLWRCWUtFMnJmU3EtWmZkNm1zdUFzaTgzaEhxcFNYRnctcFZRenExWUk3c1A1WnpsZFE0cWNHSDNKdTlaXzF3ZEt5ckZTSUtXSWVoS0dxMW9fUExtQ0E2MGsyaWdZRnpBNlhnT0NnTjNwaUJSYU9xdmJHdXNoQXI1N0tWallwdHFUSVRMcmlacENJNEdwT2ltY1VoLWtfYWdnX3p4dF9OYlljIn0sInZhbHVlcyI6eyJsaWNlbnNlRXhwaXJ5VGltZXN0YW1wIjoiMTYzNjAwOTIwMTAwMCIsImVuaWdtYURhdGEiOiJ7XFxcInByb2R1Y3RJZFxcXCI6NDUsXFxcInNlcmlhbEtleVxcXCI6XFxcIjEwNDU0NTAxMjM0NTUzNzU1NDkwNzIwOVxcXCIsXFxcImNsZWFyU2VyaWFsS2V5XFxcIjpudWxsLFxcXCJsb2NhbGVcXFwiOlxcXCJBTExcXFwiLFxcXCJhc3NvY2lhdGVkTG9jYWxlc1xcXCI6XFxcIkFMTFxcXCIsXFxcInBsYXRmb3JtXFxcIjowLFxcXCJpc2tcXFwiOjQ1NDA0MixcXFwiY3VzdG9tZXJJZFxcXCI6MCxcXFwiZGVsaXZlcnlNZXRob2RcXFwiOjMsXFxcInBjXFxcIjp0cnVlLFxcXCJyYlxcXCI6ZmFsc2V9IiwiZ3JhY2VUaW1lIjoiMjU5MjAwMDAwMCIsInByb2ZpbGVTdGF0dXMiOiJQUk9GSUxFX0FWQUlMQUJMRSIsImVmZmVjdGl2ZUVuZFRpbWVzdGFtcCI6IjE2MzM0MTcyMDEwMDAiLCJsaWNlbnNlRXhwaXJ5V2FybmluZ1N0YXJ0VGltZXN0YW1wIjoiMTYzNTQwNDQwMTAwMCIsIm5nbExpYlJlZnJlc2hJbnRlcnZhbCI6IjI2ODc4MTg4ODcwIiwibGljZW5zZUlkIjoiOTZDQjdCMTI5QkNBMjEyNEQ0OEEiLCJsaWNlbnNlZEZlYXR1cmVzIjoiW1xcXCJBTVRfU1VCU0NSSVBUSU9OXzYuMFxcXCIsXFxcIkJyaWRnZV9CYXNlXzQuMFxcXCIsXFxcIkJyaWRnZV9CYXNlXzUuMFxcXCIsXFxcIkJyaWRnZV9CYXNlXzYuMFxcXCIsXFxcIkJyaWRnZV9DYW1lcmFSYXdfNC4wXFxcIixcXFwiQnJpZGdlX0NhbWVyYVJhd181LjBcXFwiLFxcXCJCcmlkZ2VfQ2FtZXJhUmF3XzYuMFxcXCIsXFxcIkJyaWRnZV9NaW5pQnJpZGdlXzEuMFxcXCIsXFxcIkJyaWRnZV9NaW5pQnJpZGdlXzIuMFxcXCIsXFxcIkJyaWRnZV9NaW5pQnJpZGdlXzMuMFxcXCIsXFxcIkV1Y2xpZF9CYXNlXzEuMFxcXCIsXFxcIk1vYmlsZUNlbnRlcl9CYXNlXzMuMFxcXCIsXFxcIlBob3Rvc2hvcF8xNC4wXFxcIixcXFwiUGhvdG9zaG9wX0Jhc2VfMTIuMFxcXCIsXFxcIlBob3Rvc2hvcF9CYXNlXzEzLjBcXFwiLFxcXCJQaG90b3Nob3BfQmFzZV8xNC4wXFxcIixcXFwiUGhvdG9zaG9wX1ByZW1pdW1fMTIuMFxcXCIsXFxcIlBob3Rvc2hvcF9QcmVtaXVtXzEzLjBcXFwiLFxcXCJQaG90b3Nob3BfUHJlbWl1bV8xNC4wXFxcIl0iLCJhcHBSZWZyZXNoSW50ZXJ2YWwiOiIyNjg3ODE4ODg3MCIsImFwcEVudGl0bGVtZW50U3RhdHVzIjoiU1VCU0NSSVBUSU9OIn19LCJjdXN0b21lckNlcnRTaWduZWRWYWx1ZXMiOnsic2lnbmF0dXJlcyI6eyJjdXN0b21lclNpZ25hdHVyZTIiOiJuMXZPUFJmRE1ubmZ1RFBBcHVHd2ZSZlV3TVZyNlhyd0RKaEVlYTZudEZZXzhSbnhTdGJLU1Q1d1Nsb1g5cEJyR1BocHRtXzdfUnNkQ3VscmRDY213UGJrd1VLTmNsRm1veWZKMXJ3eGgtTnNtVG81UF9GM3M5cFE4SVZpcTBpMVBCQ3RoYmtwMFpHbWxJSGpqUWlNNmYtR2pSQlhxQl9IdHF5N2ZVQWN6RVdNaDVDNS14X2l6UllzSUZFZmNHTVltLUppOTM0ZmlpLWhDdzFKLV9XX01Jb0NGd1V6Y25LZ2FtZC10akRhX1JpR0YtdTJBcXlDZVkyYWhDbkJMaWs3UEgyekdId1ZNU0tCTkI5cHZ5YURWa2xTVXJGbVB1OTlOMHZIME5mZWdZX2h1cGt2bmExZDJ3X3l0cTljWjFGQ2VyRzBCeHhHLTU5aG5CVFNoNFcxOEIyQ3ZNZnBWNVFYZlVOaGdjT1RySk83WUdPckdtaXFiczNlOGQ0ZHEwalVjOFVMZ3dscGRmbWdaRExNcmpyaVJxUV9Dc1J3dlFhbEs3UU1uWmZyOEp6R01IQjZiOGJtWEJ2aTJZcVNoalJmSG9QZ1NraEt1TUo5QlBFOUJHVi1pRzR0azR2ZUxzMVg4cmN3SWpjTjlqRGIyTHFuOEJ2NGdsOGY5YWYzSG9YeGExUFJLU1o4T0tzVVIwcFhkaW1LY2hObExvZkZDYUFsMks5NkV4Y0R4b3dKM2JWZHVkUWJ2ak9HbWNncDlJTWlhZDlKZWs2a0JXX0ZwT01ySnhVOHZVVndja21VbTNkZ1dpaXh6Wi13eGVsa0M0bDhXMXIydXZEbHQybjRDRmRRU0ktS0Eyc2ZPbnRKVmRTajVYbGhfa2xoY0Z1YzVIVXpKNVJ1S1FkSkFnVSIsImN1c3RvbWVyU2lnbmF0dXJlMSI6IlF4TTh0RmhfMXFpLVYyZ1pZZkdoWU93c1E3cTdnYVUzOHNvdDJRS2toX3NadDdHVWo0Q05NWDlNdElyV1BLamFUMWljSzM4T3QxenhZcGVWQkV2YVJnblo4MVd2UGRiVjhITEY3NnVFX0MxUnhLWFloX3Nlb2ltbnB4VzE0S0hYV3EtUzFNMlJpM1ZUTW5MeU9BNW5UenlZZXRlMG9xbjVvZGFraUM1UTY2WkN0U0owcUhFLWg4YUdCSmFqWXAtSlo5dWFFRWJhM3ZqTG41SFhnMjNRSDhabnV6d0dfRkoxQ3B5d3ZuV3gydnJROS1lWW94RHFlS0d2YThsRndZUS1nOWlNX1RZNFpySXBCaTI4RWtfdUVVSFBTX3ZjV1pLaVB1RGttRkZtLWk3RndBVXg2T2ltblZJS1EyOTRFSS1wTmVyWTRaMi1pTGs0V2JrTXFEeVNWbmUtSk1sOHFjeWNTR2hzLXJSVmdlTF9TbHJ2el8wQzZXSVlBLUJsOHo5R1ZJNDh1SkVmQVdidUtLdHMtMVJiRmpmWEFOV2w2NE9DQjVUR0swbVJnTjk1OGU2RWZQMGpiUFRyLUV0YjhqN2ZCVXVrSGZjMy1vS3pJMFFzTlNZZDZDd05seVVxQVVabEdjZjdUcGk0eUhLd0c2Y3BxMVNPckg5dGFpeFNBSFFueE5xY2E0QXVHUWVSV0NJeTY3MC15TUUzX3N1bEdmcVBkTzNoSnB1eXpwYklJR3U1cndGSTY0VHlHTlVyQ21kMFJ4VUZmNVFFMlpRS0hoYVhxc3JacjAwS2kwbThaMEFNLXJ0Q2VZU196WjVnOEVpdnBNYllLb1hRYmVxNkNpVks4Ty1KM0ZCLTJENHZFZEczY0tUYWs3Q3NIR1c2QjVNRE9CbVc0eFc5SnhRIn0sInZhbHVlcyI6ImV5SnVjR1JKWkNJNklscEhVWHBOYW1ob1dUSk5kRnBVUlRKWmVUQXdUbFJKTUV4VVozcFBWMGwwV2tkU2EwMUVWWGRPVkVsNlRrZFZNQ0lzSW1GemJuQkpaQ0k2SW1NM1l6SXhOR1JoTFRjeFl6a3ROR1kyTVMxaE1EbGtMVFEwWmpGak9UVXpZekl6T0NJc0ltTnlaV0YwYVc5dVZHbHRaWE4wWVcxd0lqb3hOakE1TVRNeE1ERXlNRGt6TENKallXTm9aVXhwWm1WMGFXMWxJam95TmpnM09ERTRPRGt3Tnl3aWNtVnpjRzl1YzJWVWVYQmxJam9pUmxKTVgwbE9TVlJKUVV3aUxDSmpZV05vWlVWNGNHbHllVmRoY201cGJtZERiMjUwY205c0lqcDdJbmRoY201cGJtZFRkR0Z5ZEZScGJXVnpkR0Z0Y0NJNk1UWXpOVFF3TkRRd01UQXdNQ3dpZDJGeWJtbHVaMGx1ZEdWeWRtRnNJam80TmpRd01EQXdNSDBzSW1Ob1lXeHNaVzVuWlVOdlpHVnpJanBiSWtKQ04wSkJRMWRZU2pKTFJ6TTJObHBJU2lJc0lrSkNSVVpYU1VJM09VdFFVVVJWU1VWYVNTSmRmUSJ9fSwicHJvZmlsZVNlcnZlclVybCI6Imh0dHBzOi8vbGNzLWNvcHMuYWRvYmUuaW8vIiwicHJvZmlsZVJlcXVlc3RQYXlsb2FkUGFyYW1zIjpudWxsLCJkZXBsb3ltZW50TW9kZSI6IkZSTF9JU09MQVRFRCIsImJyYW5kaW5nIjp7Im5hbWUiOm51bGx9fQ"} -------------------------------------------------------------------------------- /rsrc/files/QnJpZGdlMXt9MjAxODA3MjAwNA-ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0-80.operatingconfig: -------------------------------------------------------------------------------- 1 | {"ocSpecVersion":"1.1","signatures":[{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6NTMsImNlcnRpZmljYXRlRGV0YWlscyI6W3siaWQiOiJRakl5UmtKR1JUUTRSa0UyT1VRelJFSkZOalUwUkRVMVJESkRNRVkzUVRRIiwic3ViamVjdE5hbWUiOiJBZG9iZSBDb250ZW50IENlcnRpZmljYXRlIDQxLTYiLCJoZXhTZXJpYWxOdW1iZXIiOiI2MDE2ZDk4MCIsInNoYTFIYXNoIjoiQUNGMTM4RkVFNUUyQ0Y1MjI5OEI4MzE5QzZCNzA5MjMwMjM1RUYzNiIsInNlcXVlbmNlIjoxLCJkb3dubG9hZFBhdGgiOiJRakl5UmtKR1JUUTRSa0UyT1VRelJFSkZOalUwUkRVMVJESkRNRVkzUVRRLVpHUXpNamhoWTJNdFpURTJZeTAwTlRJMExUZ3pPV0l0WkdSa01EVXdOVEl6TkdVMC5kZXIifSx7ImlkIjoiT1VORE1EazBSRGd3UmtJek5UWTBPVVJCUWtJMlJETTROa1V6UkVSRlFqRSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDQxLTU0IiwiaGV4U2VyaWFsTnVtYmVyIjoiMjNmMzFlNTAiLCJzaGExSGFzaCI6IjA3MjkxRjNFODNCQjQ3NTE3QUZBRENGMzhFRTY0N0E0RkVFNzc2NkUiLCJzZXF1ZW5jZSI6MiwiZG93bmxvYWRQYXRoIjoiT1VORE1EazBSRGd3UmtJek5UWTBPVVJCUWtJMlJETTROa1V6UkVSRlFqRS1aR1F6TWpoaFkyTXRaVEUyWXkwME5USTBMVGd6T1dJdFpHUmtNRFV3TlRJek5HVTAuZGVyIn1dfQ","signature":""},{"header":"eyJjb250ZW50U2lnbmF0dXJlQWxnIjoiUlM1MTIiLCJ0cnVzdGVkQ2VydEZpbmdlcnByaW50QWxnIjoiU0hBLTUxMiIsInRydXN0ZWRDZXJ0RmluZ2VycHJpbnRJbmRleCI6NTIsImNlcnRpZmljYXRlRGV0YWlscyI6W3siaWQiOiJRekJCTjBZMlFrVXlRVFZGTWpneVFUSXlSalZHTXpaR1EwVkNORGswTTBZIiwic3ViamVjdE5hbWUiOiJBZG9iZSBDb250ZW50IENlcnRpZmljYXRlIDQxLTUiLCJoZXhTZXJpYWxOdW1iZXIiOiIzYjJkNzE0YiIsInNoYTFIYXNoIjoiNTBFRTY0OTAzNTQ1N0RBMkY4OENDQTFDRDAzRUYyQzQ3NDc2Nzc5NyIsInNlcXVlbmNlIjoxLCJkb3dubG9hZFBhdGgiOiJRekJCTjBZMlFrVXlRVFZGTWpneVFUSXlSalZHTXpaR1EwVkNORGswTTBZLVpHUXpNamhoWTJNdFpURTJZeTAwTlRJMExUZ3pPV0l0WkdSa01EVXdOVEl6TkdVMC5kZXIifSx7ImlkIjoiTlRRME5rTkZOVEpETUVKRE9ESkJRamN6TVRORVJEaERPVUUxTXpNeE56VSIsInN1YmplY3ROYW1lIjoiQWRvYmUgSW50ZXJtZWRpYXRlIENBIDQxLTUzIiwiaGV4U2VyaWFsTnVtYmVyIjoiNTg4NWI4NDEiLCJzaGExSGFzaCI6IjA5MzZBRjI5QjMyMzFEMUVBOTgwQjQyNkFDOUVFODNDMzdDNzU4NTYiLCJzZXF1ZW5jZSI6MiwiZG93bmxvYWRQYXRoIjoiTlRRME5rTkZOVEpETUVKRE9ESkJRamN6TVRORVJEaERPVUUxTXpNeE56VS1aR1F6TWpoaFkyTXRaVEUyWXkwME5USTBMVGd6T1dJdFpHUmtNRFV3TlRJek5HVTAuZGVyIn1dfQ","signature":""}],"payload":"eyJpZCI6IjI2YzU1NTJmLTg5YjktNGVjYi1hYjM2LWIwOTNlNzNhOTNlNCIsIm5wZElkIjoiWkdRek1qaGhZMk10WlRFMll5MDBOVEkwTFRnek9XSXRaR1JrTURVd05USXpOR1UwIiwibmdsQXBwSWQiOiJCcmlkZ2UxIiwibnBkUHJlY2VkZW5jZSI6ODAsImFzbnBEYXRhIjp7InRlbXBsYXRlSWQiOiJXa2RSZWsxcWFHaFpNazEwV2xSRk1sbDVNREJPVkVrd1RGUm5lazlYU1hSYVIxSnJUVVJWZDA1VVNYcE9SMVV3ZTMxaU5qSTRPVEJpT1MwMU9HWmlMVFEwTmpVdE9XRTNZeTA1WkdVMVptVTVOVFZrTkRjIiwiY3VzdG9tZXJDZXJ0SGVhZGVycyI6W3siaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TXl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklrMUVRa2RTUkdzd1RVVmFSRTVGU1RKTlZVNUZUbnBhUkZGcVJUSlNSVTVEVG1wVk1WRnFUVE5TVlVVaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTkRJdE5pSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJak5pWkRabE1EbGxJaXdpYzJoaE1VaGhjMmdpT2lKRE1UaERSa1E1UTBZNE0wUXlRalpFTVVFeU56QkNNalkwTVVWQ1JUWkRPRVkzTTBSQ09ERTRJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxRVFrZFNSR3N3VFVWYVJFNUZTVEpOVlU1RlRucGFSRkZxUlRKU1JVNURUbXBWTVZGcVRUTlNWVVV0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5TEhzaWFXUWlPaUpTYTAxNlVrVlJNMUpxVlRST2VrRjRUVlZLUms1RlZrSk5WRlpEVVdwWk1WRnFWVFJQUlU1RlQxUk5JaXdpYzNWaWFtVmpkRTVoYldVaU9pSkJaRzlpWlNCSmJuUmxjbTFsWkdsaGRHVWdRMEVnTkRJdE5DSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJall6WkdFek1UY3dJaXdpYzJoaE1VaGhjMmdpT2lKQk1FWXdNMEV3TUVReE5rTTRPVVZDTmtWRFFUZzNNRVUzUlVFMVJETTVSREF5UmtKQ1EwRkRJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWxKclRYcFNSVkV6VW1wVk5FNTZRWGhOVlVwR1RrVldRazFVVmtOUmFsa3hVV3BWTkU5RlRrVlBWRTB0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5WFgwIiwic2lnbmF0dXJlIjoie3tjdXN0b21lclNpZ25hdHVyZTF9fSJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TWl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklrMVViRVZQVlVsNFVtcFdSbEpGV1RKT1ZHUkdVV3BSZDAxcVpFSk9la1pEVWtWVk5GRlVVVFZOYW1zaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTkRJdE5TSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkyT0RWaVlqbGlJaXdpYzJoaE1VaGhjMmdpT2lKQlJESXdOREZEUkVOQ05rVXhNREpET0RNMVJrRTVSVUU0T0VJM1JUUXdNakE0UlRkQ1FqRkRJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxVWJFVlBWVWw0VW1wV1JsSkZXVEpPVkdSR1VXcFJkMDFxWkVKT2VrWkRVa1ZWTkZGVVVUVk5hbXN0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5TEhzaWFXUWlPaUpOUlZVeVRucE5lbEpFYTNwT1JVa3lUbFZKZDFGNlNUTk5ha1pIVDFWUmVVNVVSa2RTVkVGM1RVUlZJaXdpYzNWaWFtVmpkRTVoYldVaU9pSkJaRzlpWlNCSmJuUmxjbTFsWkdsaGRHVWdRMEVnTkRJdE15SXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkzWWpFME1EUTBJaXdpYzJoaE1VaGhjMmdpT2lKQ1JESkNNRVpGTWpKQk1UWXpSRVpCTWtRNU1qQkJNMFl4UlVNeU9FUkZRVFkxTlVRNFJUQTFJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxRlZUSk9lazE2VWtScmVrNUZTVEpPVlVsM1VYcEpNMDFxUmtkUFZWRjVUbFJHUjFKVVFYZE5SRlV0V2tkUmVrMXFhR2haTWsxMFdsUkZNbGw1TURCT1ZFa3dURlJuZWs5WFNYUmFSMUpyVFVSVmQwNVVTWHBPUjFVd0xtUmxjaUo5WFgwIiwic2lnbmF0dXJlIjoie3tjdXN0b21lclNpZ25hdHVyZTJ9fSJ9XSwiYWRvYmVDZXJ0U2lnbmVkVmFsdWVzIjp7InNpZ25hdHVyZXMiOnsic2lnbmF0dXJlMSI6ImJSS1dqd1JtV2RNb25IckRIbmFkb2ZMVUNEMHJfSjE0eDNlbWNLVFNvREkzU21rLUNsSjlEZzh2TWQtUmNScnJVeVZ5LXZNZnRRMDREczhnTDNSMEh0MEtmNkloYV94djloNlFETGF0c05ZSGxqLVJzX3dheUtUU3lqaGdzMzNDNm9Nbko5VUpZNHlhZHFXTTRqZGdHckV3NFIwWWVCWlNKbzBRaXVPekV3TVY4SWxXQUFnMEpweWFZSlo4b0tVUjVhRk1iMlpnYUNVcU43aTRRQldhSU5wUE04TUtLNWwzN0R1SXBCVENYc3djaUF3YU03MC1fOUJkcnFWQnpsWXhOTzhMNU9fZGJSbG1QQTVGejFDUnpIY3JUS05KMldYSG05ekRxM2hpQUVJMzhMaUIyclZtb1dtRERVVmszVC1qMFVQN1VRNDRXczdhbFptNWlsOXVnc2dSbjY2dm9LeWxyV2xtQkJFV3g3eEdjYkZMcGJuNU00cmtDMW5QQWVLXy11N0VMY181MWpwWHhyQUZIRVQ4bEdfWTJ0MWlNbEJfNVdRbFJjR0twZWpEUHEyS2s2V0NXdE9ZeXhkWUlrdnNqcWR2ckVJd0lhUFV1OHZyV3VXZ3h3NjkzNGh6ODlUV3dwZnhHUlp4b21SWVA1Y0FTeEVaY0NTM0N3OFRYWlNBX1N5WlFkeWJZcVhzM0FpeUtuNzRPczJUNjZveWNmMmZSTU8zb0lmMlJOQU0zcTMta0pkNkp2RWFRVWRSNTNaeTJZanQ5NVV6b2t0SjJZZWFwSzRYcDE4eFoycll5akZiRXdQbE45NGp6MTl4SUFYQW9rSElNUzFvQ0hoVUlPeTg2Q0N2Y2tGUndSVmtqMFQ0SVBsTHNEWjJYX2dqaTMtb1ZGNDV5TXZLSF9NIiwic2lnbmF0dXJlMiI6IlpnRlEtdmY1RFlNc1h6eElDMUZibEE5OW8wMThjQWlUZGN4anNkV21RUVlBZnFyanZ3S09GVTFQaWVRdmh4eFh2dGxpbTNtSXg0MmxjZ3VvRERzV3N1WEtFVGdZcVBZNU5oUEZodHNlWk81cXdPaVB2Q0hWaTduRXVpc0tOMjJ6enZEeUdVN25jYjNpTldPT1FfQ0dOQ2duZklUWVpybnlBMHVET1ppbHJTNVFvM1ZySnphSHkwenpiZDRfMWRYUGM3VXJYMHZlZDhBYUpONTBSV29ITHU2empFaDE0Mi1jbGY3UU5MNW9JWVhZcFZ4QUhmQzA4cWdfYkhteG1JUFF3dVdXY3JJa3pZRFVHZlFVa2tmOVI3eUJUOUVqRVVnbkVWbE9TdGhrSkFpR3ptaU9OY1FGRjVSb3AzellaeEF3MzVhWl9JbHpDb0k5enFqbUdQdTd6eHNqeFhYMFZmVzNTWUZZQ2NET3NlMkloaEd0b3F1RDJtSEJXUmxNZ2RiYnFwbDFmZlpyQzNlYkFLYzJhb2FUMUJsMzVIcHdvekxlSzg4ZnNTbHpsVjk1bXUybnVWdTZfUzluc082aGw3aTMyZ25rYi1uNnkxd3hoMzh5Zm0wT2FDRmhjcXFLZUs2TWhHTGkwVDFZbC1BWnhuOEY3cmtlWlFSSkx6NWNxVWE4ZU5KaUs3S2NpTEhyU1Q5a1k5TGJlLUVDbDBpeDZVcEVEVmxPQWhfSThISG9CLWV5RDcyclFlM2Ewc0tma0c3RnlEQllsZVVSS1BUdUg1eFY2N1N1OXUxQWVEalhhNFdBc29rbjFqNE8xUTM4NHNBNEl2V3R2TWNfNWtzcGZHVGVRRnl5aEQ3R2hoSXNHN0c3c2lZNjRocVVVZUJXUmlQSzAyYktJSm9KZzE4In0sInZhbHVlcyI6eyJsaWNlbnNlRXhwaXJ5VGltZXN0YW1wIjoiMTYzNjAwOTIwMTAwMCIsImVuaWdtYURhdGEiOiJ7XFxcInByb2R1Y3RJZFxcXCI6NDUsXFxcInNlcmlhbEtleVxcXCI6XFxcIjEwNDU0NTAxMjM0NTUzNzU1NDkwNzIwOVxcXCIsXFxcImNsZWFyU2VyaWFsS2V5XFxcIjpudWxsLFxcXCJsb2NhbGVcXFwiOlxcXCJBTExcXFwiLFxcXCJhc3NvY2lhdGVkTG9jYWxlc1xcXCI6XFxcIkFMTFxcXCIsXFxcInBsYXRmb3JtXFxcIjowLFxcXCJpc2tcXFwiOjQ1NDA0MixcXFwiY3VzdG9tZXJJZFxcXCI6MCxcXFwiZGVsaXZlcnlNZXRob2RcXFwiOjMsXFxcInBjXFxcIjp0cnVlLFxcXCJyYlxcXCI6ZmFsc2V9IiwiZ3JhY2VUaW1lIjoiMjU5MjAwMDAwMCIsInByb2ZpbGVTdGF0dXMiOiJQUk9GSUxFX0FWQUlMQUJMRSIsImVmZmVjdGl2ZUVuZFRpbWVzdGFtcCI6IjE2MzM0MTcyMDEwMDAiLCJsaWNlbnNlRXhwaXJ5V2FybmluZ1N0YXJ0VGltZXN0YW1wIjoiMTYzNTQwNDQwMTAwMCIsIm5nbExpYlJlZnJlc2hJbnRlcnZhbCI6IjI2ODc4MTg4MzkyIiwibGljZW5zZUlkIjoiOTZDQjdCMTI5QkNBMjEyNEQ0OEEiLCJsaWNlbnNlZEZlYXR1cmVzIjoiW1xcXCJmcmxfbGV2ZWwxXFxcIixcXFwiQU1UX1NVQlNDUklQVElPTl82LjBcXFwiLFxcXCJCcmlkZ2VfQmFzZV80LjBcXFwiLFxcXCJCcmlkZ2VfQmFzZV81LjBcXFwiLFxcXCJCcmlkZ2VfQmFzZV82LjBcXFwiLFxcXCJCcmlkZ2VfQ2FtZXJhUmF3XzQuMFxcXCIsXFxcIkJyaWRnZV9DYW1lcmFSYXdfNS4wXFxcIixcXFwiQnJpZGdlX0NhbWVyYVJhd182LjBcXFwiLFxcXCJCcmlkZ2VfTWluaUJyaWRnZV8xLjBcXFwiLFxcXCJCcmlkZ2VfTWluaUJyaWRnZV8yLjBcXFwiLFxcXCJCcmlkZ2VfTWluaUJyaWRnZV8zLjBcXFwiLFxcXCJFdWNsaWRfQmFzZV8xLjBcXFwiLFxcXCJNb2JpbGVDZW50ZXJfQmFzZV8zLjBcXFwiLFxcXCJQaG90b3Nob3BfMTQuMFxcXCIsXFxcIlBob3Rvc2hvcF9CYXNlXzEyLjBcXFwiLFxcXCJQaG90b3Nob3BfQmFzZV8xMy4wXFxcIixcXFwiUGhvdG9zaG9wX0Jhc2VfMTQuMFxcXCIsXFxcIlBob3Rvc2hvcF9QcmVtaXVtXzEyLjBcXFwiLFxcXCJQaG90b3Nob3BfUHJlbWl1bV8xMy4wXFxcIixcXFwiUGhvdG9zaG9wX1ByZW1pdW1fMTQuMFxcXCJdIiwiYXBwUmVmcmVzaEludGVydmFsIjoiMjY4NzgxODgzOTIiLCJhcHBFbnRpdGxlbWVudFN0YXR1cyI6IlNVQlNDUklQVElPTiJ9fSwiY3VzdG9tZXJDZXJ0U2lnbmVkVmFsdWVzIjp7InNpZ25hdHVyZXMiOnsiY3VzdG9tZXJTaWduYXR1cmUyIjoiSjlwQ2RQMzJGZ2RwOS1rRW5LS3VOMHprNnRSTjcyaUE1dmhtd3pfTDczRXFqLWFRZWpvaWhDN0lEX29GVldscTNGVHI2UjJlaThxVkpXTm9wT3Q4azZ2eU50RnRJMDd2a1JqSTdmWGVkUjFpNFJ2UVkwbllPUGtkc0E3ZFlOTGN4clhPZEw2U21PTDMyWllJZ0loSVBibmJkWnd5bFJGeTdmRGJUWUdpVzgyeWkwZ3QzSmxpNEFKdGhkc2NUWG5yRkh6dVA0NHNnU0dmVldROEtlR1pJR0tHUnVYb05rcmU0akdJNUkxcFBYZ1V3WVRQRFAzZTZoWk94dW52ZEVSZkdLWERQUXVJeEZ4M0Jad3RVYTYtRjZNM1NwNnhGbmVtWW9LM2FfVk9LZjFjTWZvUDJDenh0eHB6R2J3UmZoSU1xUE93YUZVMWVzMHVJc29TUDlELVRRSjlUR2lDZUZtLXRCWVVHUV9VanIwaDJsVDB4NDVhR1BRQWo1a1FISFVnTDhVNzRadkJ1SnZNRFQtUU1BZG5RV1lkUF9aX25BdjBCdmdMNzF3NVhaeVp0TWtmWnVMc3g1Q1k5MENNb2lhU05UOHlFbmprSUd5TmEydjFuWkhyRzQ2aFBONjIwRW1qUU9BVDBjS1RqZlFlNmFQa1RfeDlLZnRWSFdLZ09ncG5pcXZhU1dHT0FOeXlESkQySFlqb2JPWG4yckJuVjNDZDVqYkZ5RTJZMzh0YUR0bG5XYVRiY05hdEFkOW95X21zcWpLZTZmdjMzRDhQc2pWdmN6WW9lQjFQN19BWDNxWjI5aEdBa3ZONjJGS0hoVnpXVGtlSFB4WnNJblhxMWs4aFBRRFFnUWhfX25BYmpqU0ZFYi1HVVJ4R1daSXFnWW91cWF2cmxCTExweXMiLCJjdXN0b21lclNpZ25hdHVyZTEiOiJFZkZCcnV5WWdRU3BDZkNhNk1MNFNwOGN1U1JWRjFZUnZEVWR3cHNWVEN4aUhhakJrNmZQRDZGcGo0Qm5zWHpBUE1Vd2ZrSWdTWm1oNU1ZS3I2NVBCU0dQRVpOZWRKYVJSU0l6TTc1SXBJb25GZjFzZF9mcUpPbmlzMzZiU0MtV0tELXFMZVVyVk1fT1lOQlF3Y1o3U1N2TlJuSmM2djM5OUVDTTI0TVItX2JOemFvUmtGZGM1VEtMN0dhQ01KOGJ3VHg5M3hJVy10WVJ0SWxIblhpSUJ3eGFRNFdDQkJqOU5PZ2t5VzE3bFEyQWg1ekYxNktsb25MamtId2F1TExMbUd2SVBxekRtM3pBb2NfdnA3SmYwVlNuTDIxTDcxVTdtSDdSWWI0UnpwTGlUeTlKZ2VJaFFxcUx3Unl1bnViNFJPSnZFcGtfVDZjcl80UFhMVnhGWnZmZnJya3hUTV96WWx6dlpPZHFIME5ZOWl5VW0xbFpqZGUtUVNLanB2bkxyLWk5RHRsa2x0VW02bngzN2JqMzU1cURQVXl3QjBwcVVrU1lZZk1FNTB6aGU0VE85ZFZvazM4Skdzd2lITEt3alhYTFlGSDNDemd5VEJ0cnB5dVdCblJydTZSZ0psaG9CWXRMY21TSmNVYmFKWGRtejJmeU1BTU5IbTBOVEZHWU13N0FwOHlSNXoxamdiUEVPYnJrMkU3MzNlaGV3N2kwNHZFQU53TDV1WEJnaHg3NUlpUlplcDE0Y294LUtCUm1QcEtVRnFVTTJsMHpMekJpOW5UWGR1bDJhX1JxX0R5c0tBczhsMEdBWXJ4WTBjelpLVDhQUEM0b2JOeVVvdHZyYi1mTlk0WFBMQjlpSE5hNlgxLWdDYWhDT2MzbUhTZVpLbC1MYkJKd2xxUSJ9LCJ2YWx1ZXMiOiJleUp1Y0dSSlpDSTZJbHBIVVhwTmFtaG9XVEpOZEZwVVJUSlplVEF3VGxSSk1FeFVaM3BQVjBsMFdrZFNhMDFFVlhkT1ZFbDZUa2RWTUNJc0ltRnpibkJKWkNJNklqTmxZVEpoWkRRd0xUTXpZVFl0TkRFd015MWhZV0kwTFRrME5USm1ZV0pqTkdaa09TSXNJbU55WldGMGFXOXVWR2x0WlhOMFlXMXdJam94TmpBNU1UTXhNREV5TlRZNUxDSmpZV05vWlV4cFptVjBhVzFsSWpveU5qZzNPREU0T0RRek1Td2ljbVZ6Y0c5dWMyVlVlWEJsSWpvaVJsSk1YMGxPU1ZSSlFVd2lMQ0pqWVdOb1pVVjRjR2x5ZVZkaGNtNXBibWREYjI1MGNtOXNJanA3SW5kaGNtNXBibWRUZEdGeWRGUnBiV1Z6ZEdGdGNDSTZNVFl6TlRRd05EUXdNVEF3TUN3aWQyRnlibWx1WjBsdWRHVnlkbUZzSWpvNE5qUXdNREF3TUgwc0ltTm9ZV3hzWlc1blpVTnZaR1Z6SWpwYklrSkNOMEpCUTFkWVNqSkxSek0yTmxwSVNpSXNJa0pDUlVaWFNVSTNPVXRRVVVSVlNVVmFTU0pkZlEifX0sInByb2ZpbGVTZXJ2ZXJVcmwiOiJodHRwczovL2xjcy1jb3BzLmFkb2JlLmlvLyIsInByb2ZpbGVSZXF1ZXN0UGF5bG9hZFBhcmFtcyI6bnVsbCwiZGVwbG95bWVudE1vZGUiOiJGUkxfSVNPTEFURUQiLCJicmFuZGluZyI6eyJuYW1lIjpudWxsfX0"} -------------------------------------------------------------------------------- /src/types.rs: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 Adobe 3 | All Rights Reserved. 4 | 5 | NOTICE: Adobe permits you to use, modify, and distribute this file in 6 | accordance with the terms of the Adobe license agreement accompanying 7 | it. 8 | */ 9 | use self::DeploymentMode::*; 10 | use self::Precedence::*; 11 | use crate::utilities::*; 12 | use eyre::{eyre, Result, WrapErr}; 13 | use std::io::Read; 14 | use std::str::from_utf8; 15 | 16 | pub struct OperatingConfig { 17 | pub filename: String, 18 | pub app_id: String, 19 | pub cert_group_id: String, 20 | pub npd_id: String, 21 | pub package_id: String, 22 | pub precedence: Precedence, 23 | pub mode: DeploymentMode, 24 | pub expiry_date: String, 25 | pub install_datetime: String, 26 | } 27 | 28 | impl OperatingConfig { 29 | fn from_file_info(info: &FileInfo) -> Result { 30 | let err = || eyre!("Invalid license file name: {}", info.name); 31 | let name_parts: Vec<&str> = info.name.split('-').collect(); 32 | if name_parts.len() < 3 { 33 | return Err(eyre!("Invalid license file name format: {}", info.name)); 34 | } 35 | let npd_id = name_parts[1].to_string(); 36 | let precedence = Precedence::from(name_parts[2]).wrap_err_with(err)?; 37 | let app_part = u64decode(name_parts[0]).wrap_err_with(err)?; 38 | let package_id = u64decode(&npd_id).wrap_err_with(err)?; 39 | let app_info: Vec<&str> = app_part.split("{}").collect(); 40 | if app_info.len() < 2 { 41 | return Err(eyre!("Invalid license file initial section: {}", info.name)); 42 | } 43 | let app_id = app_info[0].to_string(); 44 | let cert_group_id = app_info[1].to_string(); 45 | Ok(OperatingConfig { 46 | filename: info.filename.to_string(), 47 | app_id, 48 | cert_group_id, 49 | npd_id, 50 | package_id, 51 | precedence, 52 | mode: Unknown(String::from("Unknown")), 53 | expiry_date: String::from("Unknown"), 54 | install_datetime: info.mod_date.to_string(), 55 | }) 56 | } 57 | 58 | fn from_preconditioning_data(data: &JsonMap) -> Result { 59 | let err = || eyre!("Invalid preconditioning data: bad license file name"); 60 | let info = FileInfo::from_name_and_extension( 61 | data["name"].as_str().ok_or_else(err)?, 62 | data["extension"].as_str().ok_or_else(err)?, 63 | )?; 64 | let err = || eyre!("Invalid preconditioning data: bad license content"); 65 | let mut result = OperatingConfig::from_file_info(&info)?; 66 | let content = data["content"].as_str().ok_or_else(err)?; 67 | let content = json_from_base64(content).wrap_err_with(err)?; 68 | result.update_from_license_data(&content)?; 69 | Ok(result) 70 | } 71 | 72 | pub fn from_license_file(info: &FileInfo) -> Result { 73 | let mut result = OperatingConfig::from_file_info(info)?; 74 | let data = json_from_file(info)?; 75 | result.update_from_license_data(&data)?; 76 | Ok(result) 77 | } 78 | 79 | fn update_from_license_data(&mut self, data: &JsonMap) -> Result<()> { 80 | let err = || eyre!("License data is invalid: {}", self.filename); 81 | let payload = data["payload"].as_str().ok_or_else(err)?; 82 | let payload = json_from_base64(payload)?; 83 | let mode_string = payload["deploymentMode"].as_str().ok_or_else(err)?; 84 | self.mode = match mode_string { 85 | "NAMED_USER_EDUCATION_LAB" => Sdl, 86 | "FRL_CONNECTED" => { 87 | let server = payload["profileServerUrl"] 88 | .as_str() 89 | .unwrap_or("http://lcs-cops.adobe.io") 90 | .to_string(); 91 | FrlOnline(server) 92 | } 93 | "FRL_LAN" => { 94 | let server = payload["profileServerUrl"] 95 | .as_str() 96 | .ok_or_else(err)? 97 | .to_string(); 98 | FrlLan(server) 99 | } 100 | "FRL_ISOLATED" => { 101 | let values = payload["asnpData"]["customerCertSignedValues"]["values"] 102 | .as_str() 103 | .ok_or_else(err)?; 104 | let values = json_from_base64(values)?; 105 | let codes: Vec = 106 | serde_json::from_value(values["challengeCodes"].clone())?; 107 | let code0 = codes.get(0).ok_or_else(err)?; 108 | if code0.len() > 18 { 109 | FrlOffline 110 | } else { 111 | let codes = codes 112 | .iter() 113 | .map(|code| { 114 | if code.len() != 18 { 115 | "invalid-census-code".to_string() 116 | } else { 117 | format!( 118 | "{}-{}-{}", 119 | &code[0..6], 120 | &code[6..12], 121 | &code[12..18] 122 | ) 123 | } 124 | }) 125 | .collect(); 126 | FrlIsolated(codes) 127 | } 128 | } 129 | s => Unknown(s.to_string()), 130 | }; 131 | if let Some(expiry_timestamp) = payload["asnpData"]["adobeCertSignedValues"] 132 | ["values"]["licenseExpiryTimestamp"] 133 | .as_str() 134 | { 135 | self.expiry_date = date_from_epoch_millis(expiry_timestamp)?; 136 | } else { 137 | self.expiry_date = "controlled by server".to_string(); 138 | } 139 | Ok(()) 140 | } 141 | 142 | fn from_preconditioning_json(data: &JsonMap) -> Result> { 143 | let oc_vec: Vec = 144 | serde_json::from_value(data["operatingConfigs"].clone())?; 145 | let mut result: Vec = Vec::new(); 146 | for oc_data in oc_vec { 147 | result.push(OperatingConfig::from_preconditioning_data(&oc_data)?) 148 | } 149 | result.sort_by(|oc1, oc2| oc1.app_id.cmp(&oc2.app_id)); 150 | Ok(result) 151 | } 152 | 153 | pub fn from_preconditioning_file(info: &FileInfo) -> Result> { 154 | let data = json_from_file(info)?; 155 | OperatingConfig::from_preconditioning_json(&data) 156 | } 157 | 158 | pub fn from_ccp_file(info: &FileInfo) -> Result> { 159 | let bytes = std::fs::read(&info.pathname).wrap_err("Cannot read ccp file")?; 160 | // on Windows, this may be a zip file, and we need to extract 161 | // the PkgConfig.xml file from it 162 | let reader = std::io::Cursor::new(&bytes); 163 | let html = if let Ok(mut archive) = zip::ZipArchive::new(reader) { 164 | let mut file = archive 165 | .by_name("PkgConfig.xml") 166 | .map_err(|e| eyre!(e)) 167 | .wrap_err("Can't find configuration data in ccp archive")?; 168 | let mut buffer = String::new(); 169 | file.read_to_string(&mut buffer) 170 | .wrap_err("Can't read configuration data from ccp archive")?; 171 | buffer 172 | } else { 173 | from_utf8(&bytes) 174 | .wrap_err("Invalid ccp file format")? 175 | .to_string() 176 | }; 177 | let doc = visdom::Vis::load(&html) 178 | .map_err(|e| eyre!("{}", e)) 179 | .wrap_err("Cannot parse ccp file")?; 180 | let data_node = doc.find("Preconditioning"); 181 | let data = data_node.text(); 182 | let data: JsonMap = serde_json::from_str(data) 183 | .wrap_err("Can't parse preconditioning data in ccp file")?; 184 | OperatingConfig::from_preconditioning_json(&data) 185 | } 186 | 187 | pub fn get_cached_expiry(&self) -> Result { 188 | let err = || eyre!("Malformed license"); 189 | let app_name = self.app_id.as_str(); 190 | // each type of licensing uses a different cert group for cached data 191 | let cert_group_base = &self.cert_group_id[..self.cert_group_id.len() - 2]; 192 | let cert_group_suffix = match self.mode { 193 | FrlOnline(_) => "03", 194 | FrlOffline => "06", 195 | FrlIsolated(_) => "06", 196 | FrlLan(_) => "09", 197 | Sdl => "13", 198 | Unknown(_) => &self.cert_group_id[self.cert_group_id.len() - 2..], 199 | }; 200 | let cert_name = format!("{}{}", cert_group_base, cert_group_suffix); 201 | let note_key = u64encode(&format!("{}{{}}{}", app_name, &cert_name))?; 202 | let note = get_saved_credential(¬e_key)?; 203 | let json = json_from_str(¬e)?; 204 | // npdId is in the customer ASNP 205 | let asnp = json["custAsnp"].as_str().ok_or_else(err)?; 206 | let inner_json = json_from_str(asnp)?; 207 | let payload = inner_json["payload"].as_str().ok_or_else(err)?; 208 | let inner_json = json_from_base64(payload)?; 209 | let npd_id = inner_json["npdId"].as_str().ok_or_else(err)?; 210 | if !self.npd_id.eq_ignore_ascii_case(npd_id) { 211 | return Err(eyre!("Cached npdId does not match license npdId")); 212 | } 213 | // legacy profile is in the Adobe ASNP 214 | let asnp = json["asnp"].as_str().ok_or_else(err)?; 215 | let inner_json = json_from_str(asnp)?; 216 | let payload = inner_json["payload"].as_str().ok_or_else(err)?; 217 | let inner_json = json_from_base64(payload)?; 218 | let legacy_profile = inner_json["legacyProfile"].as_str().ok_or_else(err)?; 219 | let json = json_from_str(legacy_profile)?; 220 | let timestamp = json["effectiveEndTimestamp"].as_i64().ok_or_else(err)?; 221 | Ok(timestamp.to_string()) 222 | } 223 | } 224 | 225 | #[cfg(target_os = "macos")] 226 | fn get_saved_credential(key: &str) -> Result { 227 | let service = format!("Adobe App Info ({})", &key); 228 | let keyring = keyring::Entry::new(&service, "App Info"); 229 | keyring.get_password().map_err(|e| eyre!(e)) 230 | } 231 | 232 | #[cfg(target_os = "windows")] 233 | fn get_saved_credential(key: &str) -> Result { 234 | let mut result = String::new(); 235 | for i in 1..100 { 236 | let service = format!("Adobe App Info ({})(Part{})", key, i); 237 | let keyring = keyring::Entry::new_with_target(&service, &service, "App Info"); 238 | let note = keyring.get_password(); 239 | if let Ok(note) = note { 240 | result.push_str(note.trim()); 241 | } else { 242 | break; 243 | } 244 | } 245 | if result.is_empty() { 246 | Err(eyre!("No credential data found")) 247 | } else { 248 | Ok(result) 249 | } 250 | } 251 | 252 | pub enum DeploymentMode { 253 | FrlOnline(String), 254 | FrlOffline, 255 | FrlIsolated(Vec), 256 | FrlLan(String), 257 | Sdl, 258 | Unknown(String), 259 | } 260 | 261 | impl std::fmt::Display for DeploymentMode { 262 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 263 | match self { 264 | FrlOnline(server) => format!("FRL Online (server: {})", server).fmt(f), 265 | FrlOffline => "FRL Offline".fmt(f), 266 | FrlIsolated(codes) => match codes.len() { 267 | 1 => "FRL Isolated (1 census code)".fmt(f), 268 | n => format!("FRL Isolated ({} census codes)", n).fmt(f), 269 | }, 270 | FrlLan(server) => format!("FRL LAN (server: {})", server).fmt(f), 271 | Sdl => "SDL".fmt(f), 272 | Unknown(s) => s.fmt(f), 273 | } 274 | } 275 | } 276 | 277 | pub enum Precedence { 278 | AcrobatStandard = 70, 279 | AcrobatPro = 100, 280 | CcSingleApp = 80, 281 | CcAllApps = 90, 282 | } 283 | 284 | impl std::fmt::Display for Precedence { 285 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 286 | match self { 287 | AcrobatStandard => "70 (Acrobat Standard)".fmt(f), 288 | AcrobatPro => "100 (Acrobat Pro)".fmt(f), 289 | CcSingleApp => "80 (CC Single App)".fmt(f), 290 | CcAllApps => "90 (CC All Apps)".fmt(f), 291 | } 292 | } 293 | } 294 | 295 | impl Precedence { 296 | pub fn from(s: &str) -> Result { 297 | match s { 298 | "70" => Ok(AcrobatStandard), 299 | "100" => Ok(AcrobatPro), 300 | "80" => Ok(CcSingleApp), 301 | "90" => Ok(CcAllApps), 302 | _ => Err(eyre!("Precedence ({}) must be 70, 80, 90, or 100", s)), 303 | } 304 | } 305 | } 306 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Adobe License Decoder 2 | 3 | [![Rust CI (stable)](https://github.com/adobe/adobe-license-decoder.rs/workflows/Rust%20CI%20(stable)/badge.svg)](https://github.com/adobe/adobe-license-decoder.rs/actions?query=workflow%3A%22Rust+CI+%28stable%29%22) 4 | 5 | Anyone who has worked with FRL or SDL licensing is familiar with the adobe-licensing-toolkit command-line tool for Mac and Windows. This tool runs on client machines in the context of a particular user account and provides information about the state of FRL and SDL licenses that are installed on the machine, including: 6 | 7 | - the so-called "npdId" (also known as the "package id") of the license; 8 | - whether the license is activated for the given user; and 9 | - if activated, what the expiration date is of the license. 10 | 11 | While this information is invaluable, it's specific to the user account it is run in, and it doesn't give any general information about the licenses that are installed on the machine that haven't been used. 12 | 13 | Enter the `adobe-license-decoder`, a different command-line tool that can tell you about FRL and SDL license files both before and after installation. This tool can examine globally-installed SDL and FRL license files and tell you which apps they are for, which packages they are from, when they were installed, when they expire, and so on. It's like a "secret decoder ring" for the licenses! 14 | 15 | ## Installation 16 | 17 | The adobe-license-decoder is a command line tool that doesn't require any special privileges. So to install it on a given machine, just download the appropriate Mac or Win binary from the [latest release page](https://github.com/adobeDan/adobe-license-decoder.rs/releases/latest), rename it without the platform suffix (to `adobe-license-decoder` or `adobe-license-decoder.exe`), and put it somewhere in your command-line search path. It can then be invoked as `adobe-license-decoder` from any command line (examples below). 18 | 19 | ## Usage 20 | 21 | If invoked without any command-line arguments, the adobe-license-decoder will look for a globally installed OperatingConfigs directory, and decode all the license files found in that directory. 22 | 23 | If you have some other directory that you want it to look in for license files (for example, if your customer zipped up their OperatingConfigs directory and sent the zip to you), just name that directory on the command line, as in: 24 | 25 | ``` 26 | adobe-license-decoder customer-license-files 27 | ``` 28 | 29 | If you have a package, you can invoke the decoder on the package directory (the root of the expanded zip file) as well. This works both for packages that include apps and for license-only packages. For example: 30 | 31 | ``` 32 | adobe-license-decoder online-illustrator_en_US 33 | ``` 34 | 35 | Finally, if you have a single license file (a file whose name ends in `operatingconfig`), a single preconditioning file (a JSON file that can be installed by the `adobe-licensing-toolkit`), or a single package description file (a file whose name ends in `.ccp`) that you want decoded, you can specify the name of the file itself instead of a directory, as in: 36 | 37 | ``` 38 | adobe-license-decoder ngl-preconditioning-data.json 39 | ``` 40 | 41 | In addition to the (optional) directory or file argument, the decoder takes an optional `-v` flag that causes the report it produces to give more information about packages, such as showing the specific census codes in FRL Isolated packages. If you specify this flag more than once (`-vv`), then the decoder will look in the current user's credential store to find locally cached licenses for installed packages. The next section shows some examples of the additional information. 42 | 43 | ## How to Read the Decoder's Reports 44 | 45 | The following is a sample run of the adobe-license-decoder tool on a FRL Online package. It shows the common data for the package at the top, followed by a list of the applications licensed by the package. You can see immediately that it's an FRL Online package, that it was built against the standard server endpoint, that it's for a CC All Apps license, and so on. 46 | 47 | ``` 48 | $ adobe-license-decoder online-default-allapps 49 | Preconditioning data for npdId: NzBjZmVlYWItNzc2Ni00ZTNiLTk4NjQtNjczYjc5ZDM2ZGRk 50 | License type: FRL Online (server: https://lcs-cops.adobe.io/) 51 | License expiry date: controlled by server 52 | Precedence: 90 (CC All Apps) 53 | Application Licenses: 54 | 1: App ID: AcrobatDC1 55 | 2: App ID: AfterEffects1 56 | 3: App ID: Animate1 57 | 4: App ID: Audition1 58 | 5: App ID: Bridge1 59 | 6: App ID: CharacterAnimator1 60 | 7: App ID: Dreamweaver1 61 | 8: App ID: Illustrator1 62 | 9: App ID: InCopy1 63 | 10: App ID: InDesign1 64 | 11: App ID: LightroomClassic1 65 | 12: App ID: MediaEncoder1 66 | 13: App ID: Photoshop1 67 | 14: App ID: Prelude1 68 | 15: App ID: PremierePro1 69 | ``` 70 | 71 | Suppose we were to install the package above, using this command line (on Mac): 72 | 73 | ``` 74 | $ sudo adobe-licensing-toolkit -p -i -f online-default-allapps/ngl-preconditioning-data.json 75 | ``` 76 | 77 | Then we could run the decoder with no arguments, and it would find the installed operating config files (as shown in the run below). Since all the license files are for the same package, it still groups the package-specific information at the top of the list (but notice it now says "License files for" instead of "Preconditioning data for"). Then it shows the license-file-specific info for each of the licenses that are installed, giving the filename of the relevant operating configuration file (elided so it doesn't repeat the npdId segment of the filename each time), the specific application that license file is for, and the install date of the license file. The install date is important, because on a machine that has multiple packages installed, and thus has multiple license files of the same precedence for the same application, it's the most recently installed license file that will be used by the app when it launches. (You may notice that the install dates don't match the order in which the files are listed: that's because the listings are always sorted by Application ID, but the adobe-licensing-toolkit installation is done in the order the app entries happen to appear in the preconditioning file.) 78 | 79 | ``` 80 | $ adobe-license-decoder 81 | License files for npdId: NzBjZmVlYWItNzc2Ni00ZTNiLTk4NjQtNjczYjc5ZDM2ZGRk: 82 | License type: FRL Online (server: https://lcs-cops.adobe.io/) 83 | License expiry date: controlled by server 84 | Precedence: 90 (CC All Apps) 85 | Filenames (shown with '...' where the npdId appears): 86 | 1: QWNyb2JhdERDMXt9MjAxODA3MjAwNA-...-90.operatingconfig 87 | App ID: AcrobatDC1 88 | Install date: 2020-12-27 16:26:19 -08:00 89 | 2: QWZ0ZXJFZmZlY3RzMXt9MjAxODA3MjAwNA-...-90.operatingconfig 90 | App ID: AfterEffects1 91 | Install date: 2020-12-27 16:26:18 -08:00 92 | 3: QW5pbWF0ZTF7fTIwMTgwNzIwMDQ-...-90.operatingconfig 93 | App ID: Animate1 94 | Install date: 2020-12-27 16:26:06 -08:00 95 | 4: QXVkaXRpb24xe30yMDE4MDcyMDA0-...-90.operatingconfig 96 | App ID: Audition1 97 | Install date: 2020-12-27 16:26:11 -08:00 98 | 5: QnJpZGdlMXt9MjAxODA3MjAwNA-...-90.operatingconfig 99 | App ID: Bridge1 100 | Install date: 2020-12-27 16:26:17 -08:00 101 | 6: Q2hhcmFjdGVyQW5pbWF0b3Ixe30yMDE4MDcyMDA0-...-90.operatingconfig 102 | App ID: CharacterAnimator1 103 | Install date: 2020-12-27 16:26:12 -08:00 104 | 7: RHJlYW13ZWF2ZXIxe30yMDE4MDcyMDA0-...-90.operatingconfig 105 | App ID: Dreamweaver1 106 | Install date: 2020-12-27 16:26:09 -08:00 107 | 8: SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-...-90.operatingconfig 108 | App ID: Illustrator1 109 | Install date: 2020-12-27 16:26:05 -08:00 110 | 9: SW5Db3B5MXt9MjAxODA3MjAwNA-...-90.operatingconfig 111 | App ID: InCopy1 112 | Install date: 2020-12-27 16:26:07 -08:00 113 | 10: SW5EZXNpZ24xe30yMDE4MDcyMDA0-...-90.operatingconfig 114 | App ID: InDesign1 115 | Install date: 2020-12-27 16:26:16 -08:00 116 | 11: TGlnaHRyb29tQ2xhc3NpYzF7fTIwMTgwNzIwMDQ-...-90.operatingconfig 117 | App ID: LightroomClassic1 118 | Install date: 2020-12-27 16:26:13 -08:00 119 | 12: TWVkaWFFbmNvZGVyMXt9MjAxODA3MjAwNA-...-90.operatingconfig 120 | App ID: MediaEncoder1 121 | Install date: 2020-12-27 16:26:08 -08:00 122 | 13: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-90.operatingconfig 123 | App ID: Photoshop1 124 | Install date: 2020-12-27 16:26:10 -08:00 125 | 14: UHJlbHVkZTF7fTIwMTgwNzIwMDQ-...-90.operatingconfig 126 | App ID: Prelude1 127 | Install date: 2020-12-27 16:26:15 -08:00 128 | 15: UHJlbWllcmVQcm8xe30yMDE4MDcyMDA0-...-90.operatingconfig 129 | App ID: PremierePro1 130 | Install date: 2020-12-27 16:26:14 -08:00 131 | ``` 132 | 133 | Next, let's look at the information given about an FRL Isolated license. Here we run the toolkit before installing the package, then install the package, then run the toolkit again afterwards. Notice that, since this license doesn't contact a server, its expiration date is built into the package, so the decoder can tell you when the license will expire - this date includes the one-month grace past contract end we always give; it's the date that the apps will actually stop working. Also, notice that this is a single-app license, as revealed by its precedence. Finally, notice that we have specified the `-v` command-line flag so as to get additional information printed about the license (the Package UUID, the list of census codes for licensed machines, and the IDs of the certificate group in each license). 134 | 135 | ``` 136 | $ adobe-license-decoder -v isolated-photoshop/ 137 | Preconditioning data for npdId: ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0 138 | Package UUID: dd328acc-e16c-4524-839b-ddd0505234e4 139 | License type: FRL Isolated (2 codes) 140 | License codes: BB7BAC-WXJ2KG-366ZHJ, BBEFWI-B79KPQ-DUIEZI 141 | License expiry date: 2021-11-04 142 | Precedence: 80 (CC Single App) 143 | Application Licenses: 144 | 1: App ID: Bridge1, Certificate Group: 2018072004 145 | 2: App ID: Photoshop1, Certificate Group: 2018072004 146 | $ sudo adobe-licensing-toolkit -p -i -f isolated-photoshop/ngl-preconditioning-data.json 147 | Adobe Licensing Toolkit (1.1.0.91) 148 | Operation Successfully Completed 149 | $ adobe-license-decoder -v 150 | License files for npdId: ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0: 151 | Package UUID: dd328acc-e16c-4524-839b-ddd0505234e4 152 | License type: FRL Isolated (2 codes) 153 | License codes: BB7BAC-WXJ2KG-366ZHJ, BBEFWI-B79KPQ-DUIEZI 154 | License expiry date: 2021-11-04 155 | Precedence: 80 (CC Single App) 156 | Filenames (shown with '...' where the npdId appears): 157 | 1: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig 158 | App ID: Bridge1, Certificate Group: 2018072004 159 | Install date: 2020-12-27 21:01:40 -08:00 160 | 2: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-80.operatingconfig 161 | App ID: Photoshop1, Certificate Group: 2018072004 162 | Install date: 2020-12-27 21:01:39 -08:00 163 | ``` 164 | 165 | Next, let's look at a run where we have installed a LAN package on top of the Isolated package. (As above, we run the decoder over the package, then we install it, then we run the decoder to see what license files are on the machine.). Because the LAN package and the Isolated package are both single-app packages, their licenses have the same precedence, so where there are two license files for the same application (in this case, Bridge), the LAN package will win because it has the later installation date. It's in situations like these - where customers have installed two different packages on top of each other, that the decoder tool can really come in handy in understanding what's happened and in getting it fixed. 166 | 167 | ``` 168 | $ adobe-license-decoder lan-illustrator 169 | Preconditioning data for npdId: OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx 170 | License type: FRL LAN (server: https://test:123) 171 | License expiry date: controlled by server 172 | Precedence: 80 (CC Single App) 173 | Application Licenses: 174 | 1: App ID: Bridge1 175 | 2: App ID: Illustrator1 176 | $ sudo adobe-licensing-toolkit -p -i -f lan-illustrator/ngl-preconditioning-data.json 177 | Adobe Licensing Toolkit (1.1.0.91) 178 | Operation Successfully Completed 179 | $ adobe-license-decoder 180 | License files for npdId: OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx: 181 | License type: FRL LAN (server: https://test:123) 182 | License expiry date: controlled by server 183 | Precedence: 80 (CC Single App) 184 | Filenames (shown with '...' where the npdId appears): 185 | 1: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig 186 | App ID: Bridge1 187 | Install date: 2020-12-27 21:04:14 -08:00 188 | 2: SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-...-80.operatingconfig 189 | App ID: Illustrator1 190 | Install date: 2020-12-27 21:04:13 -08:00 191 | License files for npdId: ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0: 192 | License type: FRL Isolated (2 codes) 193 | License expiry date: 2021-11-04 194 | Precedence: 80 (CC Single App) 195 | Filenames (shown with '...' where the npdId appears): 196 | 3: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig 197 | App ID: Bridge1 198 | Install date: 2020-12-27 21:01:40 -08:00 199 | 4: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-80.operatingconfig 200 | App ID: Photoshop1 201 | Install date: 2020-12-27 21:01:39 -08:00 202 | ``` 203 | 204 | Finally, let's look at a case where we have installed a Online package that uses an FRL proxy, and let's specify the `-vv` flag to look for locally cached licenses. As you can see, the Photoshop application has been activated (and its expiration date is listed), but the Bridge application has not. (On Mac, this command will typically pop up a dialog asking for permission to read each license in the login keychain. Specify `Always Allow` in this dialog to prevent the dialog from appearing again.) 205 | 206 | ``` 207 | $ adobe-license-decoder -vv 208 | License files for npdId: ODU0YjU5OGQtOTE1Ni00NDZiLWFlZDYtMGQ1ZGM2ZmVhZDBi: 209 | Package UUID: 854b598d-9156-446b-aed6-0d5dc6fead0b 210 | License type: FRL Online (server: https://frl-proxy.brotsky.net:8443) 211 | License expiry date: controlled by server 212 | Precedence: 80 (CC Single App) 213 | Filenames (shown with '...' where the npdId appears): 214 | 1: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig 215 | App ID: Bridge1, Certificate Group: 2018072004 216 | Install date: 2021-02-17 22:49:32 -08:00 217 | No cached activation 218 | 2: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-80.operatingconfig 219 | App ID: Photoshop1, Certificate Group: 2018072004 220 | Install date: 2021-02-17 22:49:31 -08:00 221 | Cached activation expires: 2021-10-05 222 | ``` 223 | 224 | ## Support 225 | 226 | This tool is maintained by the Adobe DME Premium Onboarding team. If you need support or just have questions about the `adobe-license-decoder`, please file an issue against this project. 227 | 228 | ## Contributing 229 | 230 | Contributions are welcomed! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information. 231 | 232 | ## License 233 | 234 | This project is licensed under the MIT License. See [LICENSE](LICENSE) for more information. 235 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler" 7 | version = "1.0.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 10 | 11 | [[package]] 12 | name = "adobe_license_decoder" 13 | version = "1.4.2" 14 | dependencies = [ 15 | "base64", 16 | "chrono", 17 | "eyre", 18 | "glob", 19 | "keyring", 20 | "serde_json", 21 | "shellexpand", 22 | "structopt", 23 | "visdom", 24 | "zip", 25 | ] 26 | 27 | [[package]] 28 | name = "aes" 29 | version = "0.7.5" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" 32 | dependencies = [ 33 | "cfg-if", 34 | "cipher", 35 | "cpufeatures", 36 | "opaque-debug", 37 | ] 38 | 39 | [[package]] 40 | name = "aho-corasick" 41 | version = "0.7.19" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" 44 | dependencies = [ 45 | "memchr", 46 | ] 47 | 48 | [[package]] 49 | name = "android_system_properties" 50 | version = "0.1.5" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 53 | dependencies = [ 54 | "libc", 55 | ] 56 | 57 | [[package]] 58 | name = "ansi_term" 59 | version = "0.12.1" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 62 | dependencies = [ 63 | "winapi", 64 | ] 65 | 66 | [[package]] 67 | name = "async-io" 68 | version = "1.9.0" 69 | source = "registry+https://github.com/rust-lang/crates.io-index" 70 | checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" 71 | dependencies = [ 72 | "autocfg", 73 | "concurrent-queue", 74 | "futures-lite", 75 | "libc", 76 | "log", 77 | "once_cell", 78 | "parking", 79 | "polling", 80 | "slab", 81 | "socket2", 82 | "waker-fn", 83 | "winapi", 84 | ] 85 | 86 | [[package]] 87 | name = "atty" 88 | version = "0.2.14" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 91 | dependencies = [ 92 | "hermit-abi", 93 | "libc", 94 | "winapi", 95 | ] 96 | 97 | [[package]] 98 | name = "autocfg" 99 | version = "1.1.0" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 102 | 103 | [[package]] 104 | name = "base64" 105 | version = "0.13.0" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 108 | 109 | [[package]] 110 | name = "bitflags" 111 | version = "1.3.2" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 114 | 115 | [[package]] 116 | name = "block-buffer" 117 | version = "0.9.0" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 120 | dependencies = [ 121 | "generic-array", 122 | ] 123 | 124 | [[package]] 125 | name = "block-modes" 126 | version = "0.8.1" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" 129 | dependencies = [ 130 | "block-padding", 131 | "cipher", 132 | ] 133 | 134 | [[package]] 135 | name = "block-padding" 136 | version = "0.2.1" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 139 | 140 | [[package]] 141 | name = "bumpalo" 142 | version = "3.11.0" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" 145 | 146 | [[package]] 147 | name = "byteorder" 148 | version = "1.4.3" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 151 | 152 | [[package]] 153 | name = "bzip2" 154 | version = "0.4.3" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" 157 | dependencies = [ 158 | "bzip2-sys", 159 | "libc", 160 | ] 161 | 162 | [[package]] 163 | name = "bzip2-sys" 164 | version = "0.1.11+1.0.8" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" 167 | dependencies = [ 168 | "cc", 169 | "libc", 170 | "pkg-config", 171 | ] 172 | 173 | [[package]] 174 | name = "cache-padded" 175 | version = "1.2.0" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" 178 | 179 | [[package]] 180 | name = "cc" 181 | version = "1.0.73" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 184 | 185 | [[package]] 186 | name = "cfg-if" 187 | version = "1.0.0" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 190 | 191 | [[package]] 192 | name = "chrono" 193 | version = "0.4.22" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" 196 | dependencies = [ 197 | "iana-time-zone", 198 | "js-sys", 199 | "num-integer", 200 | "num-traits", 201 | "time", 202 | "wasm-bindgen", 203 | "winapi", 204 | ] 205 | 206 | [[package]] 207 | name = "cipher" 208 | version = "0.3.0" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 211 | dependencies = [ 212 | "generic-array", 213 | ] 214 | 215 | [[package]] 216 | name = "clap" 217 | version = "2.34.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 220 | dependencies = [ 221 | "ansi_term", 222 | "atty", 223 | "bitflags", 224 | "strsim", 225 | "term_size", 226 | "textwrap", 227 | "unicode-width", 228 | "vec_map", 229 | ] 230 | 231 | [[package]] 232 | name = "concurrent-queue" 233 | version = "1.2.4" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" 236 | dependencies = [ 237 | "cache-padded", 238 | ] 239 | 240 | [[package]] 241 | name = "core-foundation" 242 | version = "0.9.3" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 245 | dependencies = [ 246 | "core-foundation-sys", 247 | "libc", 248 | ] 249 | 250 | [[package]] 251 | name = "core-foundation-sys" 252 | version = "0.8.3" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 255 | 256 | [[package]] 257 | name = "cpufeatures" 258 | version = "0.2.5" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" 261 | dependencies = [ 262 | "libc", 263 | ] 264 | 265 | [[package]] 266 | name = "crc32fast" 267 | version = "1.3.2" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 270 | dependencies = [ 271 | "cfg-if", 272 | ] 273 | 274 | [[package]] 275 | name = "crypto-mac" 276 | version = "0.11.1" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" 279 | dependencies = [ 280 | "generic-array", 281 | "subtle", 282 | ] 283 | 284 | [[package]] 285 | name = "derivative" 286 | version = "2.2.0" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 289 | dependencies = [ 290 | "proc-macro2", 291 | "quote", 292 | "syn", 293 | ] 294 | 295 | [[package]] 296 | name = "digest" 297 | version = "0.9.0" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 300 | dependencies = [ 301 | "generic-array", 302 | ] 303 | 304 | [[package]] 305 | name = "dirs" 306 | version = "4.0.0" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" 309 | dependencies = [ 310 | "dirs-sys", 311 | ] 312 | 313 | [[package]] 314 | name = "dirs-sys" 315 | version = "0.3.7" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 318 | dependencies = [ 319 | "libc", 320 | "redox_users", 321 | "winapi", 322 | ] 323 | 324 | [[package]] 325 | name = "enumflags2" 326 | version = "0.6.4" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" 329 | dependencies = [ 330 | "enumflags2_derive", 331 | "serde", 332 | ] 333 | 334 | [[package]] 335 | name = "enumflags2_derive" 336 | version = "0.6.4" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" 339 | dependencies = [ 340 | "proc-macro2", 341 | "quote", 342 | "syn", 343 | ] 344 | 345 | [[package]] 346 | name = "eyre" 347 | version = "0.6.8" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" 350 | dependencies = [ 351 | "indenter", 352 | "once_cell", 353 | ] 354 | 355 | [[package]] 356 | name = "fastrand" 357 | version = "1.8.0" 358 | source = "registry+https://github.com/rust-lang/crates.io-index" 359 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" 360 | dependencies = [ 361 | "instant", 362 | ] 363 | 364 | [[package]] 365 | name = "flate2" 366 | version = "1.0.24" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" 369 | dependencies = [ 370 | "crc32fast", 371 | "miniz_oxide", 372 | ] 373 | 374 | [[package]] 375 | name = "futures" 376 | version = "0.3.24" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" 379 | dependencies = [ 380 | "futures-channel", 381 | "futures-core", 382 | "futures-executor", 383 | "futures-io", 384 | "futures-sink", 385 | "futures-task", 386 | "futures-util", 387 | ] 388 | 389 | [[package]] 390 | name = "futures-channel" 391 | version = "0.3.24" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" 394 | dependencies = [ 395 | "futures-core", 396 | "futures-sink", 397 | ] 398 | 399 | [[package]] 400 | name = "futures-core" 401 | version = "0.3.24" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" 404 | 405 | [[package]] 406 | name = "futures-executor" 407 | version = "0.3.24" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" 410 | dependencies = [ 411 | "futures-core", 412 | "futures-task", 413 | "futures-util", 414 | ] 415 | 416 | [[package]] 417 | name = "futures-io" 418 | version = "0.3.24" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" 421 | 422 | [[package]] 423 | name = "futures-lite" 424 | version = "1.12.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" 427 | dependencies = [ 428 | "fastrand", 429 | "futures-core", 430 | "futures-io", 431 | "memchr", 432 | "parking", 433 | "pin-project-lite", 434 | "waker-fn", 435 | ] 436 | 437 | [[package]] 438 | name = "futures-macro" 439 | version = "0.3.24" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" 442 | dependencies = [ 443 | "proc-macro2", 444 | "quote", 445 | "syn", 446 | ] 447 | 448 | [[package]] 449 | name = "futures-sink" 450 | version = "0.3.24" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" 453 | 454 | [[package]] 455 | name = "futures-task" 456 | version = "0.3.24" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" 459 | 460 | [[package]] 461 | name = "futures-util" 462 | version = "0.3.24" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" 465 | dependencies = [ 466 | "futures-channel", 467 | "futures-core", 468 | "futures-io", 469 | "futures-macro", 470 | "futures-sink", 471 | "futures-task", 472 | "memchr", 473 | "pin-project-lite", 474 | "pin-utils", 475 | "slab", 476 | ] 477 | 478 | [[package]] 479 | name = "generic-array" 480 | version = "0.14.6" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 483 | dependencies = [ 484 | "typenum", 485 | "version_check", 486 | ] 487 | 488 | [[package]] 489 | name = "getrandom" 490 | version = "0.2.7" 491 | source = "registry+https://github.com/rust-lang/crates.io-index" 492 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 493 | dependencies = [ 494 | "cfg-if", 495 | "libc", 496 | "wasi 0.11.0+wasi-snapshot-preview1", 497 | ] 498 | 499 | [[package]] 500 | name = "glob" 501 | version = "0.3.0" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 504 | 505 | [[package]] 506 | name = "heck" 507 | version = "0.3.3" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 510 | dependencies = [ 511 | "unicode-segmentation", 512 | ] 513 | 514 | [[package]] 515 | name = "hermit-abi" 516 | version = "0.1.19" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 519 | dependencies = [ 520 | "libc", 521 | ] 522 | 523 | [[package]] 524 | name = "hkdf" 525 | version = "0.11.0" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" 528 | dependencies = [ 529 | "digest", 530 | "hmac", 531 | ] 532 | 533 | [[package]] 534 | name = "hmac" 535 | version = "0.11.0" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" 538 | dependencies = [ 539 | "crypto-mac", 540 | "digest", 541 | ] 542 | 543 | [[package]] 544 | name = "htmlentity" 545 | version = "1.2.0" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "5b3d2d0340cc45e3f48fe9fe11b6dee3be57a7085fb80ab467c881fa49a2332c" 548 | dependencies = [ 549 | "lazy_static", 550 | ] 551 | 552 | [[package]] 553 | name = "iana-time-zone" 554 | version = "0.1.50" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "fd911b35d940d2bd0bea0f9100068e5b97b51a1cbe13d13382f132e0365257a0" 557 | dependencies = [ 558 | "android_system_properties", 559 | "core-foundation-sys", 560 | "js-sys", 561 | "wasm-bindgen", 562 | "winapi", 563 | ] 564 | 565 | [[package]] 566 | name = "indenter" 567 | version = "0.3.3" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" 570 | 571 | [[package]] 572 | name = "instant" 573 | version = "0.1.12" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 576 | dependencies = [ 577 | "cfg-if", 578 | ] 579 | 580 | [[package]] 581 | name = "itoa" 582 | version = "1.0.3" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" 585 | 586 | [[package]] 587 | name = "js-sys" 588 | version = "0.3.60" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" 591 | dependencies = [ 592 | "wasm-bindgen", 593 | ] 594 | 595 | [[package]] 596 | name = "keyring" 597 | version = "1.2.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "38fb8399ddcabfccb274577a8d90f0653e0b5b5977797c1c8834ad09839a10e5" 600 | dependencies = [ 601 | "byteorder", 602 | "secret-service", 603 | "security-framework", 604 | "winapi", 605 | ] 606 | 607 | [[package]] 608 | name = "lazy_static" 609 | version = "1.4.0" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 612 | 613 | [[package]] 614 | name = "libc" 615 | version = "0.2.134" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" 618 | 619 | [[package]] 620 | name = "log" 621 | version = "0.4.17" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 624 | dependencies = [ 625 | "cfg-if", 626 | ] 627 | 628 | [[package]] 629 | name = "memchr" 630 | version = "2.5.0" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 633 | 634 | [[package]] 635 | name = "memoffset" 636 | version = "0.6.5" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 639 | dependencies = [ 640 | "autocfg", 641 | ] 642 | 643 | [[package]] 644 | name = "miniz_oxide" 645 | version = "0.5.4" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" 648 | dependencies = [ 649 | "adler", 650 | ] 651 | 652 | [[package]] 653 | name = "nb-connect" 654 | version = "1.2.0" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "b1bb540dc6ef51cfe1916ec038ce7a620daf3a111e2502d745197cd53d6bca15" 657 | dependencies = [ 658 | "libc", 659 | "socket2", 660 | ] 661 | 662 | [[package]] 663 | name = "nix" 664 | version = "0.22.3" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 667 | dependencies = [ 668 | "bitflags", 669 | "cc", 670 | "cfg-if", 671 | "libc", 672 | "memoffset", 673 | ] 674 | 675 | [[package]] 676 | name = "num" 677 | version = "0.4.0" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" 680 | dependencies = [ 681 | "num-bigint", 682 | "num-complex", 683 | "num-integer", 684 | "num-iter", 685 | "num-rational", 686 | "num-traits", 687 | ] 688 | 689 | [[package]] 690 | name = "num-bigint" 691 | version = "0.4.3" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 694 | dependencies = [ 695 | "autocfg", 696 | "num-integer", 697 | "num-traits", 698 | ] 699 | 700 | [[package]] 701 | name = "num-complex" 702 | version = "0.4.2" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" 705 | dependencies = [ 706 | "num-traits", 707 | ] 708 | 709 | [[package]] 710 | name = "num-integer" 711 | version = "0.1.45" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 714 | dependencies = [ 715 | "autocfg", 716 | "num-traits", 717 | ] 718 | 719 | [[package]] 720 | name = "num-iter" 721 | version = "0.1.43" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 724 | dependencies = [ 725 | "autocfg", 726 | "num-integer", 727 | "num-traits", 728 | ] 729 | 730 | [[package]] 731 | name = "num-rational" 732 | version = "0.4.1" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 735 | dependencies = [ 736 | "autocfg", 737 | "num-bigint", 738 | "num-integer", 739 | "num-traits", 740 | ] 741 | 742 | [[package]] 743 | name = "num-traits" 744 | version = "0.2.15" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 747 | dependencies = [ 748 | "autocfg", 749 | ] 750 | 751 | [[package]] 752 | name = "once_cell" 753 | version = "1.15.0" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" 756 | 757 | [[package]] 758 | name = "opaque-debug" 759 | version = "0.3.0" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 762 | 763 | [[package]] 764 | name = "parking" 765 | version = "2.0.0" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" 768 | 769 | [[package]] 770 | name = "pin-project-lite" 771 | version = "0.2.9" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 774 | 775 | [[package]] 776 | name = "pin-utils" 777 | version = "0.1.0" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 780 | 781 | [[package]] 782 | name = "pkg-config" 783 | version = "0.3.25" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 786 | 787 | [[package]] 788 | name = "polling" 789 | version = "2.3.0" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" 792 | dependencies = [ 793 | "autocfg", 794 | "cfg-if", 795 | "libc", 796 | "log", 797 | "wepoll-ffi", 798 | "winapi", 799 | ] 800 | 801 | [[package]] 802 | name = "ppv-lite86" 803 | version = "0.2.16" 804 | source = "registry+https://github.com/rust-lang/crates.io-index" 805 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 806 | 807 | [[package]] 808 | name = "proc-macro-crate" 809 | version = "0.1.5" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 812 | dependencies = [ 813 | "toml", 814 | ] 815 | 816 | [[package]] 817 | name = "proc-macro-crate" 818 | version = "1.2.1" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" 821 | dependencies = [ 822 | "once_cell", 823 | "thiserror", 824 | "toml", 825 | ] 826 | 827 | [[package]] 828 | name = "proc-macro-error" 829 | version = "1.0.4" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 832 | dependencies = [ 833 | "proc-macro-error-attr", 834 | "proc-macro2", 835 | "quote", 836 | "syn", 837 | "version_check", 838 | ] 839 | 840 | [[package]] 841 | name = "proc-macro-error-attr" 842 | version = "1.0.4" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 845 | dependencies = [ 846 | "proc-macro2", 847 | "quote", 848 | "version_check", 849 | ] 850 | 851 | [[package]] 852 | name = "proc-macro2" 853 | version = "1.0.46" 854 | source = "registry+https://github.com/rust-lang/crates.io-index" 855 | checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" 856 | dependencies = [ 857 | "unicode-ident", 858 | ] 859 | 860 | [[package]] 861 | name = "quote" 862 | version = "1.0.21" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 865 | dependencies = [ 866 | "proc-macro2", 867 | ] 868 | 869 | [[package]] 870 | name = "rand" 871 | version = "0.8.5" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 874 | dependencies = [ 875 | "libc", 876 | "rand_chacha", 877 | "rand_core", 878 | ] 879 | 880 | [[package]] 881 | name = "rand_chacha" 882 | version = "0.3.1" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 885 | dependencies = [ 886 | "ppv-lite86", 887 | "rand_core", 888 | ] 889 | 890 | [[package]] 891 | name = "rand_core" 892 | version = "0.6.4" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 895 | dependencies = [ 896 | "getrandom", 897 | ] 898 | 899 | [[package]] 900 | name = "redox_syscall" 901 | version = "0.2.16" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 904 | dependencies = [ 905 | "bitflags", 906 | ] 907 | 908 | [[package]] 909 | name = "redox_users" 910 | version = "0.4.3" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 913 | dependencies = [ 914 | "getrandom", 915 | "redox_syscall", 916 | "thiserror", 917 | ] 918 | 919 | [[package]] 920 | name = "regex" 921 | version = "1.6.0" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 924 | dependencies = [ 925 | "aho-corasick", 926 | "memchr", 927 | "regex-syntax", 928 | ] 929 | 930 | [[package]] 931 | name = "regex-syntax" 932 | version = "0.6.27" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 935 | 936 | [[package]] 937 | name = "rphtml" 938 | version = "0.5.6" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "cf2e120c74fc60abcddf86f5751575da72bed40c54befdfa874492f023807523" 941 | dependencies = [ 942 | "htmlentity", 943 | "lazy_static", 944 | "thiserror", 945 | ] 946 | 947 | [[package]] 948 | name = "ryu" 949 | version = "1.0.11" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" 952 | 953 | [[package]] 954 | name = "scoped-tls" 955 | version = "1.0.0" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" 958 | 959 | [[package]] 960 | name = "secret-service" 961 | version = "2.0.2" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "e1da5c423b8783185fd3fecd1c8796c267d2c089d894ce5a93c280a5d3f780a2" 964 | dependencies = [ 965 | "aes", 966 | "block-modes", 967 | "hkdf", 968 | "lazy_static", 969 | "num", 970 | "rand", 971 | "serde", 972 | "sha2", 973 | "zbus", 974 | "zbus_macros", 975 | "zvariant", 976 | "zvariant_derive", 977 | ] 978 | 979 | [[package]] 980 | name = "security-framework" 981 | version = "2.7.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" 984 | dependencies = [ 985 | "bitflags", 986 | "core-foundation", 987 | "core-foundation-sys", 988 | "libc", 989 | "security-framework-sys", 990 | ] 991 | 992 | [[package]] 993 | name = "security-framework-sys" 994 | version = "2.6.1" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 997 | dependencies = [ 998 | "core-foundation-sys", 999 | "libc", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "serde" 1004 | version = "1.0.145" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" 1007 | dependencies = [ 1008 | "serde_derive", 1009 | ] 1010 | 1011 | [[package]] 1012 | name = "serde_derive" 1013 | version = "1.0.145" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" 1016 | dependencies = [ 1017 | "proc-macro2", 1018 | "quote", 1019 | "syn", 1020 | ] 1021 | 1022 | [[package]] 1023 | name = "serde_json" 1024 | version = "1.0.85" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" 1027 | dependencies = [ 1028 | "itoa", 1029 | "ryu", 1030 | "serde", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "serde_repr" 1035 | version = "0.1.9" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" 1038 | dependencies = [ 1039 | "proc-macro2", 1040 | "quote", 1041 | "syn", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "sha2" 1046 | version = "0.9.9" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1049 | dependencies = [ 1050 | "block-buffer", 1051 | "cfg-if", 1052 | "cpufeatures", 1053 | "digest", 1054 | "opaque-debug", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "shellexpand" 1059 | version = "2.1.2" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" 1062 | dependencies = [ 1063 | "dirs", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "slab" 1068 | version = "0.4.7" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" 1071 | dependencies = [ 1072 | "autocfg", 1073 | ] 1074 | 1075 | [[package]] 1076 | name = "socket2" 1077 | version = "0.4.7" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 1080 | dependencies = [ 1081 | "libc", 1082 | "winapi", 1083 | ] 1084 | 1085 | [[package]] 1086 | name = "static_assertions" 1087 | version = "1.1.0" 1088 | source = "registry+https://github.com/rust-lang/crates.io-index" 1089 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1090 | 1091 | [[package]] 1092 | name = "strsim" 1093 | version = "0.8.0" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 1096 | 1097 | [[package]] 1098 | name = "structopt" 1099 | version = "0.3.26" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" 1102 | dependencies = [ 1103 | "clap", 1104 | "lazy_static", 1105 | "structopt-derive", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "structopt-derive" 1110 | version = "0.4.18" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" 1113 | dependencies = [ 1114 | "heck", 1115 | "proc-macro-error", 1116 | "proc-macro2", 1117 | "quote", 1118 | "syn", 1119 | ] 1120 | 1121 | [[package]] 1122 | name = "subtle" 1123 | version = "2.4.1" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1126 | 1127 | [[package]] 1128 | name = "syn" 1129 | version = "1.0.101" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" 1132 | dependencies = [ 1133 | "proc-macro2", 1134 | "quote", 1135 | "unicode-ident", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "term_size" 1140 | version = "0.3.2" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" 1143 | dependencies = [ 1144 | "libc", 1145 | "winapi", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "textwrap" 1150 | version = "0.11.0" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1153 | dependencies = [ 1154 | "term_size", 1155 | "unicode-width", 1156 | ] 1157 | 1158 | [[package]] 1159 | name = "thiserror" 1160 | version = "1.0.37" 1161 | source = "registry+https://github.com/rust-lang/crates.io-index" 1162 | checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" 1163 | dependencies = [ 1164 | "thiserror-impl", 1165 | ] 1166 | 1167 | [[package]] 1168 | name = "thiserror-impl" 1169 | version = "1.0.37" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" 1172 | dependencies = [ 1173 | "proc-macro2", 1174 | "quote", 1175 | "syn", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "time" 1180 | version = "0.1.44" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" 1183 | dependencies = [ 1184 | "libc", 1185 | "wasi 0.10.0+wasi-snapshot-preview1", 1186 | "winapi", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "toml" 1191 | version = "0.5.9" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 1194 | dependencies = [ 1195 | "serde", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "typenum" 1200 | version = "1.15.0" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1203 | 1204 | [[package]] 1205 | name = "unicode-ident" 1206 | version = "1.0.4" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" 1209 | 1210 | [[package]] 1211 | name = "unicode-segmentation" 1212 | version = "1.10.0" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" 1215 | 1216 | [[package]] 1217 | name = "unicode-width" 1218 | version = "0.1.10" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 1221 | 1222 | [[package]] 1223 | name = "vec_map" 1224 | version = "0.8.2" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 1227 | 1228 | [[package]] 1229 | name = "version_check" 1230 | version = "0.9.4" 1231 | source = "registry+https://github.com/rust-lang/crates.io-index" 1232 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1233 | 1234 | [[package]] 1235 | name = "visdom" 1236 | version = "0.4.13" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "96ebcc1bd395b5a5cc35a89375380c0e76bc166c1e22de2e2ca6b3a2ad771818" 1239 | dependencies = [ 1240 | "lazy_static", 1241 | "regex", 1242 | "rphtml", 1243 | "thiserror", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "waker-fn" 1248 | version = "1.1.0" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 1251 | 1252 | [[package]] 1253 | name = "wasi" 1254 | version = "0.10.0+wasi-snapshot-preview1" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 1257 | 1258 | [[package]] 1259 | name = "wasi" 1260 | version = "0.11.0+wasi-snapshot-preview1" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1263 | 1264 | [[package]] 1265 | name = "wasm-bindgen" 1266 | version = "0.2.83" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" 1269 | dependencies = [ 1270 | "cfg-if", 1271 | "wasm-bindgen-macro", 1272 | ] 1273 | 1274 | [[package]] 1275 | name = "wasm-bindgen-backend" 1276 | version = "0.2.83" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" 1279 | dependencies = [ 1280 | "bumpalo", 1281 | "log", 1282 | "once_cell", 1283 | "proc-macro2", 1284 | "quote", 1285 | "syn", 1286 | "wasm-bindgen-shared", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "wasm-bindgen-macro" 1291 | version = "0.2.83" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" 1294 | dependencies = [ 1295 | "quote", 1296 | "wasm-bindgen-macro-support", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "wasm-bindgen-macro-support" 1301 | version = "0.2.83" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" 1304 | dependencies = [ 1305 | "proc-macro2", 1306 | "quote", 1307 | "syn", 1308 | "wasm-bindgen-backend", 1309 | "wasm-bindgen-shared", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "wasm-bindgen-shared" 1314 | version = "0.2.83" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" 1317 | 1318 | [[package]] 1319 | name = "wepoll-ffi" 1320 | version = "0.1.2" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" 1323 | dependencies = [ 1324 | "cc", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "winapi" 1329 | version = "0.3.9" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1332 | dependencies = [ 1333 | "winapi-i686-pc-windows-gnu", 1334 | "winapi-x86_64-pc-windows-gnu", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "winapi-i686-pc-windows-gnu" 1339 | version = "0.4.0" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1342 | 1343 | [[package]] 1344 | name = "winapi-x86_64-pc-windows-gnu" 1345 | version = "0.4.0" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1348 | 1349 | [[package]] 1350 | name = "zbus" 1351 | version = "1.9.3" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "9cbeb2291cd7267a94489b71376eda33496c1b9881adf6b36f26cc2779f3fc49" 1354 | dependencies = [ 1355 | "async-io", 1356 | "byteorder", 1357 | "derivative", 1358 | "enumflags2", 1359 | "fastrand", 1360 | "futures", 1361 | "nb-connect", 1362 | "nix", 1363 | "once_cell", 1364 | "polling", 1365 | "scoped-tls", 1366 | "serde", 1367 | "serde_repr", 1368 | "zbus_macros", 1369 | "zvariant", 1370 | ] 1371 | 1372 | [[package]] 1373 | name = "zbus_macros" 1374 | version = "1.9.3" 1375 | source = "registry+https://github.com/rust-lang/crates.io-index" 1376 | checksum = "fa3959a7847cf95e3d51e312856617c5b1b77191176c65a79a5f14d778bbe0a6" 1377 | dependencies = [ 1378 | "proc-macro-crate 0.1.5", 1379 | "proc-macro2", 1380 | "quote", 1381 | "syn", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "zip" 1386 | version = "0.5.13" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" 1389 | dependencies = [ 1390 | "byteorder", 1391 | "bzip2", 1392 | "crc32fast", 1393 | "flate2", 1394 | "thiserror", 1395 | "time", 1396 | ] 1397 | 1398 | [[package]] 1399 | name = "zvariant" 1400 | version = "2.10.0" 1401 | source = "registry+https://github.com/rust-lang/crates.io-index" 1402 | checksum = "a68c7b55f2074489b7e8e07d2d0a6ee6b4f233867a653c664d8020ba53692525" 1403 | dependencies = [ 1404 | "byteorder", 1405 | "enumflags2", 1406 | "libc", 1407 | "serde", 1408 | "static_assertions", 1409 | "zvariant_derive", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "zvariant_derive" 1414 | version = "2.10.0" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9" 1417 | dependencies = [ 1418 | "proc-macro-crate 1.2.1", 1419 | "proc-macro2", 1420 | "quote", 1421 | "syn", 1422 | ] 1423 | -------------------------------------------------------------------------------- /rsrc/packages/mac/offline-acrobat/ngl-preconditioning-data.json: -------------------------------------------------------------------------------- 1 | {"npdId":"ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","npdSpecVersion":"1.0","deploymentMode":"FRL_ISOLATED","operatingConfigs":[{"name":"QWNyb2JhdERDMXt9MjAxODA3MjAwNA-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw-70-stg","extension":"operatingconfig","content":"eyJvY1NwZWNWZXJzaW9uIjoiMS4xIiwic2lnbmF0dXJlcyI6W3siaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TlRNc0ltTmxjblJwWm1sallYUmxSR1YwWVdsc2N5STZXM3NpYVdRaU9pSlJWVkY0VFZWUmVGSlVaRVJSZWxaR1QwVlZNRTlVU2tWUmFtaEZVVlZSZDFKRVNYbFNWR2QzVVd0Rklpd2ljM1ZpYW1WamRFNWhiV1VpT2lKQlpHOWlaU0JEYjI1MFpXNTBJRU5sY25ScFptbGpZWFJsSURReExUWWlMQ0pvWlhoVFpYSnBZV3hPZFcxaVpYSWlPaUkxTlRoa056VXlJaXdpYzJoaE1VaGhjMmdpT2lKRlFrUXlNelk1UlVRek0wUkRORFUzUWprd01UZ3hRVUkyUVRFeVFrVXlPRGM1UWtWQ01FWXpJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWxGVlVYaE5WVkY0VWxSa1JGRjZWa1pQUlZVd1QxUktSVkZxYUVWUlZWRjNVa1JKZVZKVVozZFJhMFV0VDBSR2FFOVhXWGxQUkd0MFdYcG9iRTU1TURCUFZHdDZURmRGZDFsWFJYUk9ha1V5VDBSU2JWa3lWbTFaZW1kM0xtUmxjaUo5TEhzaWFXUWlPaUpQUkdNMVRrUldSVTlWV1ROU1ZGcEVUbFZhUkU1RldrTk9NRmt5VVZSTk5FNTZUVEpTUkVrd1VWUkpJaXdpYzNWaWFtVmpkRTVoYldVaU9pSkJaRzlpWlNCSmJuUmxjbTFsWkdsaGRHVWdRMEVnTkRFdE5UUWlMQ0pvWlhoVFpYSnBZV3hPZFcxaVpYSWlPaUkwTjJVMU9UZ3laU0lzSW5Ob1lURklZWE5vSWpvaVJrRkJNRUkxTWtSRE5rRXpRMEkyTUVJMk5rTkdRalkxUlRkR1FqQTNNekpFTmpSQ04wWXpOU0lzSW5ObGNYVmxibU5sSWpveUxDSmtiM2R1Ykc5aFpGQmhkR2dpT2lKUFJHTTFUa1JXUlU5VldUTlNWRnBFVGxWYVJFNUZXa05PTUZreVVWUk5ORTU2VFRKU1JFa3dVVlJKTFU5RVJtaFBWMWw1VDBScmRGbDZhR3hPZVRBd1QxUnJla3hYUlhkWlYwVjBUbXBGTWs5RVVtMVpNbFp0V1hwbmR5NWtaWElpZlYxOSIsInNpZ25hdHVyZSI6IjxyZW1vdmVkPiJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TlRJc0ltTmxjblJwWm1sallYUmxSR1YwWVdsc2N5STZXM3NpYVdRaU9pSk9ha0Y1VFVSYVFrMTZRWGxPVlZKRVQwUlpNRTlVV2tKU2EwWkdUbFJGTTAxRVRYbFJNRWw0VWxWUklpd2ljM1ZpYW1WamRFNWhiV1VpT2lKQlpHOWlaU0JEYjI1MFpXNTBJRU5sY25ScFptbGpZWFJsSURReExUVWlMQ0pvWlhoVFpYSnBZV3hPZFcxaVpYSWlPaUkxTWpobVlqY3laaUlzSW5Ob1lURklZWE5vSWpvaU1EUTJOa1E1TURJMU1rVTNNelUxUkRFMVFqVTBORU0yUXprMU5EQXdNRGcyTTBaRFJEbEJOQ0lzSW5ObGNYVmxibU5sSWpveExDSmtiM2R1Ykc5aFpGQmhkR2dpT2lKT2FrRjVUVVJhUWsxNlFYbE9WVkpFVDBSWk1FOVVXa0pTYTBaR1RsUkZNMDFFVFhsUk1FbDRVbFZSTFU5RVJtaFBWMWw1VDBScmRGbDZhR3hPZVRBd1QxUnJla3hYUlhkWlYwVjBUbXBGTWs5RVVtMVpNbFp0V1hwbmR5NWtaWElpZlN4N0ltbGtJam9pVGtSYVFsSlVaelJOYTBwR1VYcFJNVkY2YkVaU2FsbDRUbXRKTWsxNll6Tk5WRkpFVVdwS1ExSnFTU0lzSW5OMVltcGxZM1JPWVcxbElqb2lRV1J2WW1VZ1NXNTBaWEp0WldScFlYUmxJRU5CSURReExUVXpJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTVRnNE5XRXhPRFlpTENKemFHRXhTR0Z6YUNJNklqYzFOVVExTlRkRE1UTkRPVGRGUkVZek16QkZSVVUwUVRFNE1UVTNPRFUyTWtZeU9UZzBNREFpTENKelpYRjFaVzVqWlNJNk1pd2laRzkzYm14dllXUlFZWFJvSWpvaVRrUmFRbEpVWnpSTmEwcEdVWHBSTVZGNmJFWlNhbGw0VG10Sk1rMTZZek5OVkZKRVVXcEtRMUpxU1MxUFJFWm9UMWRaZVU5RWEzUlplbWhzVG5rd01FOVVhM3BNVjBWM1dWZEZkRTVxUlRKUFJGSnRXVEpXYlZsNlozY3VaR1Z5SW4xZGZRIiwic2lnbmF0dXJlIjoiPHJlbW92ZWQ-In1dLCJwYXlsb2FkIjoiZXlKcFpDSTZJakZtTWpSaVptSTJMV0l6TldZdE5EQXdNUzA0WkRWakxXWTFPR0k0TXpVMk9UZzNaQ0lzSW01d1pFbGtJam9pVDBSR2FFOVhXWGxQUkd0MFdYcG9iRTU1TURCUFZHdDZURmRGZDFsWFJYUk9ha1V5VDBSU2JWa3lWbTFaZW1kM0lpd2libWRzUVhCd1NXUWlPaUpCWTNKdlltRjBSRU14SWl3aWJuQmtVSEpsWTJWa1pXNWpaU0k2TnpBc0ltRnpibkJFWVhSaElqcDdJblJsYlhCc1lYUmxTV1FpT2lKVU1GSkhZVVU1V0ZkWWJGQlNSM1F3VjFod2IySkZOVFZOUkVKUVZrZDBObFJHWkVaa01XeFlVbGhTVDJGclZYbFVNRkpUWWxacmVWWnRNVnBsYldRelpUTXdNRTFxVFhoTlJHTXhXbWt3ZUU5VVZUTk1WRkpvV1ZSRmRGbHRXbXRaVXpBMFRWUkJNVTVVUVhkWlZGcG9UbGRaSWl3aVkzVnpkRzl0WlhKRFpYSjBTR1ZoWkdWeWN5STZXM3NpYUdWaFpHVnlJam9pWlhsS2FtSXlOVEJhVnpVd1ZUSnNibUp0UmpCa1dFcHNVVmQ0YmtscWIybFZiRTB4VFZSSmFVeERTakJqYmxaNlpFZFdhMUV5Vm5sa1JWcHdZbTFrYkdOdVFubGhWelV3VVZkNGJrbHFiMmxWTUdoQ1RGUlZlRTFwU1hOSmJsSjVaRmhPTUZwWFVrUmFXRW93VW0xc2RWb3lWbmxqU0Vwd1ltNVNTbUp0VW14bFEwazJUWGwzYVZreVZubGtSMnh0WVZkT2FHUkhWa1ZhV0ZKb1lWZDRla2xxY0dKbGVVcHdXa05KTmtsck5IZFRXR1JRVWtad1NGUlljRTVOVlRWVlZWaGtVbUZzUmpSVmJGSnVaREEwZDFkVVNsSmxhMXBFVkZod1lWSldTbkZSYTFKU1pXdHJhVXhEU25wa1YwcHhXbGRPTUZSdFJuUmFVMGsyU1d0R2EySXlTbXhKUlU1MlltNVNiR0p1VVdkUk1sWjVaRWRzYldGWFRtaGtSMVZuVGtSSmRFNXBTWE5KYldoc1pVWk9iR050YkdoaVJUVXhZbGRLYkdOcFNUWkphbFV6VDFSRk5Ga3lXWGhKYVhkcFl6Sm9hRTFWYUdoak1tZHBUMmxLUms5VVRYcFNha1pFVFZSTmVrOVZVVEZOUlZGNFVYcFJlRkV3VVhkUlZVcERVbXRSTWxKRVZrZE5WRkpIVVZWSmVFMUZXa1JKYVhkcFl6SldlR1JYVm5WWk1sVnBUMnBGYzBsdFVuWmtNalZ6WWpKR2ExVkhSakJoUTBrMlNXczBkMU5ZWkZCU1JuQklWRmh3VGsxVk5WVlZXR1JTWVd4R05GVnNVbTVrTURSM1YxUktVbVZyV2tSVVdIQmhVbFpLY1ZGclVsSmxhMnQwVkRCU1IyRkZPVmhYV0d4UVVrZDBNRmRZY0c5aVJUVTFUVVJDVUZaSGREWlVSbVJHWkRGc1dGSllVazloYTFWNVZEQlNVMkpXYTNsV2JURmFaVzFrTTB4dFVteGphVW81VEVoemFXRlhVV2xQYVVwVFlXeHJlVlZVUWxkU1ZrcEZVVmhrVDJFeFJqWlZhMUpDVFd4S1ZWVlVVazVOUmtZMFZWZHdSbVF4UmxWYU0yaFRWa2RPTkZWc1ZsSkphWGRwWXpOV2FXRnRWbXBrUlRWb1lsZFZhVTlwU2tKYVJ6bHBXbE5DU21KdVVteGpiVEZzV2tkc2FHUkhWV2RSTUVWblRrUkpkRTVEU1hOSmJXaHNaVVpPYkdOdGJHaGlSVFV4WWxkS2JHTnBTVFpKYW1SdFRsZEZOVTVxVm0xSmFYZHBZekpvYUUxVmFHaGpNbWRwVDJsSk5WSlVVVFZSVkZwQ1QxVlNSMDVVUlROU1JWVjZVVlZOTUU1RlVrVlNhbU0xVG10WmVVMHdVVE5PVkVaSFRVUlZlazVVV1RKSmFYZHBZekpXZUdSWFZuVlpNbFZwVDJwSmMwbHRVblprTWpWellqSkdhMVZIUmpCaFEwazJTV3hLY1ZkVVNsSk5SbHBHVld0U1FtUXdOWEpWV0hCVFVrVkZlVlZzVWxKT1JUQjNWVmhvVW1GclZqTlZWbEp1WlVaS1ZWa3phRk5XVmtWMFZEQlNSMkZGT1ZoWFdHeFFVa2QwTUZkWWNHOWlSVFUxVFVSQ1VGWkhkRFpVUm1SR1pERnNXRkpZVWs5aGExVjVWREJTVTJKV2EzbFdiVEZhWlcxa00weHRVbXhqYVVvNVdGZ3dJaXdpYzJsbmJtRjBkWEpsSWpvaWUzdGpkWE4wYjIxbGNsTnBaMjVoZEhWeVpURjlmU0o5TEhzaWFHVmhaR1Z5SWpvaVpYbEthbUl5TlRCYVZ6VXdWVEpzYm1KdFJqQmtXRXBzVVZkNGJrbHFiMmxWYkUweFRWUkphVXhEU2pCamJsWjZaRWRXYTFFeVZubGtSVnB3WW0xa2JHTnVRbmxoVnpVd1VWZDRia2xxYjJsVk1HaENURlJWZUUxcFNYTkpibEo1WkZoT01GcFhVa1JhV0Vvd1VtMXNkVm95Vm5salNFcHdZbTVTU21KdFVteGxRMGsyVFdsM2FWa3lWbmxrUjJ4dFlWZE9hR1JIVmtWYVdGSm9ZVmQ0ZWtscWNHSmxlVXB3V2tOSk5rbHNSbFZXV0hCUFlXeEZlbFZYY0dwa01EVkdWbXRTVTFKVlZYZFZiWEJ1VFVaS1ZsZFlhRkJXVlRCNVZGZDBVMUpzUmpaaE0yaFRVa1pWYVV4RFNucGtWMHB4V2xkT01GUnRSblJhVTBrMlNXdEdhMkl5U214SlJVNTJZbTVTYkdKdVVXZFJNbFo1WkVkc2JXRlhUbWhrUjFWblRrUkpkRTVUU1hOSmJXaHNaVVpPYkdOdGJHaGlSVFV4WWxkS2JHTnBTVFpKYWtsNVdrUkpOVTVxYkdwSmFYZHBZekpvYUUxVmFHaGpNbWRwVDJsSmQxRnJVVFZTUkdONlVXdE5NRTVFYUVaUlZFWkdVVlJhUkU5RVFrWk5SR2Q0VGtSamVGSkVSWHBSVlVwR1RrVk5NRkY2UVRSSmFYZHBZekpXZUdSWFZuVlpNbFZwVDJwRmMwbHRVblprTWpWellqSkdhMVZIUmpCaFEwazJTV3hHVlZaWWNFOWhiRVY2VlZkd2FtUXdOVVpXYTFKVFVsVlZkMVZ0Y0c1TlJrcFdWMWhvVUZaVk1IbFVWM1JUVW14R05tRXphRk5TUmxWMFZEQlNSMkZGT1ZoWFdHeFFVa2QwTUZkWWNHOWlSVFUxVFVSQ1VGWkhkRFpVUm1SR1pERnNXRkpZVWs5aGExVjVWREJTVTJKV2EzbFdiVEZhWlcxa00weHRVbXhqYVVvNVRFaHphV0ZYVVdsUGFVcE9aVzF6ZWxWc1ZsZFJNREZ5Vm10V1QyVnJTa2hVVlZaaFVqQTFObUY2U2s1V1ZrcEZWVzF3UW1Rd05VVlhWRXBQVWxaVk1WUXdVbFpKYVhkcFl6TldhV0Z0Vm1wa1JUVm9ZbGRWYVU5cFNrSmFSemxwV2xOQ1NtSnVVbXhqYlRGc1drZHNhR1JIVldkUk1FVm5Ua1JKZEUxNVNYTkpiV2hzWlVaT2JHTnRiR2hpUlRVeFlsZEtiR05wU1RaSmFsSnFUMFJOTUZsdFdUTkphWGRwWXpKb2FFMVZhR2hqTW1kcFQybEplVkpWUmtOT2Vsa3pUMFJTUkZKVlJUQlJWRTAwVG10SmVrNXJTVEpPTUZWM1VYcFZlVkpFWXpKUlZHY3dUVVZPUjA5VWJFTkphWGRwWXpKV2VHUlhWblZaTWxWcFQycEpjMGx0VW5aa01qVnpZakpHYTFWSFJqQmhRMGsyU1dzeE5tRjZUbE5XVmxwRVZGZDBWMUpWTlRaUmEyUk9VbFp3U0ZSdWNISk5hekZXVld0U1UyRnJSak5VYTFKYVRXczFSbFpVVmxCU1JsVjBWREJTUjJGRk9WaFhXR3hRVWtkME1GZFljRzlpUlRVMVRVUkNVRlpIZERaVVJtUkdaREZzV0ZKWVVrOWhhMVY1VkRCU1UySldhM2xXYlRGYVpXMWtNMHh0VW14amFVbzVXRmd3SWl3aWMybG5ibUYwZFhKbElqb2llM3RqZFhOMGIyMWxjbE5wWjI1aGRIVnlaVEo5ZlNKOVhTd2lZV1J2WW1WRFpYSjBVMmxuYm1Wa1ZtRnNkV1Z6SWpwN0luTnBaMjVoZEhWeVpYTWlPbnNpYzJsbmJtRjBkWEpsTVNJNklrdE1jRXBUZW5OUmFrUjRVM3BhVGpJM2NFcE9VSGx5V0hoaU9HUjJTa1pGZDBWdmFGOXVhSEpTY25KNFNtOWhhRWhZTmxaVWExTlhPR2RtT0hFM1YwMWhWRTU0TlRSd2JISmliRGhuVEVwdlptTmhkRmhTWVZWcFRVMTFlVTB6WW1aWFkwYzRhR0pDU1hkR2NrTXlSemM0UlRGNVdqWkVTVTlEVVZacVMxRnhVRlpTY0doa1pHMWFTM1ZGUVZWU1ZUaGtUMFJQU3pGalVHVnBUVEJXTmxoMFJEUjVSWHBJWlRCVmRtNHdNRGxNVmtKaFVHUTFWaTFNVGpOYWNHUXlZM1pvWlZCRlEyNDNXa3BVU0dKak5HeFRRM2xhVW1oUUxXeHpkVFJOVW1GMmMzaE9ZM0IxZWpCNVRXRlNjMDFoTVVjeWJHdFFPRlZmWDJOUVRHNVRjblJYZGxJNVRrZGxWMnBtUkhKZlh5MVVjMkV0UW5SblpXdGlVVEp3VkdsUlNGUmxNM0JzYTFkcFFVTkhka2RxWW0xQ2RGOVVNMkZPZGpkSGQzUTBSVzVtTlU5WGVqQnVTWGRvUTE5c1QxZFplVlF3T1Rac1RUaEdSM1I2V2pGMlZEQTRhVVJyZEV4aFdXZ3RVVVZLY1RaWVVEUnJhMlZEWTNWQmNYTkZSWE0xZEZFMWRreEZVWGw0U0hkc2JGZFNja3hwYzFWdVltOTVkazgzYldOTlRYVmlNVEpzVFRRemFHZGFabFEyV1ZoQlEyNVhlVWx4U1MxUU5GZHVWelJHYWtaeVVFZzFjVUpvYXpGWmR6Tk9hRlF0TjJOQlNDMHRPVEpzUm1KcVIyZEpkWEZGWmtwMlNFc3lXWE5OWVhOdVZUTlJhM2RpZFVoUVIxWkpPWEJoWkUwdGVtMXlTVVF0ZVdkRlVrODJUMWd5TFRGVE56QmtiemxxZW5GWVZ6Sk9aWFYyZEVaS05HSnVTRkZTTlY5aVZUSnpUMXBNYVRGQ05HcExRVzVITlMxUk56QlhiMHhLY0VNNVZEazNkRmxZYjNkM1oyWnJkVWc0TjI5d1NtbHhTak5GZGtabFEwNVZWMUkyWmtoTFpXaGpVVzV0UzAxaVVVWk1jR00yUW05RVVrNW9SREpyV2pCRE5FOWFaSE5oUjNGUlVHd3hSWEo0YjE5aVZqVldMWFpRTm5OcVYwVlRVMHhIWjBaRklpd2ljMmxuYm1GMGRYSmxNaUk2SWxSNFpYVjBZV1ZuYUZVeFh6SmxORk50Ym1Nd01XbElRbVp6U2tOMFQyVm5NMWhhYkRoblNVbzROVEl0Y210alJucGxZbVpDTVhweVJsZzRXRm8yVmpneFFXeHpaM0kzYldaR09FbFliRFk1U25kSlEyZExRa05KTlVoUWJXUkRYMVp0Tm1wUWEzZEtORnBKTlhOVU5teFlPRmQ0WHpOWkxWRnpXRmMwVjFKNU5FNUpUalV3TTJSSk5GWjNWR3hCVEdGUmFUWm5XV2g0VEdoVFFtVlBkMlJtZUVWNU5WVnpYMUZQTVVSaVpsWkVlRTQxWTJWU05FTndWekpvVEUxU2IyRkNaMlZKTURKeFVWRnhjVXBSV2tKc1YwaERVVGxOUkZWeGFsZHNiMlU1UlRKYWFXdE5Va1kxZEVkMlFXTlNkbUZCYzJjMFFrZEZhMU13YVdWTE1TMXBUWHBYTTAxM1ZWcFdWMDlUZEd0SVJYVkphSHAxVFhwcWJrOUxOMFE0TjFGS01HRnNNVWRHYjJoMGJYUXRlSGRDTlVweU9FNWlObmxqZVRVNGRYRmFhM0kwZFhkQllqaHlPWEJMWVMxbE1GVnZYMlEwU0RkSmIwTXRTVkZOU0Zka2FVZFpORlJNVXpSdlpWTlRPR1J1Vldack0xVjZTVzgzUjJoaWEyeDZhek5qVEVWdWFscFRkRXd4VlZCTGNIWmFMUzFLVTNacFJUbEdOSGt5UzFCc1luWk5aSEZqTjNOR2QwWmFTMlp5VlRVMmJGVkhMVGxNV1RselNHcGlOMUpGWmxaR1lWbzNSQzFNV1UxTFdYSlVRbEZCY3pKMGNVWkJiV2cxU0Rka1VtVXRlbWt6VEhOek1HUmlVbnBpY0d3NVdFZHFabEJJTFhCRmJVWm1ka1k1UkZaSE4zYzBVbko2VlVFeVNXbEpkMnd5YnpoNlgwVXlObXBZZUhwdGR5MWhiMGM1UWxGdE4xTXlRa3hmTTNrMWMySlNZVXMyWVZsRmVHZFRhbEEwZGtKWmJ6Qm9VSHBZWW1sV1RUTnlkbUUwVW1kT1RIbE9kbmt5UVZObWEySXROazVXTjJKUmJ5MWZPRTFHZVRsWFFVNXlMV1YzY2s4d1VrRktVV1p3YkVwbGJIWTVlVUl6TVU1bFJscHFWVXRwZUhaa05rVnpOWEZZY0d0eVRFWXdTM2t0YVcxalMyazJNa0YzSW4wc0luWmhiSFZsY3lJNmV5SnNhV05sYm5ObFJYaHdhWEo1VkdsdFpYTjBZVzF3SWpvaU1UWXlOakEzTXpJd01UQXdNQ0lzSW1WdWFXZHRZVVJoZEdFaU9pSjdYRnhjSW5CeWIyUjFZM1JKWkZ4Y1hDSTZNVFlzWEZ4Y0luTmxjbWxoYkV0bGVWeGNYQ0k2WEZ4Y0lqRXdNVFl4TURFNE9EUTNPVGM1TkRRNE16Y3pNVEE0TjF4Y1hDSXNYRnhjSW1Oc1pXRnlVMlZ5YVdGc1MyVjVYRnhjSWpwdWRXeHNMRnhjWENKc2IyTmhiR1ZjWEZ3aU9seGNYQ0pCVEV4Y1hGd2lMRnhjWENKaGMzTnZZMmxoZEdWa1RHOWpZV3hsYzF4Y1hDSTZYRnhjSWtGTVRGeGNYQ0lzWEZ4Y0luQnNZWFJtYjNKdFhGeGNJam94TEZ4Y1hDSnBjMnRjWEZ3aU9qRTJNVE0zTXl4Y1hGd2lZM1Z6ZEc5dFpYSkpaRnhjWENJNk1DeGNYRndpWkdWc2FYWmxjbmxOWlhSb2IyUmNYRndpT2pNc1hGeGNJbkJqWEZ4Y0lqcG1ZV3h6WlN4Y1hGd2ljbUpjWEZ3aU9tWmhiSE5sZlNJc0ltZHlZV05sVkdsdFpTSTZJakkxT1RJd01EQXdNREFpTENKd2NtOW1hV3hsVTNSaGRIVnpJam9pVUZKUFJrbE1SVjlCVmtGSlRFRkNURVVpTENKbFptWmxZM1JwZG1WRmJtUlVhVzFsYzNSaGJYQWlPaUl4TmpJek5EZ3hNakF4TURBd0lpd2liR2xqWlc1elpVVjRjR2x5ZVZkaGNtNXBibWRUZEdGeWRGUnBiV1Z6ZEdGdGNDSTZJakUyTWpVME5qZzBNREV3TURBaUxDSnVaMnhNYVdKU1pXWnlaWE5vU1c1MFpYSjJZV3dpT2lJeE56RXpOREl5TXpNME5pSXNJbXhwWTJWdWMyVkpaQ0k2SWpJek9URXpOVFJFTnpWQk9EQkJSVEk0UXpaQ0lpd2liR2xqWlc1elpXUkdaV0YwZFhKbGN5STZJbHRjWEZ3aVFXTnliMkpoZEY4eE1TNHdYRnhjSWl4Y1hGd2lRV055YjJKaGRGOUNZWE5sWHpFd0xqQmNYRndpTEZ4Y1hDSkJZM0p2WW1GMFgwSmhjMlZmTVRFdU1GeGNYQ0lzWEZ4Y0lrRmpjbTlpWVhSZlFtRnpaVjh4TWk0d1hGeGNJaXhjWEZ3aVFXTnliMkpoZEY5Q1lYTmxYekUzTGpCY1hGd2lMRnhjWENKQlkzSnZZbUYwWDBScGMzUnBiR3hsY2w4eE1DNHdYRnhjSWl4Y1hGd2lRV055YjJKaGRGOUVhWE4wYVd4c1pYSmZNVEV1TUZ4Y1hDSXNYRnhjSWtGamNtOWlZWFJmUkdsemRHbHNiR1Z5WHpFeUxqQmNYRndpTEZ4Y1hDSkJZM0p2WW1GMFgwUnBjM1JwYkd4bGNsOHhOeTR3WEZ4Y0lpeGNYRndpUVUxVVgxTlZRbE5EVWtsUVZFbFBUbDgyTGpCY1hGd2lMRnhjWENKRmRXTnNhV1JmUW1GelpWOHhMakJjWEZ3aVhTSXNJbUZ3Y0ZKbFpuSmxjMmhKYm5SbGNuWmhiQ0k2SWpFM01UTTBNakl6TXpRMklpd2lZWEJ3Ulc1MGFYUnNaVzFsYm5SVGRHRjBkWE1pT2lKVFZVSlRRMUpKVUZSSlQwNGlmWDBzSW1OMWMzUnZiV1Z5UTJWeWRGTnBaMjVsWkZaaGJIVmxjeUk2ZXlKemFXZHVZWFIxY21WeklqcDdJbU4xYzNSdmJXVnlVMmxuYm1GMGRYSmxNaUk2SWtsU1F6a3lWbWg0U1hOTlIxVkdkelF5ZFVsMmNYSkxYMjB0V25CbE9GUm5NR0l5UWtoSlQxTnhYM05YTmxkTk9GUktkSFJmY1hSRlpYZFdPVWczTjJGSVowRTFZVUU1Y0c1QlZHTk5OWFp6ZDFoSk1WOHhWakpGU2kxUU5sVlBNMUE0UmtsaVkzQXdaekZmTTI1WFdrcGZZbVJqY2xCaldYQm5OekZEUlRNNFFtZDJhWFZtWkdnNE5HeHFiMDFWYmtaR2FtdzJXV05RVW1FeVJYUkRkMEpsYjNnMlVsTmhXWEl6T0RSVVlrNVJRV2RqVERGRmVua3dNMkZNUnpVNGFWSmFVazV1ZVZobWFHUTBOM2xXZEdsTU5FcGpaalZEZFZRMFUyZGpRa3B5ZEVkUmVGVnhWSEozYjBwSGVVdFdVV28wTm5sZk5IZExZVEpHWm1neWRqVnlZbE5LUmpOVVUzRktaSE51Ylc5UU5WUnlWM0prTFhreE1WRTJlWEZ4YUhoNFNWUlBiRGxIVVVkWFZVRnVUMGRKVkhsbFNtVmpabFpTVG5VM1N5MWlhVFJFVVY5ZmFUQlVhek50YjNKbFJYbE1SMDlJVTJSb1lpMW5VM1pPU0UwMkxYbHRTVWszWWxsamVVdHpZVEJYWVZGMlRXWjNlRzFsVmxsTlRtUk9jV2RHV2tkcGRHMVZRMDVYZUdacGJsTlZibTFTWmxweGJqbEtRMHRwY25kRVZFUTRXbk5RYjBSUlkyTXpZMFZCUmpKSk9HOWpZMmh1TTBaVGVGVXlNMnhwUVdGeVdYSmFVRWxzZDBKMVdWaEtTMlJyVVZOak4wdEtNbWt3VkRkYU1saFBXWFU1UnpSWVdYQk9iRUZNV1VjdFRsRnJZVTQyZEMxWFpWRnNNSGh6YVdwZmFsaEJiekUyUTJSQ2JsOXRjRkpYWkZoWFZEZFpRbXcyTldWUFJHaFZSWFl0V1VJdFlUTjJVV3BhVFY5NGVrZDBSMHh3Y25ZeU0xSmliRlZTZVhSbmQxaDVZbW8wVVdsMmIyeERWMEl3Um10WmRGTnZOMmRNU2xKWVRGWTJOVzB5VUY5b1kxaFlRVEk1ZWxwUlJEUlFNWGhxVEROak5rWmplVEZETFV4T1dVNHhWVEJWVTJSVldFWTNaMGhCYVRJMWRGWmlMWEZxWVZoMFYxWkVlWEl0Tm1SdlRITXlaamhWSWl3aVkzVnpkRzl0WlhKVGFXZHVZWFIxY21VeElqb2lXVTFOTTB0YVNHaE5hbWxtUkRCYWFqQkJiSEYwYVhoVFRVUlRibXRvZWxwNFRHeEhPRE40WTBWUldFMURlRGQ1WTFsdVFtUm5VekpTWVUxeWQyWmxUMTl5Um5Sb2VsVlZSRzR3WkhJM1lsWmFkVEJUY1ZwV1dsRkROV2N3ZDFBelQzaFRTekl6VkhZeVRGbENUa1JaZUZoWk9YRnZiVTFSYVZOR1lsRlFUVmx0Y3pBM09USkxMVUUzWkhkMVVXdEJWbVpqZG5OQmVHSXllR2xsWkUxcFlYWkRSbFZuZFU5SlQyMDVRMGR4ZEhBMVptaDRhV0UyT1VrdFkyTkhOWHAxTjJNd1VUUlRXWFJ4VWxKUldVMHpZVE5ST0ROWmVqVkdVRVZLUkRGMWRURnRZbkJYVFZsUmVGcEZjVUpUTTBaeFZVUXhPV293VjNoQlVGUktUV1oxWlhoWWNFWnBZbXBPV0VsUGFYcFhSVEp5VGtaUFJUQllaSEJQZVhwcE5sRkRNRFJYUlZVeFJVSnpMV2QzUlUwMVpWZHlYMGhyVDJGT2QzWmxXRlV6WlVOaGJXNVRNM0ptZGxsM2JtOVVTVmRJT1dwbFUxb3pUV3BQYVc4NGQyTlhObXhxWTJaSlowRkJTMlpLVkdaQlV6aHNkQzExZEhJeFYyVndZVVpXUkRKelNVeGhWbVpsU0RGc09UUmlVMlIyVEVaNFFUWXRVM2hFVFZkck9IQkdRVUZPTjNWUGNWZFpTekZhVkdab1dsRjNOazluZEhvNE5HZGhPRXg2VUd0MlgxaEhhRlZpT1ZvNU1sVnFWakpSUlZSUU9VeFFTekZXZUcxdk9WOXdWM010T1hWRVgxSjNaRk13YkRaMFUwdExNSHBMUTJ4TlJYUndSa1ZNU2pST1gxVjJNR1ZFUXpBMFEyWmFURlJ6T1dwbFJuVXdSRWRVVG1remVqQnRaMUkyZGxGRmRURkRURnBMVFVkWWQybzRNMnhsUms5cVlVaGFjelEwU1VoRVdXaGZjR1ZIU2w5YVMzZGZVR0pCUlZsQmVVMDRWSGx6UWtSQlh6UlNjUzFVYkdGVFF6TTNkM2Q1YmtwSVNIUlRkWEV0ZG14MFQzTnNiV1YxUVRsdlNsb3hhWE5xWVUxUE1TMTZTR2xpYjAxSVYxOTBVM1p1YjNacVVqbE1WRGRqYzFaUWVVa3paMk0zT0dkS016QWlmU3dpZG1Gc2RXVnpJam9pWlhsS2RXTkhVa3BhUTBrMlNXczVSVkp0YUZCV01XdzFWREJTY21SR2JEWmhSM2hQWlZSQmQxUXhVbkpsYTNoWVVsaGtXbFl3VmpCVWJYQkdUV3M1UlZWdE1WcE5iRnAwVjFod2JtUjVTWE5KYlVaNlltNUNTbHBEU1RaSmFrRXhXbXBzYWxsNlFtdE1WMFV3VDBScmRFNUVSWGhaZVRGb1RYcE5Na3hVUW14T2VsVTFXVlJvYUZscWEzaE5RMGx6U1cxT2VWcFhSakJoVnpsMVZrZHNkRnBZVGpCWlZ6RjNTV3B2ZUU1cVFUUlBWRTAwVDFSak0wMTZTWGRNUTBwcVdWZE9iMXBWZUhCYWJWWXdZVmN4YkVscWIzaE9la1Y2VGtSSmVVMTZXVFJOUTNkcFkyMVdlbU5IT1hWak1sWlZaVmhDYkVscWIybFNiRXBOV0RCc1QxTldVa3BSVlhkcFRFTkthbGxYVG05YVZWWTBZMGRzZVdWV1pHaGpiVFZ3WW0xa1JHSXlOVEJqYlRselNXcHdOMGx1WkdoamJUVndZbTFrVkdSSFJubGtSbEp3WWxkV2VtUkhSblJqUTBrMlRWUlplVTVVVVRKUFJGRjNUVlJCZDAxRGQybGtNa1o1WW0xc2RWb3diSFZrUjFaNVpHMUdjMGxxYnpST2FsRjNUVVJCZDAxSU1ITkpiVTV2V1ZkNGMxcFhOVzVhVlU1MldrZFdla2xxY0dKSmFsRXpUV3BzYUZsVVVUUmFSMWt4V2tSUmVVNUhSbXhaYlZGNVRrUk5kMDVVVVhsT2FrSnBUbFJhYWxscVNYbE5WMWt4V1ZkVmFWaFlNQ0o5ZlN3aWNISnZabWxzWlZObGNuWmxjbFZ5YkNJNkltaDBkSEJ6T2k4dmJHTnpMV052Y0hNdGMzUmhaMlV1WVdSdlltVXVhVzh2SWl3aWNISnZabWxzWlZKbGNYVmxjM1JRWVhsc2IyRmtVR0Z5WVcxeklqcHVkV3hzTENKa1pYQnNiM2x0Wlc1MFRXOWtaU0k2SWtaU1RGOUpVMDlNUVZSRlJDSXNJbUp5WVc1a2FXNW5JanA3SW01aGJXVWlPbTUxYkd4OUxDSnZkbVZ5Y21sa1pVUmxkbWxqWlNJNmRISjFaWDAifQ"}],"certificates":[{"name":"QUQxMUQxRTdDQzVFOEU0OTJEQjhEQUQwRDIyRTgwQkE-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFvzCCA6egAwIBAgIEBVjXUjANBgkqhkiG9w0BAQ0FADCBjjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSQwIgYDVQQDDBtBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNDEtNTQwHhcNMTgwODIwMTEzOTE2WhcNMjgwODE3MTEzOTE2WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MScwJQYDVQQDDB5BZG9iZSBDb250ZW50IENlcnRpZmljYXRlIDQxLTYwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuNzurTc8KJsnseQeUi260yovdRdR2khWtwK_GJcq76Dmv5ilAEkvKzOHv2zwNgtZjG2zOs7QMduXt1O0rLzG6x2kVvVLEMkVW0-u68PkDAAB9OOv0wAweGhOb13sicODDde_3N-Khr_Yl9KDExrXOAPpYeYLHa8mvUH8VcYuL2_BbOTNOC_vJoHk0AGwOTXsHpGHlYgR9m6VTAY3tcX5-fV00HgErL6rXbyPY0ZafruSlob6Hg3xb44Nixnj34lCcF3FYEuTmke-miGZNa5zIibV8fYbJnSpX_i3j3oHJyjWSjmaTI9qkxhke0R02UU2xZZPCXShsaLmapJmRijwOea4L1RWzitQfTHZdmxEX_hhiDy27xSWgziH8VdFzSF6RjGgqkYzTjruazJCq97lkwh6JYWWIEJINjLTrAEza7njXs_v8glhiH0J_i7xEr63QMK4uwY8xh5Ty7bE7KMkFZ0wxaEkmNidwd22-feN9y769tc5eB3gn4_r895OFcw5TjLirDb0VTQCBi41PgHGtzzb9gF2RrlnnSqFJPizKv-msz3wBTg96PkDcFYsKU3UuwSRFwwrdgz12I3Mjv9eXvpx3rC4SZOh80cYR5y6qQfTQAHJEUZOOqZWv-voDSMi8_RnqZtvrjKu8uqR9tVyFLULq9yrOp2278JcOrWaUsQIDAQABoyAwHjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH_BAIwADANBgkqhkiG9w0BAQ0FAAOCAgEAIropYXo2V__VkBTxv3D_vyvfU5ga8NcdFGbhywq2SnKRg9zUgPApyFqIAOqio_M3a_EVgeo9Mn4HDiWLfN2hEeNS4M9y1Ytk5UU7BfjcaD5Ryj4vByibOmCf0JA8IX8kVBb12Sw_KONFUUlvi_nP3wfuAjkJcxyl2TMWQaJduheaBSiuOEv03XLxFEBeWcR3cn5jjoaIFlW6oqB78IU8k9qVKjQaeSfZ67mzqnQ-mtUP4-V66xYbnl3b0IsTW-WsCWzmHz1J9VYwlHXpDQHkv91Ggh7tKNPWky2wNJtL958X_FdQPGhTd3hYj5lETiOGyd2wf_yMtBJH21OarIM2uQZhoKrVro9tkz4LeDvVQ68Oue49FOZiR8xbSDHC2d-fmM4hdsqiw55trfA1H7WauFWtWImfAXkZUvLlyYTU90Cvyfq7039PBdANalw5dCJ_qWawnmrFg0ovmdScbA3-EAIIewFbgZh7n1-NCadkj4rsO3ce1DIQMw8YgmLGJBuIX30LMETTVFolkGrnLPv2VDMW2MLwMkBGgurBUeZssU2qFFE5zP2PUi-Jd_Sba_Z6sXRD0K0O1nPPi44EoesyE6WmO65OgrW6QKvfb-B5cf95WvH4KRZYVdA_9Pdwe7NbF-YBc0jJ6VGV_hbJOB51slWs9CV0XvvX4WrFWunvwpI"},{"name":"ODc5NDVEOUY3RTZDNUZDNEZCN0Y2QTM4NzM2RDI0QTI-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFuDCCA6CgAwIBAgIER-WYLjANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDQxLTMwIBcNMTgwODE3MjAwODAzWhgPMjA2ODA4MDQyMDA4MDNaMIGOMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJDAiBgNVBAMMG0Fkb2JlIEludGVybWVkaWF0ZSBDQSA0MS01NDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOMm298GC1mOe3DoK4XAxc-QICHq_hezSSxmcK-crw5YTaYX6rryTWrHa-jI4MFVOXEweetjT2f--4_ea4s_3X6QEv6JCAfkdUf3L-VYOqeOOfU8ZzCQnUdJtmIMWYD-Bzjw781N79Fwna-ixOjRz_G0Ma93c7bnIvB6zAKbXieHBNQbuksGMhxLt061IRJRUlBw8MMXeoS_rn7lcAD5DxZYpqWCeVCE0mp9rMyGUIOEZAWOsi3lpgAr31vJkQJC5o9PUPAINp7ko5uqpzoTF4vQXAt5rnTML-AWb0aVTih9y4jqjckMk-Lax6tohSsk1Jvb4xwhtp5lJ-SZcJ6AKEX_rkqi9N37vKEj_Y4UKC6W5_grv_F1rbyI1ENCTmQ1Muh6j6ZJ08JLrI5U_JPMXmXXQgtttoKDKIHCzY3KMAjIl61gTuWpJTkfJHTF0XbWRAA-aPpxN4MoSb91Zn8op_o3q0-U-5RkiUelS7hkXU4IeoVY_LxFdgCbb4UHZ_YOLMxo2pMeqrm6LWpi10rzfuGjpVNd5cVCyyTUWyndHZzNp29yxI07KPmcBn-jgeQVu2litlHNqINXbWMWudwPqYGaW-LenPsJ0NlaSOTgLm8Db4g9CiIokSR2pIUhbsZV4Aa2FxEEPpyfs-6swUmmoWxghTcl-dqDXpBr2cd5TFX9AgMBAAGjIzAhMA4GA1UdDwEB_wQEAwICBDAPBgNVHRMBAf8EBTADAQH_MA0GCSqGSIb3DQEBDQUAA4ICAQAhFh4ymB-gve0yxjLUlXQyxOvKZ-q8PSY4GQfcILWLHf0dI_cfDMLMgt1TRUo85mzfi-bwPrvP-200qsgF3p_piYJFRE5InKcsAwe_WwH9ySU5t9dd30G5Y9olXdtA-cG-YkqRh25KI6GDaPu2Ncd21b1SsVV0MMYkAPgW2tIslOo_09KVGg8MzXdcnXkJFz3Bt9651w0qAIL6FOSCj0wqAqwbX7TTfdc7TbD0GnRdQtHhD1qISSgUCbWV4FyE4ZBGndZUuMqNM9IkV7n2nAlKHJxxWca5xkaD0w9PUlw1JWFFAfUYACXdWmhliMG79PBueN_nkTt1AS0OeHkpgAmmW34wHM_Q6JpqguYyWAzeF-zpQEtizFFoRWlhMqiDUlp3KMm70XQr1pQrn2eiLwt3omKyw-ClgE7EFhyXBGrp5n-30eQQQBjZl6MBxnqB_d00VH09rkhoKPuFNAaw38ON4OQe4GSG97y-uPBaEUJIx7juwpQSU0FKczmHdgXVE-hFzTmqBcnFJx22TMTW3Io1r5j9yLQAjDgF2FFmw4dKf66nqIxZz88rB4w4NhOuTzBUIuNhdFoo1ATOBntgHb6XV0if34LHP8kNWgMY5o2nTLUbfe76NMwgYJxet9QLSwmBevKRBNRmo7t0MY0-_09URwbBmRnA1L4T5NtiG4sUkg"},{"name":"NjAyMDZBMzAyNURDODY0OTZBRkFFNTE3MDMyQ0IxRUQ-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFvzCCA6egAwIBAgIEUo-3LzANBgkqhkiG9w0BAQ0FADCBjjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSQwIgYDVQQDDBtBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNDEtNTMwHhcNMTgwODIwMTEzOTAzWhcNMjgwODE3MTEzOTAzWjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MScwJQYDVQQDDB5BZG9iZSBDb250ZW50IENlcnRpZmljYXRlIDQxLTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDsbEsMLTN0P6Imcr_MxAIo75nAfpVKileSn4cyPTfO7sm1Sl3MXz5-MhPc86xMlHcuI4sWzYlzpw4drqaVMAGsqESkbqLiFR6T876LZneouj9A56ElTM0OW4ctOIg0DT3yt0p44eU7JSArViFZsKExW988tN8mC-BoCxY74_9emIxlvgR-eQXRXA5xz6gsYX_wIU9rOgV8YnOKPfLNJ-2anc9vkeXP5OO4SPkUoD_VL_zuWJWkyjDT3SX22dW95fYv47WxgWRunRN2ciBXMyG0aFfgJGF9Mu-wmw20w3UxV1KzTms_cRDq3ay0VusA5F8mPQphD-SjWQk-PLH4vr2tiqh-EymRJueLIAlobU1zDtBD_oEN-gDLuJz0GKR5izeWnQWpQW8aw5yMxf4Shp5RAQvl0j9z8ffPyLrxrCZIy9U7UUVGRzSuOX7F_79ifZuq8jsrE1yC5KkdDSiOdZIoZzTNyY-aUf3nm4f3O0HN76G3HPBI5bfmGC94YigMhFq4JGZmRkF_AfmFySEQKu9FlIadf3ugGXW-ey3Fv5bkFVUk78yKwsAAIFHvZ9iMynAkGe2ZxXSvfhBZdp08H_TaonRC17z2fLxqAUBIxnc2AiZEbIHomFgbngaebFdwMxhaYXA9AAUAHxou4HSbzI9v_P2P6MVC9H4bWoSZxqT40QIDAQABoyAwHjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH_BAIwADANBgkqhkiG9w0BAQ0FAAOCAgEAQcUG6tettCU_U0QtIlHghfEVi-sk7tExQQpI3kTtda4_kCah-v6zPUrNkM__aAlchWaeaOtSxcA1_u8wRdgMUeQQVuhLmMT7dvklwKuEQEmwGVyaAB14yrxruNxcH-oqN88yDk7TqkNxs4cBzSsAVU3qD9imFvBl6DCewtoCjwyTWlMFakxIcVY_KSwn7pGpeGXWMcEQ4zYP-Uajh2VaGGb2WlfmN5U4OmAA3Z9M2wjDsvrADSHwlA1zWgnDPcE0xsnffFVxUDR7CPm1Fk_9_QHz46McUkbKfuNa_GN5UrZNk-5xBkQyJSNLJ-QJKazl9bc48VnE0cXB3QmaDcDpJyX2vwBYWhT4EXH0x_PIbnC9HNYeaU_WSAHv-iVkos0cOzNdRDkJLtulqryhBgu-EuZcYZSWk9AAqyK4NCbNMIkjtexZi6T5PgVdc6tatmAsOkSICwFOmswfqqR_Ho49w4_hTBSNV_tQnYreHDPbX8ovEeN47u53I-uY-fT9gpTvzoxJQ4wj4HEGrWBj3vjAXHklKyFXkDNJvYSffqy7S3GAsXlEq8Zkugbk1J9EY1XfqnqcxIArc339BrV9zz5WY85_FriRdAdpXryfojV-YcJcwWOqASBEpEYz0RbwydChnxX_uQ3KwB04KWtEV9Oli5lAWkiokuwyHtgC6H8s69c"},{"name":"NDZBRTg4MkJFQzQ1QzlFRjYxNkI2Mzc3MTRDQjJCRjI-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFuDCCA6CgAwIBAgIEGIWhhjANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDQxLTMwIBcNMTgwODE3MjAwODAzWhgPMjA2ODA4MDQyMDA4MDNaMIGOMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJDAiBgNVBAMMG0Fkb2JlIEludGVybWVkaWF0ZSBDQSA0MS01MzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALHOTW1fLYK9ZQP_4OGAih_QfBERhFChzFaeSPONRs5HtzhN_63CyWgRsEOZrpF3I9ws78yjAe_cdLYzhR0TTDywkDhDfQ3i04Ri-wRm97nCB1HiIFskEom5BQVskVkwWOl5GvUlqF72uHEIDFYqxty_MLXuovfC70dfGgrrJXyr3CrLsbOmZT12Q8yZoDKOq_B1tZFKxczGCAuoO8fySIiPWgDiRxTMRHc18uckfYqCU1qPg0vszaZxINo01M1XnORpFtO5aoBAmRGzVR6ChfaUMrZi4l8HwMWIfmV-OOmBYqqmScesKkvhdMAjTpdrbRgK33_UoXLdlvj1DQkVvIsP1XVl45RhA34R_QSKtEkgRgMNJ80y9bm0MKNuK0Om-RXOeaXDQC1ybDMun2N93eBdM19eiI0dP9rGWHkepZc4AsxCRYfd3s3cViajlHHe3IRfhAF3WFSsTPBmtksjjzdL-GmVBI5Q-A7jxrJpF8QPycdwJLNPPAJ55D-gW3c7AWjKU9SGIxCc9fKwYaLiP8sQCJRM7c4asp7LhlF_qgYBDkyiK0PESIGX0Tc-hTGTXwf201k-GTpYrpC2UBanOZlNhOD4Q-rCPX7mvop1AJx2_-8l_wlKbGYM_YIFV4jaQ0VG9TsWU1p6KWOyikSC_pLXsm6mOL4GvalGSIUNw3NNAgMBAAGjIzAhMA4GA1UdDwEB_wQEAwICBDAPBgNVHRMBAf8EBTADAQH_MA0GCSqGSIb3DQEBDQUAA4ICAQAX2s4xkpj1PHzvUImbWPSLfkdhcm5qiyvCvmeso43LPPwaPYlpOFYY3PKxxBJyrIwvSTh1-YDyGtUelqdYyG04NFk6e1Vl6snxoc9lYnpGbJInVsl0Mvfu_4K3PAuZ6L1-ETTwGXQhddF2vSmTwDaSn4zz05D6WLJbIqN3kIT1C4piB3lDm_ZJDQ9D7Gfv7yoa53utjYdpqsLGPBH2RK8WY-X5IajrWYP9N4rIWYfbeGzC1UXIejXG7UlP62qJaTX3RdOqrUEF2O4z_bFHMZiZgQiYeVak6q7ldBvEd883Cu24-T4ceP5mI22D8DvI-kztIZ2OoTwdmT2Tp7WrbSpo7tZAB7Id1jjH-bnkLTLF5LkGzluzTYPByRL7H9AWPgs4K4560f-sUXBT6uJRA6mQc51iPYVbVh7SmR5hQUJIj-5evc0TfgMgHtyR7dpLM7mzs68Hn-WN2T8HGnayxxEYgrhxjldOgwgT2QF_c4dULz5-rA3SohgM83VjxWHAs-dEGzUsSm0Pf9pKkSD8T3aWdqByogU7BiX3yePj_2qfcO2sy0iCiAYo_LPJliQrxVyDTr3TbNQXzmEBfoBlXm8IuvhgtjWjyywJlkXQC7_iYRxs91TWRn45WNNVB8xb_AkGdZ2tv0rbi0R0R6k0GMAB9aeNGLXMAnpaftMuX4Ak7A"},{"name":"N0E1Mjk2RTIxRDEyQzQwODZGRjA2NUZBMzEzOEJFNjY-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFvjCCA6agAwIBAgIEKWOCJzANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNDAtNDAeFw0xODA4MjAxMTM4MTJaFw0yODA4MTcxMTM4MTJaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNDAtNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKftNApXQUR4xXelil0p8Y5tuDWNCrwpyxAU1DMN4iPaICzjpJ69wg_JJfl_HUr65O37_G3nZ1ba2_HJHTd5jtJOjiK2VYepL2MsH4aYp4SYC-zW3H4ZX0ojqJgAe1P7aU4W8x5dt7zT7plnFfr2APgJpmq6_Bx75NRLfL527otHmOhMVkS6tpOaaJ2R6Or4aQ4Q_aclV6UWMyoAqK3P1w1PrUzun0tYkxbbJCkmX7LJ6fPNBYT9QcxTv_obWUhBvr3yuovnzX2f9fcQ1jBbsnO7CrJjzRbSlWu1xCEXtYOD5unASjWa0BPstbW4DSyfRCG_svgN-MzlXA14rOeSccI3IIdToj9e-ZLKx-P7LDqZuy6z-kSN3SW12As7J75a877No7FvfCeuDPq6643P6PxKUGv9q88vNWLn7u43Cz6XKhCewrwm1IFKDaDAbNcTQmzh8S1bbjYoZxGQHqDhV8KVTC1Ml_N8KeZQ9lKusrW8O5iORgkqW0_5PJDamU5eKDX6CK6xuK8iJpbcT4FoR5Du0fogXN9XMbjODFDZrdNZ4s7Df-kh2mhK649DllKJ_ffMTKuptofpJhWNmJUxDa0-ry73do5cpG-G7Ym2M5As1nzK628Io4cw_VPXCtS22uSj9Zf7v-ijkBsZUaDnmZ-uttGQZZIzyw_7BjNfWdqjAgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQB6ivlIKUreWdAjP4dsod7iBIxEFQ1pM9RSIVqFaPlNw7upxYm0ZdZ8m7E8_PRW3hgOZj1ccAye1Q9N2zXMznQgexLpNsSsO1NRkNkz-AHV_V8OcJQblwTY0g9qS1osbir01IGCMGbKNfuPgDTpCzjCxqGa1HPV6BjbggZK55xVxtEGBFo_kmUnSwXZ3oOrfLgWn8QSgux6sni8kMwS_UzEEfAiCtOFlh-r6nK_Wz4SIsjJ8sQz3cMxccNhaILo1EJ3bXCHtUtxS5Psf7sQPo0NFydKSj2voTYjd1rVxy4YGFsHKaxvg91mbMx8ravE1kRFosaYKkkE8ogRfBDfAMVp0D47MELMVQ2GP15ldYugBB9ngZFIN-dxP2kMiEFTCHT1xbn0m9ZlnpEh0NSJvfx2E0w-1qZTbAMX-3lSaWB6XG4m6G9KiuVVfemW8M2sg8Wd1WuQOVPxQ9iQ0dV6zDY13PnWpPx0PyN3q3oJuxgr3bTSLnh7iDS0AhQ96yRo_JSxFyrSKVlCwDZryTIL032ABI9OGSKtlq1eZkw38IUa2hiaKdYwCGjd8hiMxpNuG_PVqDgsOOoeRo5xucU9zinyz6XVy7LFaDpxXeCb6NsEsXo1HsxidE2CKlAomv5eajwE5_cdzIZMS2gna9aR8muG6AimZRC2DqpXeedj5UgLLA"},{"name":"MDVCQTc1QjIwNDkyMUU3ODkxOTRFODcxRTQ2RDAwMDg-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFtzCCA5-gAwIBAgIESfor5DANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDQwLTMwIBcNMTgwODE3MjAwNjA3WhgPMjA2ODA4MDQyMDA2MDdaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA0MC00MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr5nl0CF7Cnjj7YdtQI9mEWfx1HGoY_jiZwiEdEvK-8L1nqC64UPk0gFd7ConcBsZWiKdkeq9n_QdMlVXs4yZE1Qc2wLxLKrrrOd1_jTApZpiDQW8pDEsxPa1P-83ilkm-RFH1CE5kU2_noKKp5oEyU0Exk80wazUE7eugM186UuMutXDLHm-xo7TyWygXh4P5eeDNuyph-Yu_4P44QFrK5_LDN__RNX09LBd-JNuwhBqZU2uK7fgglZVn_7ka7RnEO7z-jYdgzSpkF3UkAgNy-DeFgguWyvpo5cFZ4troaIgrcRuzTm5ePupQQXj4Nfb7Z0MqDAf93VITgKxuJl0GEYFFRhFB4jWAedVcop7U8LQAbo0ZaHwEhOv8wCZ0EmNnV0VyLlfe41bzq3Knk-wMRsCTgQ8sxmTOr6-ZCBpgk8Uhi6FeasLZvxCCOoKCgLPIDtl7E5VrmpD-CrAc-b1tyvhiNcGXii7NMfGGNPq-fQtSR1_fHZknMC483D_MgDY9aLxX2WCWZhvWLLMlPRYH6aEaq7tbaiRf7-Pe2C3rHFSNM-AXxJqvquEnx4eVwYNuMF2AN2jZ81KPU_Bi9XFycdGnuGqSyf9Wmue7JRa7BtoCsSV-6tn9s80cOvJCQws0ArDDW99mNhsfZNP_RdkKHZr59P8yOqpfuA5mysz8T8CAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAAWQ6C5osgvBDiZdVnGPgkHlK7yzZhJswYkaw5MDV5HeOilK1F_ylKTubyteVTM9KnW8gCP4E3AhmeNjMho6fVSCPDEFdkw6yoPB6QkuzVSuo6MthruwYfVbunn0PlKZVsyfaq9T3XaTreZTfdo2cINoYdTYGKdt04H_z4Jyev5cyG3K8krSj4d2L_ls1bYKk_yRmdgZKKOB_rSyTFy6FOJTTL-5dfAC-zK4WVUDawETkXIY8d3bXI4OnoSfZRGYjfDR3wAz4hy-Tzd_p4B5jPj_c9VrJ2-gnqbK4jGKTqQukmxIXLztrcdHxfZEOJIm0RvhRy0HTRt8JjZu3BqzUYAsKq5uDnmYfKCMEvamX9746aSbW7VKfEpWoloX75TFxGT9La627BhQ5Oygpr-bzw0XyDy0ZoIguCR1cOGVbyZp0wPIT2p1_CUm2GaZ3wNI3u3GRznJ2TAD0sa98QRCtinnGJoDNq9SYsTutwkFQW3_i-TvkLye8bCS5fc5iZX6fSAjYhBxbN3X9VUFj443KeSuFvaugylFMs2dSkqnmsg-0LPzT0roBoNWpi-wh85Gj2ssz30YIYXV3I_SLyGMrd4Z9uiHR_7mDpfCRUk0b1-_-0sBlrosn44ezu4S10SZpsAyKoubIf48ldMdXdXGYrW1ZIoZVMy6yT7Tj0PYn7X9"},{"name":"NUYxOTAxMjFENTM5Mjk4QThBMEQ2MzE4MkFERkVGMEI-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFvjCCA6agAwIBAgIEFXKcqjANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNDAtMzAeFw0xODA4MjAxMTM4MDFaFw0yODA4MTcxMTM4MDFaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNDAtNTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMEk_n77CtG-xne--I5UXBipvhhz7_xcKsNB9CwQLCFg6AH5JXgYIBHzHrTTsH8jGjF66lEAx6NFPrr7eGl21EfYT-hyyIp9MIU3IzNQ2-PBCh2cpXzwwCfZqVSdmT_NwxWRb32eTPbTlUbbG9q9FqSxkDVfUHaHOR18uMpn9L31ALsuBr65tYo_g5n7X2hN69t6Ili7f_rkKtsYa7prNveKbHZQcG4POTqPK7w5eQxz69DqlmMtJgPBBUc2z0g9E7tnxu_EBuxe3LqYiuAZsErNklr4lHCx68yxgtQSMPWIqLtv4K1q3_WHNOUmnsgqtgMfFwFS6-dwSUUrtHlgEqKjHAGhMMEOcbBYKui13gw7ONyopnqE9tK0r5O8kJ7XXkdEWUyupFiHcppZNOSd5SMP_bK9AdYHBB4kIupthUVhaox6bJcP2u_wzCFRB-GuA7XW4oYYJ4NjiqdXdoH7lF9uduJtkFGM_-HxLjXMJfU4kpfd1v-qUM1AR01fH0Uhkp9Hf3ADXnXC2RllviXlaJgSjkoeNsizRgU-OAVaWAFHOZdWeFma1DpPes6vRYi_Ucg34fvFbk1u0fXFUV9wJW8i_PDmH7lU5ykoQdfkj1imKH65chzN_o_Mpx9iD5sDm0A8Al7a0flA2JlUjpm3E3gEP6-76_4FaJs3MXVv_Vu9AgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQCPq8gSPl3vP6l8x2WLDIGv8RidKu7qHAS_IbxqkHTWuluTNkg-SQr5yyJyjrGwqJ2H4H1O4ecezd5Xstth0gO1G_oxD0zKykkLid8h9oduKT61HS8fZx4dlAibn-odMce_8z_lrvnwfhVrRv5B6uiNIsRkpapr8MTafBe5BH4uF5dvAixQtDmolOHokUiz_OcBYj3rE9ZyM3mN8-qLCKsD8p8l_XCb3KwzvKyh_Apo1EMdjpN1A2IXUZnvd6QvmcfVcjLOqROW8SBcHwc2ZYadupvfQBIBTnS6N1pJL_jxUvIeOAWk79myV9yDjVGHcTQQ4lp7dlFekMxMnxkerlRTbeM3CxDvRYt1tGGFJopC2w0Kr6IeoV3xjc8EUkyrE-hmxYv4wBHRxAOywTjbkefID-7BU7dFjAhrCNqbnZevlt90x1DbGAJ2gfXLrcbvYkQTOmnR-MyHKlin0EEFIfrlb0L2S0JFlN6hGxNWKY-lpBoB4KzEVubLyvDo9fSohUdI3iDoHMVc14iBDQGRDKQdOH5-MW13qO3wiO360Al8ZgK5d6KU-Jl8NcxNdKZBK3KIXv12SSWWnWGbbP2y_OuuBVEyRlFryW1w8YE2jVBhHvJ4csY7ErEgoUv_iB3ktx9EEsnwtECmgXOijXhCJv8q_Q7Ueia2It5Cf7w5hy8t_w"},{"name":"NDNENzRFMTZBODQwRjhDRkU1RUY3MzAwRjhENDdEQTk-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFtzCCA5-gAwIBAgIEaKI7BDANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDQwLTMwIBcNMTgwODE3MjAwNjA3WhgPMjA2ODA4MDQyMDA2MDdaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA0MC0zMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyRRbHOt-k3vLdg7UxY9A6-sa9aZWOOp8jUWgGaijwLAE8yOrmOEAJAwDkGZIt3XtLRo6fpt5AHFk-brgilrlJfSD4r77xUgs64sVnBmnJF_UP0Q5enfB2JnxN5Q2jzHjqe7MrKNG5MGKTXBlcBTLKBdSdToKDJNcxoYujmCVCBYpVGknuUuC7JL7p2DG_RNmfMKVCKH2uqxKmEcV5FDjiZq-B-ciGO2-1VcNwL9ZJbEhFQWd8G2EqD6T_Q6bkhWhoHDQiUU-aErrpzHcHOg6uv0KAAbYzet5BXF6l6Nh188mvLfggS2eKRy7-JhC47ynIWSDmhAoC4fgf1p0u3j9dzYqh531XL1U8pW3ZxpmBQsPQJWNFbz5zXV94USVRIIbZagaeokf8xtqDxFR_rwXKIcMS8H-hMbuXDxHAJ42J-um9_7Wrwc2WNy51nsfGh-eQF-G6W5O7HuC2WoVufcN71VxMZKKNK1GxLbArGNCN-Af-LMSBMH0EAcbKtIAtYymdwVxFjSEFdNof1WBJ3yRQrn2jycG-BU-1fwzdmyuwv_l9r71HJnKqWAlsCFRPWSvVNikXvEStpurcq_zBeed8MmBLiIeFMGPXvGCcu1YJtC9678G4V7ZiWF7917QW_muZnfadhTppxJQEgpPqiYbYnGHqW8dVyEOkTHygYw96DMCAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBABqA-zWEdn136dpQ0iSxotF7I5QVOt3krfKXrZIt69DwrjjDXDgS6quTqTN39kZ2nEjC_EjQZn-3inX2-Rbm2bC3aOfv9cW6mzgk0isdrzzEmdC0cByErCHeLdM8mSWVCKgZwziB40mL-LoFWqJRx3Ws_vdu-pyJR7NMEu4UeEpuPRWgGTf1wxP6-d76Hci7zNt-0FU1chl_X2nBgu_tdoi7dmUFVTm17CndLv0LBnHBVkwJRaxLHP5EPGPQ7YV9BEp1z7PtVcQFZ3wbdSlUk42zRfgGJt7GKs6zs_cTKre_XBDvalPYGyDIZQQ9yu0BUgEHNex-IwdYjfha1RgrelZWwbQxQkesPV0JuLHSdhm7EMdH0_VdxR5fCjtrmRk3bseh1xoTj4wZJiUSv2NlEpiwyKzZ12It63OSNVFJdKcxE7UeIicUgmmRQ6sOKJZk5qHO11VhhxYDgx4JBS03lIBmFdi8LVXIBojE59aNEAoVkzAsw3UGcfzi4gMMMb7giMX9iZlGMzPdgz57Fqn1poOymLnFdjYJ-1qq33S6RZ4Y31a6G7UnDQXPJCN6dVArMTMpHPKGZgNpYAW84rBZ40GVGSAnvAanrWKeGJ6aiw_E1-lXX4x2Bu1BzpzO7O3jiY0gmTrs5i4PZNCDRtxLmhvCyxNwypwketkQiHAp-oHK"},{"name":"N0IwODZGMzM1NTQwQjQxRTgwN0Y2QzFCMzZERjBDQzI-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFvjCCA6agAwIBAgIEV5GM8TANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNDItNDAeFw0xODA4MjAxMTM5NDVaFw0yODA4MTcxMTM5NDVaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNDItNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJeP0h7toAMBhM1J6qH1Nl6zBOqNTB8u_TK9FQQygWfsVfGp4dm9_iYBsNkbioUpYaDgO7gtqFPQL221y6KQi2IVFL8dH6DTQBCf75y7Yi3LMwBtw6EBBaE-YDVRyCpb03c9gJSatIepsO7TbgfwwuUqV5a0VTr2vAxIW4HVMFOKMzdIZsMY029TrBqdbdLbQA5P3GGbJSkLm4bhQfcq7SfurOGKqt60JX4DaOlOcG3bQP65tM85IvXWA7vf5dF2pD8GlltjFGD3nE4MCntW1rGUCXRFHDR5jh-x75UT4cvAGqRC0gWq5fhjUZqffYbO7SF3mR21xkekyooj5XCrqw2H5L8L1xc9CmI5z0d98QCHorHYESAiLAriN7l3qDGJBINTs0QrQXI0htx7mMZey-7_SFXJP9ebc35Q_azje513Z5PHqhmLnLHheqJXCkM8stg_XNpNnMDjpeosYD9jPAAsFflnjaXr05i_ufnsHe2itWJXTzdNLxPOIqVqcCLHjFLmlEFKVl_jt5rpvziXeGM0JzJdr01Z9rNHJqENHw4ZrAlsnhzLS9uO92_ZPNcpemqeXy8gmQxz8VWE1LHQFT_o_fuGs8CFhOPjjcf1HswamyhxnWM6SvgHWjwxy94VgQrDkMZqgBPshU2TFr2jMv6Ho3LSeoHhEb_WxrxCJs5ZAgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQDDwdhyPEKC-0iI0Url_xNNhMfZ5Ih_SHuyYaBt9jkmY-vdIdYuXb4mGs0FXsrBw6OTqPh1OsBagZEyI_3GxcYC_mbuc_lIAyZ4b5I33f8Pau5cI-CETlPrJeXbNE1HbH6pASRijSlXFYjA7q2ZNDEp78qciBuY_EqxcmFTQJ3RVW0dLUehyOXjnUILgLkpizLl0-1g_pInBmWBl-O5mrj-c0TItInkS-ejG5PlZKDAnJyIckQqonuStVngsYOsn5F_QM16w3M-E6JsQI4ZYT3spXz97NnzdvqF0c-WQDER6G1TajguPeIPqvkWh9n-eoo5mVezuV2QH-r6bn9l2WG2rmm6RDnobk8olMAvOJUKZnnSCnVeFJ2kGN67qRZumKNZ1nY1GcleV3GIPQBlnZvJIe3fPZoru4c0g5yH8WQQuArnQVisMgZ-N3Ac1RYYRPjujgd-20GjEzllrOcnzT_nt7szFQLyeYVD1-118wkiIsqOQvXAhkRyrUbumzJG_x7ismJpBTAyLK2lEFdNWaGCEA-U-HygWbibdayN5Vzy4uhJAJWUwm96rtXBq2WACQrB2y8fiTMuVAuMiHF1g1DTbXLu3VBa0srDx2TuVjcgeBzfQ7C32Y1TyuhLodvx4X1FMmVi_uFh0TvkouHfzjFLZQTQ_dN7s2MRMuuF21J6Yg"},{"name":"RjY2Q0VERDAwNkQzRDA2RTQ4M0QxQjEwQTgxRTcxRUQ-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFtzCCA5-gAwIBAgIEf1qWXzANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDQyLTMwIBcNMTgwODE3MjAxMTQ2WhgPMjA2ODA4MDQyMDExNDZaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA0Mi00MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx1STOB1hDejJAMxXJ_kq7GWz2TOFq9a9-GINh9Tcq0qqR6vopw9HQvcqoIf93hZScwmcX_S6y82MamRVJ-YvXxgxYSP5QY-ibLaIlPZaDJ4nzbAhhQLC2YxAtgaAeeKVcfJ73yN0ZbaSR_atybgHOJ9wvjU1xCb2jq73gyLH4KYFPVkX92OjHyDGzZt5SfihbNHRJrRh85RsyWe6HpTa7eaA2899w6nZXkgUEBWswLvY2YypqDUIaLPWHj62WitTwiVv6t1jKVfIUVwvr1X9O_ebzAMXFlszVxy7CGFqqYflDB4X0IKCkLgvQKBEREpdMmJNUZ2QajoY4S3lKwNb-gEWBDfrZj-iXgT34GAPaxMOZQqyeduuptZs8lDAqlCsPT9L9pt2Qc82RKQbR1v0DfTJ1hpEub4_KfTvfTOhH8UM3l-ICzbnOlbH-3Z9pqL14wo1qv5Qo7MwfUgALjcbdB0gDwJGPasmD1bRbLKeMpKIGvysJdnIb4SGnsxL0unimMDMt2Aau7wDhTR7L3S40R2sYiiVS70lzPiOACdhLhpvkfSQS6-qN5EF4zsiIzKv42H_OvUnbeotT41AHzFoATm1KaTp_zknvnm95MofqcFSONp5Cy9awzvDCcYT6igCpGyhuEiN6GTUj8C3X3yCxWVEOKEIMcRojQDfRaE-t3ECAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAIKwII9EPnpB8r3xxsPgInTKv9i_8t9IEtKAu4G_DwPLoQkHtJbBZZJOrzx2O0DSPeANRFe494EP3pHSvTByu0F8rNJKMJ2CuoqsXVkeGOiU5Cq64xCo_Dq42fFqoNd4LRpY7f5UKDZbJDU0Rye0w0d6AcTDeJvYG7UWq0raFxWXWF9IpAKJzxgFpxAqr8RaL5zeB8qZ_t8ybF4XMOsdhreEa5QxLt_MNUWaKWt1_I_5v1LrCkN40tTK-l_t32GpGnvLwUeL1UzPcQMybIqOuq4e7lsriPP0qAtGC1oIKJqEi8sij31eJ6aVaGxAneAKumO1ote8CN5BGPExRqqmKiMnkxWlFjZuNzQR_0PMhmWm-Ocm9fovmCKSSp58aO-jz2CbHsKXP1mQfCRt-enkDS4gUUyL7fsfaEN36MfpFn8PxVmfUCErKn02Q_dAlum5pRUOj_ELfOs3tIzTGGp3wc_V2ty4avY_zNFQpnbsPbz9AWlswjQoBhYdEg7w8yM46UjQz1E73-ue71xfpg38ayPRjYMJzM0EpeRxKjRVCyccZnIDRrRLVFH8iED7jkBtMi9j6iREYC6C15gkPh9T-uydLwuqChAsE99Ri2OGCBRt36a8AyyMuhrhdJtKqE2zZVVMpHOkbmVio-cOIWiHo4PaxvCPNyWBfEj68n3GFmeA"},{"name":"QTUzNjQ3QjcwNEVDREE0Rjg0RUYxOUM2MkRFQzkxRDU-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFvjCCA6agAwIBAgIEItKWnDANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNDItMzAeFw0xODA4MjAxMTM5MzRaFw0yODA4MTcxMTM5MzRaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNDItNTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKJc2DVSo6CBLaQHMv6D27tzjjAYyCxCszYp85_Jv58g0LUZyMhQQNQybZBIN8xbQ59TuhGg_8gmyqkRmbLia1oxqkJp5yeQvf9_uN3_yzmnfR4tHWcTmNSiCPDR4GHOGq6QQw7Rwr1dQsflvBZhi2YG04PfatYzp2tGeHZQ6GwOEa5R_XJ7PoXuOSkahCxeLI1aGsuSOXuv6HyR10HzELWwQ4U5ykJH9Gbg3Qw7PArtDYsstAO7fSLlaC-7na4AYRBK8y7l0Jq7ajQ-pHzTkqTSvMPHl-q5PuER_5w2j1V5Z8dK_O3X83S-0V33I1rqDgxQ9ddqFBNq2qrw_kNxv5LWiydKoEZHRbNaJiflXVlWULLzEprG0AkVb41nE9RqzcrLYCDPAnHTVGdozQeLsKHieYH8N-PG9acKzUkv0XPmBqgEBcf9WiOri4EjXcJn0GmgIExoMxqlUoQ0pmD3GIJPUw1pLJf0L4cByvhQZNhLeFW4dV4kln2Kq25lDroa7dvsfb35wnYTc4gQHoFntjDwyrHAJWkDgcpKhqHm4AujR--1t70MxYi-Uo6k5bJQI89KepmMd2Sm0RGfAkk2xD7SJkQgLetpN1ZbY7jdxCjZVeCoAym1I-jVug1MCErPfXeOc2ti66oCM3wj4-eIxr5CjUYXbCcdN2ExsUqUVqupAgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQA0jzKUCWZPL-U-P4paoaOvhOYz1e-AQVYbhelgGow5jJZSPOb7cThPqH_3-KH-FYjFjUkeLUsqT3491WN3GwEKGhUodsj1N0c9kz8q10Dv-4Pns4cPPFVOzifa5z6DM4NWZhcygp8n62flmmmOXxr_s6HmP9PJ2PbyIfmQMIvCXnYQDTi-N6G3p2v67tdLzuoxLbY7v7WJ3N8tCxlJxHmcGsu2c3MBfMNMa3XQgPhgQS98ZAp-LZWswhJL7F9NGEPDbJ3lpz38YOUrORq909l9vPJshWt39j-uw3RFv13m2VhYjBec-NDM8jkJE84XIBLnBNN_cEml7loXOrpGBcngsrMCs13YS7bRPc9r8UQVgN9o4DOMaV4ilre8EjOFWLIJmmMoa6UzfjO51b5FI62CXBuXL29A2g3LCqXnSTXhE_T55Cza5Jkw7we_q_ekNgMM98I6f3k4eGnJGs4Fi6gN0GGkM7cgzAXlYIewsCceQ8x2ZIk1LwB9Ugih3UEjXJssdlirc0LmlX8n4Fvkr2jZ2ZlVVIKmDONp4xjvc0vmFrDjxS97YzFYGOiZAM4QDC5GlbZAEf9Llmx63NSX6Ic-l5Ik7doTEb7LUeB3895wA_1xatkZ8TMIRlYCQ3XvGg24SdIZnao8xmyqMMBGMMPsFv4RbC9lNAhou67ceT06jw"},{"name":"Mzk3RUVCMkVENzBGMEZGNzk2MURDRjAwNDY2NEU5ODU-ODFhOWYyODktYzhlNy00OTkzLWEwYWEtNjE2ODRmY2VmYzgw","extension":"der","content":"MIIFtzCCA5-gAwIBAgIETINL9zANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDQyLTMwIBcNMTgwODE3MjAxMTQzWhgPMjA2ODA4MDQyMDExNDNaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA0Mi0zMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAstVaHBvg4LixSCsn2X0BWhUlXnFxmhgCPGn3sZT5zHL2ORxvCYPaLpvlbfcs6B2Hi0RDcRk8u1EWPXpeiczZsFefxajbrlACepeJNEfxTu7fRE4hVGg6ZhoRukfWDxZvAagZlV343ktRv96v6_SaXg5WcosZxUp0rSFf_065e-qUBHTkhdv_b-I2MsbTm259kUn2vqdJrBOPWh-vGgfqIK02CcpQOzvJGYYakwdJfAmdPhHa2TbfHBDD2hR2ZfBRbc7rzldLKRlnyzOfrSDqTSVvEF-GV0AcSsTRmkqg3DjqcySjOiEns1IiZOXViuEaX5qJWGZcG46tRajMkgKXaL3j46_IC76f2028qDDdf7hV_Jg4o0ux1Mp111Wi2YkJbxqR1tdf5NngzpcgRPwhc6REPlKS344V5uAJNsj0klfvSSxDeg-kSlXU0glK7klwNVTP8z7p6G1S-dxugQzZk-5OJwNXFlHfrsYRbM0ocmZ2MjLP82TmKJOp_xvxme7tIix6p_jB_QdpoT_ZG-T5sPBJmTY1S6HVIMX3fEEYhFpQG9Eewr5QPZYFXIB1TU7_GV_b_PBFY3VmXhutbgx2p64xnk8rEr85v4gfzCBVdjCVUg_hP2B9fd8-GUBqrEhHrNRsrb3VillTYUCP1neciD47EhmIssOj_u3Pln5GERUCAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAJGIHsGzL-rJBxE99KYWtTYBUmwJ2na_4TrUmX9VqhzNx5zku2LVzUPUNT0PmPrny-s1xSUhWI6QD9253v8CgYThW-U1xE9mKMJ6AzTOkldCj2KnqwT7xeGPL4vMUtBnZfrXTDoFEKaFxK4Go3LrpsrmgvV75gbA1XAf9ruuUOXreVKFBcbPOK0wTAPyIDpjWTcZG2davZt38Q4R5imVYhooufuOthQVYXhiiqwwu3LkL9HqxQ6wdfapkbaLGTMN2yh3ltADTMD1tb7G0RHQ69S-JY79QvYzvh7h0OyfHHxTBjDUCpZ33EWbwinEPpY3hpyN1g2PgkF9VQ_8sgh1YN1XUCLw3NCPQfA6yrHbD_jkBeIQhYoce7ESxgrmVjVdV4Tz0MxghTN4iFTYGm0L9ffYpfAjhhqkHBD6l_hZtq7FqxjaD-oOrw29mUpyyuZgxllMTwSYghOIG6veUxuQUlgHyvGiim1eQJbMwrWwt-O4gr4cJT9BaO5Bv-zcz440JI2xWTfDGN_eQrQ_S87J2uwfQVXKpTUA6wcGv4-oObbOPawl4sjX1oMbw1aRDAst83ozoX9LJdUQwomYGdgd7KZ6_yJpGrtC40Xii6oCCKjNyJhMthhh8alElHb_9BUJo5V4WDLbHHHlKcRBmGSqPdfd5myUQQ5AcEVAydNV1pJl"}],"asnps":[{"name":"T0RGaE9XWXlPRGt0WXpobE55MDBPVGt6TFdFd1lXRXROakUyT0RSbVkyVm1Zemd3e300MjMxMDc1Zi0xOTU3LTRhYTEtYmZkYS04MTA1NTAwYTZhNWY","extension":"asnp","content":"eyJhc25wU3BlY1ZlcnNpb24iOiIxLjIiLCJwYXlsb2FkIjoiZXlKaGNIQlFjbTltYVd4bElqb2llMzBpTENKc1pXZGhZM2xRY205bWFXeGxJam9pZTF3aWJHbGpaVzV6WlVsa1hDSTZYQ0o3ZTJ4cFkyVnVjMlZKWkgxOVhDSXNYQ0pzYVdObGJuTmxWSGx3WlZ3aU9qVXNYQ0pzYVdObGJuTmxWbVZ5YzJsdmJsd2lPbHdpTVM0d1hDSXNYQ0psWm1abFkzUnBkbVZGYm1SVWFXMWxjM1JoYlhCY0lqcDdlMlZtWm1WamRHbDJaVVZ1WkZScGJXVnpkR0Z0Y0gxOUxGd2laM0poWTJWVWFXMWxYQ0k2ZTN0bmNtRmpaVlJwYldWOWZTeGNJbXhwWTJWdWMyVmtSbVZoZEhWeVpYTmNJanA3ZTJ4cFkyVnVjMlZrUm1WaGRIVnlaWE45ZlN4Y0ltVnVhV2R0WVVSaGRHRmNJanA3ZTJWdWFXZHRZVVJoZEdGOWZYMGlMQ0oxYzJWeVVISnZabWxzWlNJNkludDlJaXdpWm5Kc1VISnZabWxzWlNJNkludDlJaXdpY21Wc1lYUnBiMjV6YUdsd1VISnZabWxzWlNJNklsdDdYQ0p3Y205bWFXeGxSMlZ1WlhKaGRHbHZibFJwYldWemRHRnRjRndpT2pBc1hDSnNhV05sYm5ObFNXUmNJanBjSW50N2JHbGpaVzV6WlVsa2ZYMWNJaXhjSW14cFkyVnVjMlZGZUhCcGNubFVhVzFsYzNSaGJYQmNJanA3ZTJ4cFkyVnVjMlZGZUhCcGNubFVhVzFsYzNSaGJYQjlmU3hjSW1Gd2NFVnVkR2wwYkdWdFpXNTBVM1JoZEhWelhDSTZYQ0o3ZTJGd2NFVnVkR2wwYkdWdFpXNTBVM1JoZEhWemZYMWNJaXhjSW1GamRHbDJZWFJwYjI1VWVYQmxYQ0k2WENKR1VreGZTVk5QVEVGVVJVUmNJaXhjSW1KcGJHeHBibWRUZEdGMGRYTmNJanBjSWs1UFVrMUJURndpTEZ3aWRYTmxaRVp2Y2t4bFoyRmplVkJ5YjJacGJHVmNJanAwY25WbExGd2liR2xqWlc1elpVVjRjR2x5ZVZkaGNtNXBibWREYjI1MGNtOXNYQ0k2ZTF3aWQyRnlibWx1WjFOMFlYSjBWR2x0WlhOMFlXMXdYQ0k2ZTN0c2FXTmxibk5sUlhod2FYSjVWMkZ5Ym1sdVoxTjBZWEowVkdsdFpYTjBZVzF3Zlgwc1hDSjNZWEp1YVc1blNXNTBaWEoyWVd4Y0lqb3dmWDFkSWl3aVkyOXVkSEp2YkZCeWIyWnBiR1VpT25zaWJtZHNRWEJ3U1dRaU9pSkJZM0p2WW1GMFJFTXhJaXdpYm1kc1RHbGlVblZ1ZEdsdFpVMXZaR1VpT2lKR1VreGZTVk5QVEVGVVJVUWlMQ0pqY21WaGRHVmtSbTl5Vm1ScElqcG1ZV3h6WlN3aVkyRmphR1ZTWldaeVpYTm9RMjl1ZEhKdmJDSTZleUpoY0hCU1pXWnlaWE5vU1c1MFpYSjJZV3dpT250N1lYQndVbVZtY21WemFFbHVkR1Z5ZG1Gc2ZYMHNJbTVuYkV4cFlsSmxabkpsYzJoSmJuUmxjblpoYkNJNmUzdHVaMnhNYVdKU1pXWnlaWE5vU1c1MFpYSjJZV3g5Zlgwc0ltRndjRlZ6WVdkbFZISmhZMnRwYm1kRGIyNTBjbTlzSWpwN0ltVnVZV0pzWldSVWNtRmphMmx1WnlJNlptRnNjMlVzSW5CeWIzUmxZM1JVY21GamEyVmtSR0YwWVNJNlptRnNjMlVzSW1WMlpXNTBjMVJ2VkhKaFkyc2lPbHRkZlgwc0luTmxjblpsY2tsa0lqb2liR056TFhOMFlXZGxJaXdpY0hKdlptbHNaVk4wWVhSMWN5STZJbnQ3Y0hKdlptbHNaVk4wWVhSMWMzMTlJaXdpWVhCd1RHbGpaVzV6WlUxdlpHVWlPaUpTUlZOSlJGVkJUQ0lzSW1Ga1pHbDBhVzl1WVd4TVpXZGhZM2xRY205bWFXeGxjeUk2SW50OUluMCIsInNpZ25hdHVyZXMiOlt7ImhlYWRlciI6ImV5SmpiMjUwWlc1MFUybG5ibUYwZFhKbFFXeG5Jam9pVWxNMU1USWlMQ0owY25WemRHVmtRMlZ5ZEVacGJtZGxjbkJ5YVc1MFFXeG5Jam9pVTBoQkxUVXhNaUlzSW5SeWRYTjBaV1JEWlhKMFJtbHVaMlZ5Y0hKcGJuUkpibVJsZUNJNk15d2lZMlZ5ZEdsbWFXTmhkR1ZFWlhSaGFXeHpJanBiZXlKcFpDSTZJazR3UlRGTmFtc3lVbFJKZUZKRVJYbFJlbEYzVDBSYVIxSnFRVEpPVlZwQ1RYcEZlazlGU2taT2Fsa2lMQ0p6ZFdKcVpXTjBUbUZ0WlNJNklrRmtiMkpsSUVOdmJuUmxiblFnUTJWeWRHbG1hV05oZEdVZ05EQXROaUlzSW1obGVGTmxjbWxoYkU1MWJXSmxjaUk2SWpJNU5qTTRNakkzSWl3aWMyaGhNVWhoYzJnaU9pSTRORUV6UWpsRU16UkdPRVJDUmprelFrWXhPVVZETXpCRFJEZ3pOamczTWtaQ01ERXhSVGs1SWl3aWMyVnhkV1Z1WTJVaU9qRXNJbVJ2ZDI1c2IyRmtVR0YwYUNJNklrNHdSVEZOYW1zeVVsUkplRkpFUlhsUmVsRjNUMFJhUjFKcVFUSk9WVnBDVFhwRmVrOUZTa1pPYWxrdFQwUkdhRTlYV1hsUFJHdDBXWHBvYkU1NU1EQlBWR3Q2VEZkRmQxbFhSWFJPYWtVeVQwUlNiVmt5Vm0xWmVtZDNMbVJsY2lKOUxIc2lhV1FpT2lKTlJGWkRVVlJqTVZGcVNYZE9SR3Q1VFZWVk0wOUVhM2hQVkZKR1QwUmplRkpVVVRKU1JFRjNUVVJuSWl3aWMzVmlhbVZqZEU1aGJXVWlPaUpCWkc5aVpTQkpiblJsY20xbFpHbGhkR1VnUTBFZ05EQXROQ0lzSW1obGVGTmxjbWxoYkU1MWJXSmxjaUk2SWpRNVptRXlZbVUwSWl3aWMyaGhNVWhoYzJnaU9pSTJPRE5HTmpKQ01UZzFSRU13TURreVFrSXhSREExUWtKQ01UWTJNMEV5T0VVNFF6SXlNVVUwSWl3aWMyVnhkV1Z1WTJVaU9qSXNJbVJ2ZDI1c2IyRmtVR0YwYUNJNklrMUVWa05SVkdNeFVXcEpkMDVFYTNsTlZWVXpUMFJyZUU5VVVrWlBSR040VWxSUk1sSkVRWGROUkdjdFQwUkdhRTlYV1hsUFJHdDBXWHBvYkU1NU1EQlBWR3Q2VEZkRmQxbFhSWFJPYWtVeVQwUlNiVmt5Vm0xWmVtZDNMbVJsY2lKOVhYMCIsInNpZ25hdHVyZSI6Int7c2lnbmF0dXJlMX19In0seyJoZWFkZXIiOiJleUpqYjI1MFpXNTBVMmxuYm1GMGRYSmxRV3huSWpvaVVsTTFNVElpTENKMGNuVnpkR1ZrUTJWeWRFWnBibWRsY25CeWFXNTBRV3huSWpvaVUwaEJMVFV4TWlJc0luUnlkWE4wWldSRFpYSjBSbWx1WjJWeWNISnBiblJKYm1SbGVDSTZNaXdpWTJWeWRHbG1hV05oZEdWRVpYUmhhV3h6SWpwYmV5SnBaQ0k2SWs1VldYaFBWRUY0VFdwR1JVNVVUVFZOYW1zMFVWUm9RazFGVVRKTmVrVTBUV3RHUlZKclZrZE5SVWtpTENKemRXSnFaV04wVG1GdFpTSTZJa0ZrYjJKbElFTnZiblJsYm5RZ1EyVnlkR2xtYVdOaGRHVWdOREF0TlNJc0ltaGxlRk5sY21saGJFNTFiV0psY2lJNklqRTFOekk1WTJGaElpd2ljMmhoTVVoaGMyZ2lPaUl4TWpRME4wVXhOakZFTXpNelJVWTBSVVJCTlRORU5URkVOa0kyTURZek9ETkJRVE5HTTBFM0lpd2ljMlZ4ZFdWdVkyVWlPakVzSW1SdmQyNXNiMkZrVUdGMGFDSTZJazVWV1hoUFZFRjRUV3BHUlU1VVRUVk5hbXMwVVZSb1FrMUZVVEpOZWtVMFRXdEdSVkpyVmtkTlJVa3RUMFJHYUU5WFdYbFBSR3QwV1hwb2JFNTVNREJQVkd0NlRGZEZkMWxYUlhST2FrVXlUMFJTYlZreVZtMVplbWQzTG1SbGNpSjlMSHNpYVdRaU9pSk9SRTVGVG5wU1JrMVVXa0pQUkZGM1VtcG9SRkpyVlRGU1ZWa3pUWHBCZDFKcWFFVk9SR1JGVVZScklpd2ljM1ZpYW1WamRFNWhiV1VpT2lKQlpHOWlaU0JKYm5SbGNtMWxaR2xoZEdVZ1EwRWdOREF0TXlJc0ltaGxlRk5sY21saGJFNTFiV0psY2lJNklqWTRZVEl6WWpBMElpd2ljMmhoTVVoaGMyZ2lPaUpDT1RJM1FqWTBOakkzUXpKRFFVVkROVU0zTTBSQ09FVXdPRFZCTlVJeU0wSkZSVUpGUVRFeUlpd2ljMlZ4ZFdWdVkyVWlPaklzSW1SdmQyNXNiMkZrVUdGMGFDSTZJazVFVGtWT2VsSkdUVlJhUWs5RVVYZFNhbWhFVW10Vk1WSlZXVE5OZWtGM1VtcG9SVTVFWkVWUlZHc3RUMFJHYUU5WFdYbFBSR3QwV1hwb2JFNTVNREJQVkd0NlRGZEZkMWxYUlhST2FrVXlUMFJTYlZreVZtMVplbWQzTG1SbGNpSjlYWDAiLCJzaWduYXR1cmUiOiJ7e3NpZ25hdHVyZTJ9fSJ9XX0"}]} -------------------------------------------------------------------------------- /rsrc/packages/mac/lan-illustrator/ngl-preconditioning-data.json: -------------------------------------------------------------------------------- 1 | {"npdId":"OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx","npdSpecVersion":"1.0","deploymentMode":"FRL_LAN","operatingConfigs":[{"name":"SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx-80","extension":"operatingconfig","content":"eyJvY1NwZWNWZXJzaW9uIjoiMS4xIiwic2lnbmF0dXJlcyI6W3siaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TVRBekxDSmpaWEowYVdacFkyRjBaVVJsZEdGcGJITWlPbHQ3SW1sa0lqb2lUakJSTUU5VVZYbE5hbVJFVVZSWk0wNXJSa2ROUlVrMVRXdEtSVTE2YUVOUFZHY3lUMFJOTVUxVlJTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnUTI5dWRHVnVkQ0JEWlhKMGFXWnBZMkYwWlNBMU1TMDJJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTTJGaU5tUmlOMk1pTENKemFHRXhTR0Z6YUNJNklqQTBSVVpFUTBNek1VUkdSa1pETkVKRFFUQTBNa0pGTnpZMFEwSkVNREF3TjBJd1FUSTRPRUlpTENKelpYRjFaVzVqWlNJNk1Td2laRzkzYm14dllXUlFZWFJvSWpvaVRqQlJNRTlVVlhsTmFtUkVVVlJaTTA1clJrZE5SVWsxVFd0S1JVMTZhRU5QVkdjeVQwUk5NVTFWUlM1a1pYSWlmU3g3SW1sa0lqb2lUV3RTUms1cVVrZE9WR2MxVGxSa1FrMVZXVEpPYTFKRFRtdFJlbEpVWTNwTk1GRjNVa1JPUlUxcVZTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnU1c1MFpYSnRaV1JwWVhSbElFTkJJRFV4TFRFd05DSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJalk1Tm1ZMU1tTmhJaXdpYzJoaE1VaGhjMmdpT2lJM1F6YzVRekJFT0VORU1EWkVRVGhFTVRGRVFrTkVSamhHUlRORFJUTXhRakl6UlRRM05EUkdJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxclVrWk9hbEpIVGxSbk5VNVVaRUpOVlZreVRtdFNRMDVyVVhwU1ZHTjZUVEJSZDFKRVRrVk5hbFV1WkdWeUluMWRmUSIsInNpZ25hdHVyZSI6IjxyZW1vdmVkPiJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TVRBeUxDSmpaWEowYVdacFkyRjBaVVJsZEdGcGJITWlPbHQ3SW1sa0lqb2lUa1ZhUlZGclJrZFBWRXBDVFRCSk5FMUVXVE5OUkU1RFRtcFZOVTVWVFRCT1ZWVXlUa1ZKTTFKcldTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnUTI5dWRHVnVkQ0JEWlhKMGFXWnBZMkYwWlNBMU1TMDFJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTVdNek16ZzFOalFpTENKemFHRXhTR0Z6YUNJNklrRXlPVU0xT0RBeFJqSXpRekV5UlRneU5UQkJRVFl5UlRJMk1ETXhPVFU1TWtVMFF6bEVNekFpTENKelpYRjFaVzVqWlNJNk1Td2laRzkzYm14dllXUlFZWFJvSWpvaVRrVmFSVkZyUmtkUFZFcENUVEJKTkUxRVdUTk5SRTVEVG1wVk5VNVZUVEJPVlZVeVRrVkpNMUpyV1M1a1pYSWlmU3g3SW1sa0lqb2lUVEJSZWxKVVFUSlNWVVY0VFdwU1JWSnFVa0pPUlUxNVQxVkpNMUY2YkVaTk1GVjRVbFZPUmxGcldTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnU1c1MFpYSnRaV1JwWVhSbElFTkJJRFV4TFRFd015SXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkzTkdNd09XRmlJaXdpYzJoaE1VaGhjMmdpT2lKQ1JVSTFNelUyTmpaRlFrUkJRVGxFTnpVNVJUazBOakpEUkRnMlFqVTRSalEzUmpFeE9EUXpJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWswd1VYcFNWRUV5VWxWRmVFMXFVa1ZTYWxKQ1RrVk5lVTlWU1ROUmVteEdUVEJWZUZKVlRrWlJhMWt1WkdWeUluMWRmUSIsInNpZ25hdHVyZSI6IjxyZW1vdmVkPiJ9XSwicGF5bG9hZCI6ImV5SnBaQ0k2SW1ZNE1qTTRZV0kxTFdVMk5ETXROREJoTmkwNFpEbGpMVFZoT1RWallXRTBPRGcyTkNJc0ltNXdaRWxrSWpvaVQxUlZlbHBVVm1sYVYxbDBXVmRLYlUxNU1EQk9SMVY0VEZkR2FsbHFWWFJhYlZwb1RqSk5lVTFFV1RSWmFsRjRJaXdpYm1kc1FYQndTV1FpT2lKSmJHeDFjM1J5WVhSdmNqRWlMQ0p1Y0dSUWNtVmpaV1JsYm1ObElqbzRNQ3dpWVhOdWNFUmhkR0VpT25zaWRHVnRjR3hoZEdWSlpDSTZJazVYV1RWT2VrNXBXa1JGZEUweVNYZFphVEF3V1hwYWFVeFVhelZOZW1OMFdrUlZNbHBxWXpSTlJGcHNUVmRLYWlJc0ltTjFjM1J2YldWeVEyVnlkRWhsWVdSbGNuTWlPbHQ3SW1obFlXUmxjaUk2SW1WNVNtcGlNalV3V2xjMU1GVXliRzVpYlVZd1pGaEtiRkZYZUc1SmFtOXBWV3hOTVUxVVNXbE1RMG93WTI1V2VtUkhWbXRSTWxaNVpFVmFjR0p0Wkd4amJrSjVZVmMxTUZGWGVHNUphbTlwVlRCb1FreFVWWGhOYVVselNXNVNlV1JZVGpCYVYxSkVXbGhLTUZKdGJIVmFNbFo1WTBoS2NHSnVVa3BpYlZKc1pVTkpOazE1ZDJsWk1sWjVaRWRzYldGWFRtaGtSMVpGV2xoU2FHRlhlSHBKYW5CaVpYbEtjRnBEU1RaSmF6bEdWbGh3VDFKSFVrUlZWM1JIVVdzMGQxTnJTazlXUjA0MFZHNXdWMUZyTlhGWFZFWk9UVVpWTUZWV1VuSk5SVGxXVWxoc1RtVnNWV2xNUTBwNlpGZEtjVnBYVGpCVWJVWjBXbE5KTmtsclJtdGlNa3BzU1VWT2RtSnVVbXhpYmxGblVUSldlV1JIYkcxaFYwNW9aRWRWWjA1VVNYUk9hVWx6U1cxb2JHVkdUbXhqYld4b1lrVTFNV0pYU214amFVazJTV3BSZWxwRVFUUk5lbVJzU1dsM2FXTXlhR2hOVldob1l6Sm5hVTlwU2tWUlZGRXdUbFZKZDAxRWF6Vk9ha2wzVG1wRmVrMUVWa05PUlZrelVUQlNSRkpFV1hoUFJWa3lUbXByTVU1VVZURk5SVmw0U1dsM2FXTXlWbmhrVjFaMVdUSlZhVTlxUlhOSmJWSjJaREkxYzJJeVJtdFZSMFl3WVVOSk5rbHJPVVpXV0hCUFVrZFNSRlZYZEVkUmF6UjNVMnRLVDFaSFRqUlVibkJYVVdzMWNWZFVSazVOUmxVd1ZWWlNjazFGT1ZaU1dHeE9aV3hWZFZwSFZubEpiakJ6WlhsS2NGcERTVFpKYkVaV1ZXdFNUbUZzV2toVmJYQlNUa1pLVmxOVVVrOVNSMDQxVkRGV1drMXJOVVpVVkU1T1VrWkdORlJYY0c1TmJFcEdWMnRLVDJFeFJXbE1RMHA2WkZkS2NWcFhUakJVYlVaMFdsTkpOa2xyUm10aU1rcHNTVVZzZFdSSFZubGlWMVpyWVZkR01GcFRRa1JSVTBFeFRXa3dNRWxwZDJsaFIxWTBWVEpXZVdGWFJuTlVibFowV1cxV2VVbHFiMmxOZWxreFRrUkpNRTVFVldsTVEwcDZZVWRGZUZOSFJucGhRMGsyU1dwVk1rNXFSWHBPTUZVMFRucE5kMDR3VFROUmExRXdUbXBDUms1RVJYcFNha2w1VVdwTk5VMUZUVEJPUlVreFVWVk5NRTU2U1dsTVEwcDZXbGhHTVZwWE5XcGFVMGsyVFdsM2FWcEhPVE5pYlhoMldWZFNVVmxZVW05SmFtOXBWVlpXVTFKRk1YRldhMlJUWVd4Rk1GVnNWa3BPUlRWRldUTnNVRlpXYTNsVWExWk9UVEF4UlZWWWFFNWhiV041Vld0V1lWRnJOWEpWVXpWcldsaEphV1pXTVRraUxDSnphV2R1WVhSMWNtVWlPaUo3ZTJOMWMzUnZiV1Z5VTJsbmJtRjBkWEpsTVgxOUluMHNleUpvWldGa1pYSWlPaUpsZVVwcVlqSTFNRnBYTlRCVk1teHVZbTFHTUdSWVNteFJWM2h1U1dwdmFWVnNUVEZOVkVscFRFTktNR051Vm5wa1IxWnJVVEpXZVdSRlduQmliV1JzWTI1Q2VXRlhOVEJSVjNodVNXcHZhVlV3YUVKTVZGVjRUV2xKYzBsdVVubGtXRTR3V2xkU1JGcFlTakJTYld4MVdqSldlV05JU25CaWJsSktZbTFTYkdWRFNUWk5hWGRwV1RKV2VXUkhiRzFoVjA1b1pFZFdSVnBZVW1oaFYzaDZTV3B3WW1WNVNuQmFRMGsyU1dzMVJsSlVWazVOUlRFelZHdFNVazVXUm5GaVJWcFBZV3RhUmxSVlVtcGxWVEZ4V1hwV1RtVnJWWGxWVjNCelVUQTVSVmRVVWs5U1ZsVnBURU5LZW1SWFNuRmFWMDR3VkcxR2RGcFRTVFpKYTBacllqSktiRWxGVG5aaWJsSnNZbTVSWjFFeVZubGtSMnh0WVZkT2FHUkhWV2RPVkVsMFRsTkpjMGx0YUd4bFJrNXNZMjFzYUdKRk5URmlWMHBzWTJsSk5rbHFTVE5PUkdSc1RrUlZhVXhEU25waFIwVjRVMGRHZW1GRFNUWkphMVpDVW10V1ExRlVhek5PTUVaR1RWVkZNazU2UVRWT2FrRjRUVEJOTWxGNlRURlNWVTE2VG5wV1JVMXFUa2ROYTFFeFRqQlZhVXhEU25wYVdFWXhXbGMxYWxwVFNUWk5VM2RwV2tjNU0ySnRlSFpaVjFKUldWaFNiMGxxYjJsVWExWkdUbFV3ZDFSWVpFOVNSa1V4VlZkd2MxSnJOWEZTYTFaT1VrZE9OVlJYY0dwT1ZURTJVbFJLVW1GdGVFUlVNRkphVGtVMVJsWlROV3RhV0VscFpsTjROMGx0Ykd0SmFtOXBWREZXVm1WR1JuRmFSVlpRVmxaS1JsUnRkRkpOUmtwRlZWaHdUMVpHVmpSVWExWlBVa1pLY1ZkVVFrOU5SV3Q2Vkcxd2JrNUZOVlpVVTBselNXNU9NVmx0Y0d4Wk0xSlBXVmN4YkVscWIybFJWMUoyV1cxVloxTlhOVEJhV0VwMFdsZFNjRmxZVW14SlJVNUNTVVJWZVV4VVRXbE1RMHB2V2xob1ZGcFlTbkJaVjNoUFpGY3hhVnBZU1dsUGFVa3dUVzFGTVU5RVJUSlplVWx6U1c1T2IxbFVSa2xaV0U1dlNXcHZhVkpGV2taUmVrVXdVbXBvUlZKRVNUQk9NRVUxVDFSQ1IwMXJUa05QVlVVelRYcFdRbEZyVmtOU2FtZDZUMFJKTWxGNlFrSlJVMGx6U1c1T2JHTllWbXhpYlU1c1NXcHZlVXhEU210aU0yUjFZa2M1YUZwR1FtaGtSMmRwVDJsS1VGWldWalJWVjNCclVsVTVWbFZyVms5aE1VVjNWV3RTVW1Wck5WVldXR2hQVWxVMVJWVnRjRnBOUlRSM1UxUk9UMkZ0WXpCVWJGWk9URzFTYkdOcFNqbFlXREFpTENKemFXZHVZWFIxY21VaU9pSjdlMk4xYzNSdmJXVnlVMmxuYm1GMGRYSmxNbjE5SW4xZExDSmhaRzlpWlVObGNuUlRhV2R1WldSV1lXeDFaWE1pT201MWJHd3NJbU4xYzNSdmJXVnlRMlZ5ZEZOcFoyNWxaRlpoYkhWbGN5STZiblZzYkgwc0luQnliMlpwYkdWVFpYSjJaWEpWY213aU9pSm9kSFJ3Y3pvdkwzUmxjM1E2TVRJeklpd2ljSEp2Wm1sc1pWSmxjWFZsYzNSUVlYbHNiMkZrVUdGeVlXMXpJanA3SW1SbGRtbGpaVkJoY21GdGN5STZXeUprWlhacFkyVkpaQ0lzSW05elZYTmxja2xrSWl3aVpHVjJhV05sVG1GdFpTSXNJbTl6VG1GdFpTSXNJbTl6Vm1WeWMybHZiaUlzSW1OMWNuSmxiblJFWVhSbElpd2laVzFpWldSa1pXUkNjbTkzYzJWeVZtVnljMmx2YmlJc0ltVnVZV0pzWlZaa2FVMWhjbXRsY2tWNGFYTjBjeUlzSW1selZtbHlkSFZoYkVWdWRtbHliMjV0Wlc1MElpd2lhWE5QYzFWelpYSkJZMk52ZFc1MFNXNUViMjFoYVc0aUxDSnBjRUZrWkhKbGMzTWlMQ0p0WVdOQlpHUnlaWE56SWwwc0ltRndjRkJoY21GdGN5STZXeUp1WjJ4QmNIQkpaQ0lzSW01bmJFRndjRlpsY25OcGIyNGlMQ0p1WjJ4TWFXSldaWEp6YVc5dUlpd2libWRzUVhCd1VISnZabWxzWlZOamIzQmxJaXdpYm1kc1RHbGlVblZ1ZEdsdFpVMXZaR1VpTENKamRYSnlaVzUwUVhOdWNFbGtJaXdpYkc5allXeGxJaXdpWVhCd1RtRnRaVVp2Y2t4dlkyRnNaU0lzSW1Gd2NGWmxjbk5wYjI1R2IzSk1iMk5oYkdVaUxDSnVaMnhCY0hCTVlYVnVZMmhUZEdGMFpTSXNJbUZ6Ym5CRFpYSjBjMGR5YjNWd1NXUWlMQ0pqZFhOMGIyMWxja05sY25SelIzSnZkWEJKWkNKZGZTd2laR1Z3Ykc5NWJXVnVkRTF2WkdVaU9pSkdVa3hmVEVGT0lpd2lZbkpoYm1ScGJtY2lPbnNpYm1GdFpTSTZJa0ZrYjJKbElGQnliMlIxWTNScGIyNGdWR1Z6ZENBdElFWlNUQ0JSUlNKOUxDSndjbTltYVd4bFUyVnlkbVZ5UTJWeWRFWnBibWRsY25CeWFXNTBJam9pTURReE1FVkRNRFk1TnpoRVJqTkRNVEF5T1VJMlJEUTNPVGN3TkRVNU1VRTNRVUl3UXpVeE16VkRNVGxEUTBNNE5ERTFPRU15TkVJNVJqQkJRMEUyTkVKRk5URTJORUpHTnpBNE9UZzRRek14TWpsRFFUYzRSVU13TTBJeE1VUTJSVFl5TnpsRU0wTkVSREEyTmtFMlJrTkJSa1F4T1VJelJFVkdOREkxTnpBaWZRIn0"},{"name":"QnJpZGdlMXt9MjAxODA3MjAwNA-OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx-80","extension":"operatingconfig","content":"eyJvY1NwZWNWZXJzaW9uIjoiMS4xIiwic2lnbmF0dXJlcyI6W3siaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TVRBekxDSmpaWEowYVdacFkyRjBaVVJsZEdGcGJITWlPbHQ3SW1sa0lqb2lUakJSTUU5VVZYbE5hbVJFVVZSWk0wNXJSa2ROUlVrMVRXdEtSVTE2YUVOUFZHY3lUMFJOTVUxVlJTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnUTI5dWRHVnVkQ0JEWlhKMGFXWnBZMkYwWlNBMU1TMDJJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTTJGaU5tUmlOMk1pTENKemFHRXhTR0Z6YUNJNklqQTBSVVpFUTBNek1VUkdSa1pETkVKRFFUQTBNa0pGTnpZMFEwSkVNREF3TjBJd1FUSTRPRUlpTENKelpYRjFaVzVqWlNJNk1Td2laRzkzYm14dllXUlFZWFJvSWpvaVRqQlJNRTlVVlhsTmFtUkVVVlJaTTA1clJrZE5SVWsxVFd0S1JVMTZhRU5QVkdjeVQwUk5NVTFWUlM1a1pYSWlmU3g3SW1sa0lqb2lUV3RTUms1cVVrZE9WR2MxVGxSa1FrMVZXVEpPYTFKRFRtdFJlbEpVWTNwTk1GRjNVa1JPUlUxcVZTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnU1c1MFpYSnRaV1JwWVhSbElFTkJJRFV4TFRFd05DSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJalk1Tm1ZMU1tTmhJaXdpYzJoaE1VaGhjMmdpT2lJM1F6YzVRekJFT0VORU1EWkVRVGhFTVRGRVFrTkVSamhHUlRORFJUTXhRakl6UlRRM05EUkdJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWsxclVrWk9hbEpIVGxSbk5VNVVaRUpOVlZreVRtdFNRMDVyVVhwU1ZHTjZUVEJSZDFKRVRrVk5hbFV1WkdWeUluMWRmUSIsInNpZ25hdHVyZSI6IjxyZW1vdmVkPiJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TVRBeUxDSmpaWEowYVdacFkyRjBaVVJsZEdGcGJITWlPbHQ3SW1sa0lqb2lUa1ZhUlZGclJrZFBWRXBDVFRCSk5FMUVXVE5OUkU1RFRtcFZOVTVWVFRCT1ZWVXlUa1ZKTTFKcldTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnUTI5dWRHVnVkQ0JEWlhKMGFXWnBZMkYwWlNBMU1TMDFJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTVdNek16ZzFOalFpTENKemFHRXhTR0Z6YUNJNklrRXlPVU0xT0RBeFJqSXpRekV5UlRneU5UQkJRVFl5UlRJMk1ETXhPVFU1TWtVMFF6bEVNekFpTENKelpYRjFaVzVqWlNJNk1Td2laRzkzYm14dllXUlFZWFJvSWpvaVRrVmFSVkZyUmtkUFZFcENUVEJKTkUxRVdUTk5SRTVEVG1wVk5VNVZUVEJPVlZVeVRrVkpNMUpyV1M1a1pYSWlmU3g3SW1sa0lqb2lUVEJSZWxKVVFUSlNWVVY0VFdwU1JWSnFVa0pPUlUxNVQxVkpNMUY2YkVaTk1GVjRVbFZPUmxGcldTSXNJbk4xWW1wbFkzUk9ZVzFsSWpvaVFXUnZZbVVnU1c1MFpYSnRaV1JwWVhSbElFTkJJRFV4TFRFd015SXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakkzTkdNd09XRmlJaXdpYzJoaE1VaGhjMmdpT2lKQ1JVSTFNelUyTmpaRlFrUkJRVGxFTnpVNVJUazBOakpEUkRnMlFqVTRSalEzUmpFeE9EUXpJaXdpYzJWeGRXVnVZMlVpT2pJc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWswd1VYcFNWRUV5VWxWRmVFMXFVa1ZTYWxKQ1RrVk5lVTlWU1ROUmVteEdUVEJWZUZKVlRrWlJhMWt1WkdWeUluMWRmUSIsInNpZ25hdHVyZSI6IjxyZW1vdmVkPiJ9XSwicGF5bG9hZCI6ImV5SnBaQ0k2SWpBNU5UUTJZamsxTFRNM016UXRORGRoTkMwNFl6RTVMV0UzTVdWaE16TXlPVGRsTmlJc0ltNXdaRWxrSWpvaVQxUlZlbHBVVm1sYVYxbDBXVmRLYlUxNU1EQk9SMVY0VEZkR2FsbHFWWFJhYlZwb1RqSk5lVTFFV1RSWmFsRjRJaXdpYm1kc1FYQndTV1FpT2lKQ2NtbGtaMlV4SWl3aWJuQmtVSEpsWTJWa1pXNWpaU0k2T0RBc0ltRnpibkJFWVhSaElqcDdJblJsYlhCc1lYUmxTV1FpT2lKTk1rMTRUV3BKTlU1RVJYUmFSR040V2xNd01GbFVaek5NVjBrd1RWZFJkRmxxUlRGTmFrVjZXbTFSTTA0eVNtd2lMQ0pqZFhOMGIyMWxja05sY25SSVpXRmtaWEp6SWpwYmV5Sm9aV0ZrWlhJaU9pSmxlVXBxWWpJMU1GcFhOVEJWTW14dVltMUdNR1JZU214UlYzaHVTV3B2YVZWc1RURk5WRWxwVEVOS01HTnVWbnBrUjFaclVUSldlV1JGV25CaWJXUnNZMjVDZVdGWE5UQlJWM2h1U1dwdmFWVXdhRUpNVkZWNFRXbEpjMGx1VW5sa1dFNHdXbGRTUkZwWVNqQlNiV3gxV2pKV2VXTklTbkJpYmxKS1ltMVNiR1ZEU1RaTmVYZHBXVEpXZVdSSGJHMWhWMDVvWkVkV1JWcFlVbWhoVjNoNlNXcHdZbVY1U25CYVEwazJTV3M1UmxaWWNFOVNSMUpFVlZkMFIxRnJOSGRUYTBwUFZrZE9ORlJ1Y0ZkUmF6VnhWMVJHVGsxR1ZUQlZWbEp5VFVVNVZsSlliRTVsYkZWcFRFTktlbVJYU25GYVYwNHdWRzFHZEZwVFNUWkphMFpyWWpKS2JFbEZUblppYmxKc1ltNVJaMUV5Vm5sa1IyeHRZVmRPYUdSSFZXZE9WRWwwVG1sSmMwbHRhR3hsUms1c1kyMXNhR0pGTlRGaVYwcHNZMmxKTmtscVVYcGFSRUUwVFhwa2JFbHBkMmxqTW1ob1RWVm9hR015WjJsUGFVcEZVVlJSTUU1VlNYZE5SR3MxVG1wSmQwNXFSWHBOUkZaRFRrVlpNMUV3VWtSU1JGbDRUMFZaTWs1cWF6Rk9WRlV4VFVWWmVFbHBkMmxqTWxaNFpGZFdkVmt5VldsUGFrVnpTVzFTZG1ReU5YTmlNa1pyVlVkR01HRkRTVFpKYXpsR1ZsaHdUMUpIVWtSVlYzUkhVV3MwZDFOclNrOVdSMDQwVkc1d1YxRnJOWEZYVkVaT1RVWlZNRlZXVW5KTlJUbFdVbGhzVG1Wc1ZYVmFSMVo1U1c0d2MyVjVTbkJhUTBrMlNXeEdWbFZyVWs1aGJGcElWVzF3VWs1R1NsWlRWRkpQVWtkT05WUXhWbHBOYXpWR1ZGUk9UbEpHUmpSVVYzQnVUV3hLUmxkclNrOWhNVVZwVEVOS2VtUlhTbkZhVjA0d1ZHMUdkRnBUU1RaSmEwWnJZakpLYkVsRmJIVmtSMVo1WWxkV2EyRlhSakJhVTBKRVVWTkJNVTFwTURCSmFYZHBZVWRXTkZVeVZubGhWMFp6Vkc1V2RGbHRWbmxKYW05cFRYcFpNVTVFU1RCT1JGVnBURU5LZW1GSFJYaFRSMFo2WVVOSk5rbHFWVEpPYWtWNlRqQlZORTU2VFhkT01FMHpVV3RSTUU1cVFrWk9SRVY2VW1wSmVWRnFUVFZOUlUwd1RrVkpNVkZWVFRCT2VrbHBURU5LZWxwWVJqRmFWelZxV2xOSk5rMXBkMmxhUnprelltMTRkbGxYVWxGWldGSnZTV3B2YVZWV1ZsTlNSVEZ4Vm10a1UyRnNSVEJWYkZaS1RrVTFSVmt6YkZCV1ZtdDVWR3RXVGswd01VVlZXR2hPWVcxamVWVnJWbUZSYXpWeVZWTTFhMXBZU1dsbVZqRTVJaXdpYzJsbmJtRjBkWEpsSWpvaWUzdGpkWE4wYjIxbGNsTnBaMjVoZEhWeVpURjlmU0o5TEhzaWFHVmhaR1Z5SWpvaVpYbEthbUl5TlRCYVZ6VXdWVEpzYm1KdFJqQmtXRXBzVVZkNGJrbHFiMmxWYkUweFRWUkphVXhEU2pCamJsWjZaRWRXYTFFeVZubGtSVnB3WW0xa2JHTnVRbmxoVnpVd1VWZDRia2xxYjJsVk1HaENURlJWZUUxcFNYTkpibEo1WkZoT01GcFhVa1JhV0Vvd1VtMXNkVm95Vm5salNFcHdZbTVTU21KdFVteGxRMGsyVFdsM2FWa3lWbmxrUjJ4dFlWZE9hR1JIVmtWYVdGSm9ZVmQ0ZWtscWNHSmxlVXB3V2tOSk5rbHJOVVpTVkZaT1RVVXhNMVJyVWxKT1ZrWnhZa1ZhVDJGcldrWlVWVkpxWlZVeGNWbDZWazVsYTFWNVZWZHdjMUV3T1VWWFZGSlBVbFpWYVV4RFNucGtWMHB4V2xkT01GUnRSblJhVTBrMlNXdEdhMkl5U214SlJVNTJZbTVTYkdKdVVXZFJNbFo1WkVkc2JXRlhUbWhrUjFWblRsUkpkRTVUU1hOSmJXaHNaVVpPYkdOdGJHaGlSVFV4WWxkS2JHTnBTVFpKYWtrelRrUmtiRTVFVldsTVEwcDZZVWRGZUZOSFJucGhRMGsyU1d0V1FsSnJWa05SVkdzelRqQkdSazFWUlRKT2VrRTFUbXBCZUUwd1RUSlJlazB4VWxWTmVrNTZWa1ZOYWs1SFRXdFJNVTR3VldsTVEwcDZXbGhHTVZwWE5XcGFVMGsyVFZOM2FWcEhPVE5pYlhoMldWZFNVVmxZVW05SmFtOXBWR3RXUms1Vk1IZFVXR1JQVWtaRk1WVlhjSE5TYXpWeFVtdFdUbEpIVGpWVVYzQnFUbFV4TmxKVVNsSmhiWGhFVkRCU1drNUZOVVpXVXpWcldsaEphV1pUZURkSmJXeHJTV3B2YVZReFZsWmxSa1p4V2tWV1VGWldTa1pVYlhSU1RVWktSVlZZY0U5V1JsWTBWR3RXVDFKR1NuRlhWRUpQVFVWcmVsUnRjRzVPUlRWV1ZGTkpjMGx1VGpGWmJYQnNXVE5TVDFsWE1XeEphbTlwVVZkU2RsbHRWV2RUVnpVd1dsaEtkRnBYVW5CWldGSnNTVVZPUWtsRVZYbE1WRTFwVEVOS2IxcFlhRlJhV0Vwd1dWZDRUMlJYTVdsYVdFbHBUMmxKTUUxdFJURlBSRVV5V1hsSmMwbHVUbTlaVkVaSldWaE9iMGxxYjJsU1JWcEdVWHBGTUZKcWFFVlNSRWt3VGpCRk5VOVVRa2ROYTA1RFQxVkZNMDE2VmtKUmExWkRVbXBuZWs5RVNUSlJla0pDVVZOSmMwbHVUbXhqV0Zac1ltMU9iRWxxYjNsTVEwcHJZak5rZFdKSE9XaGFSa0pvWkVkbmFVOXBTbEJXVmxZMFZWZHdhMUpWT1ZaVmExWlBZVEZGZDFWclVsSmxhelZWVmxob1QxSlZOVVZWYlhCYVRVVTBkMU5VVGs5aGJXTXdWR3hXVGt4dFVteGphVW81V0Znd0lpd2ljMmxuYm1GMGRYSmxJam9pZTN0amRYTjBiMjFsY2xOcFoyNWhkSFZ5WlRKOWZTSjlYU3dpWVdSdlltVkRaWEowVTJsbmJtVmtWbUZzZFdWeklqcHVkV3hzTENKamRYTjBiMjFsY2tObGNuUlRhV2R1WldSV1lXeDFaWE1pT201MWJHeDlMQ0p3Y205bWFXeGxVMlZ5ZG1WeVZYSnNJam9pYUhSMGNITTZMeTkwWlhOME9qRXlNeUlzSW5CeWIyWnBiR1ZTWlhGMVpYTjBVR0Y1Ykc5aFpGQmhjbUZ0Y3lJNmV5SmtaWFpwWTJWUVlYSmhiWE1pT2xzaVpHVjJhV05sU1dRaUxDSnZjMVZ6WlhKSlpDSXNJbVJsZG1salpVNWhiV1VpTENKdmMwNWhiV1VpTENKdmMxWmxjbk5wYjI0aUxDSmpkWEp5Wlc1MFJHRjBaU0lzSW1WdFltVmtaR1ZrUW5KdmQzTmxjbFpsY25OcGIyNGlMQ0psYm1GaWJHVldaR2xOWVhKclpYSkZlR2x6ZEhNaUxDSnBjMVpwY25SMVlXeEZiblpwY205dWJXVnVkQ0lzSW1selQzTlZjMlZ5UVdOamIzVnVkRWx1Ukc5dFlXbHVJaXdpYVhCQlpHUnlaWE56SWl3aWJXRmpRV1JrY21WemN5SmRMQ0poY0hCUVlYSmhiWE1pT2xzaWJtZHNRWEJ3U1dRaUxDSnVaMnhCY0hCV1pYSnphVzl1SWl3aWJtZHNUR2xpVm1WeWMybHZiaUlzSW01bmJFRndjRkJ5YjJacGJHVlRZMjl3WlNJc0ltNW5iRXhwWWxKMWJuUnBiV1ZOYjJSbElpd2lZM1Z5Y21WdWRFRnpibkJKWkNJc0lteHZZMkZzWlNJc0ltRndjRTVoYldWR2IzSk1iMk5oYkdVaUxDSmhjSEJXWlhKemFXOXVSbTl5VEc5allXeGxJaXdpYm1kc1FYQndUR0YxYm1Ob1UzUmhkR1VpTENKaGMyNXdRMlZ5ZEhOSGNtOTFjRWxrSWl3aVkzVnpkRzl0WlhKRFpYSjBjMGR5YjNWd1NXUWlYWDBzSW1SbGNHeHZlVzFsYm5STmIyUmxJam9pUmxKTVgweEJUaUlzSW1KeVlXNWthVzVuSWpwN0ltNWhiV1VpT2lKQlpHOWlaU0JRY205a2RXTjBhVzl1SUZSbGMzUWdMU0JHVWt3Z1VVVWlmU3dpY0hKdlptbHNaVk5sY25abGNrTmxjblJHYVc1blpYSndjbWx1ZENJNklqQTBNVEJGUXpBMk9UYzRSRVl6UXpFd01qbENOa1EwTnprM01EUTFPVEZCTjBGQ01FTTFNVE0xUXpFNVEwTkRPRFF4TlRoRE1qUkNPVVl3UVVOQk5qUkNSVFV4TmpSQ1JqY3dPRGs0T0VNek1USTVRMEUzT0VWRE1ETkNNVEZFTmtVMk1qYzVSRE5EUkVRd05qWkJOa1pEUVVaRU1UbENNMFJGUmpReU5UY3dJbjAifQ"}],"certificates":[{"name":"N0Q0OTUyMjdDQTY3NkFGMEI5MkJEMzhCOTg2ODM1MUE","extension":"der","content":"MIIFwDCCA6igAwIBAgIEOrbbfDANBgkqhkiG9w0BAQ0FADCBjzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSUwIwYDVQQDDBxBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNTEtMTA0MB4XDTE4MDgyMDEzMjUxNFoXDTI4MDgxNzEzMjUxNFowgZExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMREwDwYDVQQHDAhTYW4gSm9zZTEWMBQGA1UECgwNQWRvYmUgU3lzdGVtczEZMBcGA1UECwwQQ2xvdWQgVGVjaG5vbG9neTEnMCUGA1UEAwweQWRvYmUgQ29udGVudCBDZXJ0aWZpY2F0ZSA1MS02MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwc_h_5GMrWJKMjpq3AZOQ-eJ5U0YkHaX7ZM_Fo4xAz9zTGPO7RLPoxWNTIb1yt4EhLT3ENkFwllKCLQEON8-G8V0XbvnwUVcq0Lmdcw9PX7yWBo1QJ5qR7yffOV3ADatSgKoE-ccD80dx4R9UZzQRVPatQlYBYLH8LBFLXxoEOJfnL5jpkNX0J9o0oRdBSpCkd_iKw3MSN4RIQU6izfwuwgr-GD-MIXlhgD7wKvQ8PDeTH8N9F1PMn7aRpKVYLpK7gfpSjuCGlNh4LuP7ZR2kRC6T7I7O8aHhQnTzDj8qCjeT9iH65DyrbGbm41oO4TMyrSemzW8Ku2LRJk5PGCtSh-qb0owosDJlj60kTSe4XGIBcLJaWftbWhzkj1DmCl-Q_ya30rJ57CKKDq8Do4RcKmyykNYvN-c4W2fpGUOZ5PSbnFtpCxfya2A5Y6FSJxJP8xY5g-oSLbqoiKth261nZO2-RcP3n2WArR_XDZKr18dPFY4m5JwaSlOCxhp3Bs7FPAMnVLq1RyykKKB_VLagH9IN1rQ827gNq6IRo0cNJA_y3Cel8iRCB9D0u1D-oUCRbCykd1t7ZdoSJ6sq1LXyC3xmTZ1-p-NdDZQPSziRO5uw5nNEJsE0DZL27duCHbClZzFycB49knxrHSTnr03FPEf5JWt54_8GRT46s-xTWMCAwEAAaMgMB4wDgYDVR0PAQH_BAQDAgeAMAwGA1UdEwEB_wQCMAAwDQYJKoZIhvcNAQENBQADggIBAJUCqh_PHSJAXN1RcCHfI-uKHAsBCP-YGxCPQftNvuvmSgXwqikG0VBbSaWHMKoTFpb6ETNAK1tNX-rcfVEDwGWn7kde2hiCMuD2qKPoNA7t8u4NrC12jLHbuarOjCI3mStbUtf_Jfqs_e8anUrR0z3k_plLZLCmZ5fbiYYiK73ov4OJKICjDql3uW0DUOwFTGQWzcqtaxw18h679rhaq4V_rMkgQ0KrnzYlKJiXkfNwokHn6hBxDH1aFVHxq2xKKv45Nxz_lWLNK9KUg0qdH_aN-D3X7VGDPWEbkfRcWRBicvNkSVsm3ApyFLqADMCdJUu0ZyZEj10eEVujSAvMEaf2uMZ7tM0bak2PDAryLSLeRFdoNAsH-fVpQiGpqQklpccGLcUQvoRebbbaZ2GNdruSUkgUeoafLUi7wDdH2-WZjRZnnB38b_De2kolqws-yJXYnBoLywuvDPLlTnGT9Bdt8-Tu2SlKHXts8YyMOzRN7cE_JPW-Srp6d0TVIzuE1k7Z2bDKRB-Ki_mgM2VmpIBNm8Bj6jakB-jK2ttl__14_52gc61bahkPnuPQoOCJ59YiFxsSueskqP-Z_81Deg7RnpweEdBn-bTzpwIJWe3beaPj6scTQBKYfhl6g9v0P8cMY1hDzWUSIo8a2Dshv2wZKNiDSrA5qeBHrirpVnuY"},{"name":"MkRFNjRGNTg5NTdBMUY2NkRCNkQzRTczM0QwRDNEMjU","extension":"der","content":"MIIFuTCCA6GgAwIBAgIEaW9SyjANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDUxLTMwIBcNMTgwODE3MTgyMDU1WhgPMjA2ODA4MDQxODIwNTVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJTAjBgNVBAMMHEFkb2JlIEludGVybWVkaWF0ZSBDQSA1MS0xMDQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCxglFTVCjZsf-E6jASTG_Z0m8flximepl1wkDqtatoR-WoGvFzP6mCh8-bK66KwMiunJ5Yu0xvxwGvA9AmQK5bHRsCqY2EyiD6s4Iv_oLbsxe64CTfLT_sVo_UilVE4W0lbi8b0uALaGmypMYNHJqNqwTIkxwX1Tlbls1d60sidTksqfySza0A0kRlVOC6bllJ2PwlpC2We9qEQvDsKRC7orCK5UHFl3bvOJKnCj4an-rdDY8oookiz76qQRxwImKIy8s4E5aQhRG3KDXMxXdiC2ah-oL2Zdt9AX7aq0sgjyjnStrIMgn4Gz51lJ4ldMV_9pqz7hUE9VsPDcJTru6ModxQPPdQSl3prQl5GnjDWytSBxKLJVqVQVhpJTrWmofRkp2_jQcOlPW7zIVP97lFGR7l1ac9XKn6mAmZKk-icM0CFnbMSRv-Rv7r0MkPIYaqvcK9LMrRMxHEcS2pvRiJktqqRepnfUEA99-530Vv_dZlDIiNAtRpQr5sESbj7n8TNrAZ4leoxNezOlrl0YziIGdPc4gSs-3lJgA028ne565oZyoF6JhCaILCTlCUtTpbknLg6ilDhnlKFPMGTCl7uJtUrHoz96vhLzqRlz-XPOkISQRXtAhlHGigMTEOtKRJmmY1QTDtQNb_bZNizBxbJiqK1S6VRZkxKCQ_8SF_owIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAgQwDwYDVR0TAQH_BAUwAwEB_zANBgkqhkiG9w0BAQ0FAAOCAgEAAr6mRzOJNCe7rWfAh2njVFzr4Xa9fQAjWKa_9mhzQDbTOtko6XFc_ZiKgZYmLhu6ypJFJZYfSsmA6jia6NMie711B7qwFY34p66iBccCml56UgVxTSzLPyGTS0XMnpZcHyx8HUGarXzq2BMPXm3jJWWZcFMw9kqvYolu9m89adtqabScgM1flz6Mg_sGBgpfRz-oeLQztVNP4NaUFZNu2XS_iob-zIKtuv24rfrl_C53CHEyLJa64xeKOp48r5JJoqfdieZE3ztvNfGr8ffYE-wE3ghhnIXy8aBfj8lpP06giZXBGzN--Nvlyy7eaHFdhQUNKAZrgBbqo135LCCKGe3EmDwzUCAbq0oz7ZWRVnFYQI-wy3gjer0DM5cVmKCMLhcKybD4XXGO4zWRra9ji8Q_VrQnAEq_8YC2DwU2tPx4XWakNI6X4GWu8i3vTfm21fq1UBYCgiTNXicgeQvwBAn0DiFwWEoL7E5QbuOOklVzCEN-tJ9W4YoRp3szV_OiISOvm6vNRe7pGUnhy1fdQl_wEzIGlHX0q38QYHiBFAoWtdlHxjrlqKpCijtc1DCPJx1OpBl3IsMw9Qgg3yz4zqXXHb2BcMt4UkkvKQGfk0g6MMxgWG8Wxir_KyG03PG55As8Dyrx-rTEUoHrrET0y040GzweBsHxYjR-9JJEs70"},{"name":"NEZEQkFGOTJBM0I4MDY3MDNCNjU5NUM0NUU2NEI3RkY","extension":"der","content":"MIIFwDCCA6igAwIBAgIEHDOFZDANBgkqhkiG9w0BAQ0FADCBjzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSUwIwYDVQQDDBxBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNTEtMTAzMB4XDTE4MDgyMDEzMjUwNFoXDTI4MDgxNzEzMjUwNFowgZExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMREwDwYDVQQHDAhTYW4gSm9zZTEWMBQGA1UECgwNQWRvYmUgU3lzdGVtczEZMBcGA1UECwwQQ2xvdWQgVGVjaG5vbG9neTEnMCUGA1UEAwweQWRvYmUgQ29udGVudCBDZXJ0aWZpY2F0ZSA1MS01MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvPoqKM_fDqxrgck0n-r1q2r0RGEDwcR1ouXyIpVL5UsVLH41ZU0clcbPyQLjF2k9rSYEV13DVLhNEU2xmVWx7-ULv-YnRDBDj752y8bvS11KC689wVitwt3aZVj6MLDE9l_QE_fuDjeKujupabrBBH8FfjuOGYhJQbf5EdQj7PPKo3KrslJYmpM-DA6-1H-R1cbwET-7N9hky1-gPOP04cQDWVkmuJeswPfxStNZ7rOrcq_R9QQy5HEmNtnRSDF0WUs9ZFJaebeg8cax1d0ZgufscGYhDR3mBae-2xl6rnO6qxyydROMlHxYXfTn4ihr08d8PUATgSKIxDWyVDm43sVR5QxhxFGl0lJzWYhQbci6rhyG2hvjaAqkDk_My9SBHvX5BI3Qk9cjxyiYPggk7Kq2WtDk0L35OV0y9NShkfsUvmHGE2lEyFVGdRnhjy_W8DnUB1ES8ZKFY598i6G_i_5ZUf1mIxXIt2W9yaiDbpzIDIHTAXmkEnA87l4U_yqYPDCZhqJjVLSHbjR-sw-JXWfHiB9PCIg13JOcMnnzvbOZ3556MMV9vY551ekdD4sk50Zfyp6-3uG9RLt4H_Betunp-cwrUgB5CMD60BTLjtIKwVNd1fiN8UWxM6RCSv3_B3fpkaL78d9VxarsWVsP332NiX1xNPRU-pu-VVBTvlkCAwEAAaMgMB4wDgYDVR0PAQH_BAQDAgeAMAwGA1UdEwEB_wQCMAAwDQYJKoZIhvcNAQENBQADggIBAI70k5sIBYvVlV3nUXK7SbXKxnVo2pLcjsxPIyPdVkQF8WmnwbQ76h3vdLY4tN-H4GnKI8KtR16moZZgoJZREioFCA0t8qUggMMTmzm9TO0hkP3774KvkEx3ACYgUqstsGvK1SVeHdN_F4gI-Hwolhy8dnR--WpmXwpf2MgnJNY1O5e6BhuTmg4ZHgO_fKFMUBxUYWAPKRAqpHwv_GizDosBTzxQW0WDVvZlzQkm3wnWQAQ8LxSG2frFaO66IlpFAdN5HFzcMHSbiGFLGTsKORULaB_NalRxAtQ08soxfptHLBRVSUUhAX5RlI358oFK-0TbhCleYBLfgETzEmwa88_HbzM8TMixspoYDsBy-VEzxVQEO59dryaof9MrN7dougM8WBwdw_ydOEVJa4qYfl8B_-dxakgq2qNgfZBVtBMrOv-wFv7Pmmo9uxmNnqzjcDhG0Ceo3du_0nbUQX_scX0gMXyqWnKSxKJUWiIcUBg36sswJB8LjOZm_r5OJUtZM3SEyWqqUqPxJjDQZBqjGuqa3dDTmpMo5xsdWSmhzLI43KfZRNS2Y8hVQrYzA9nIWPwwTEXZ0MubB2s0vgnt8kutXCK_SW67PTj1Wefe1TQ4dt0zn3d8ipVmVjqo8nOiriHwSh01RuKnbD6Ylerh5ZgkkRSjLH8EUFW_j5DOpM5i"},{"name":"M0QzRTA2RUExMjRERjRBNEMyOUI3QzlFM0UxRUNFQkY","extension":"der","content":"MIIFuTCCA6GgAwIBAgIEJ0wJqzANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDUxLTMwIBcNMTgwODE3MTgyMDU0WhgPMjA2ODA4MDQxODIwNTRaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJTAjBgNVBAMMHEFkb2JlIEludGVybWVkaWF0ZSBDQSA1MS0xMDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa-EUiNrcaQ97AtiWDlzfCzq3F5reMNinuWlX3Ji8KV81HJ4sRQ7e9QPaolzOHiPEF9CMIuP57UJPzG3MiC8hzPaITgyrFj9sEobUDwGzjbOdoSUSOZR4Ne_75Nd50xoTQrPTvU3I11IJR9PfYLDw_KgwoPl_0M9ZCgxkBobPALQ78soRoITbvUxk4jbubr0WgibOy4YgaebWm164jR6OYBo5woeMbHlGyGBwbV7ULd1AQnr9n7dr1Oq5Itr7GmBBCeEVH_mGQ5i0XzCSnS8qDjKM8vM5CAjsDd9CddkSfiaVvrPgkbIrfvcL93M1Z4l2CFJld1H0qJhwZQahXe1CPZAa0VCOXOwL6pAwJIqOqcZurESW-hgIXkyj_frmZOPZcRGnNoX94eo2q1VEGsujdJmsEeHhX5rU-KlAFE8WUJs7PoLaGlVJ0mBIOM7VAPZ59H4aP5quToLSDKeWaD2Im1LGwBMBCFoJOCuJL2MVlIoz5sMwYuKI0Z1e9e6oOKeh1nARct7cCmvWMreHKrmIiOsijq-L42-WjWf5Ah2613dXzg-jD8IGmV2osW-N5yTyPcmAUf9laPNmKl0j5ApFZ7ljBE1T9SEcBYKooRxG-cy6z9Iit38BZ1R6AV4nNOlV3BryURyLqPlhhFIJtQoc2QkWDSJOI5eX1gWNoD9qzhQIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAgQwDwYDVR0TAQH_BAUwAwEB_zANBgkqhkiG9w0BAQ0FAAOCAgEAiNKB0GVqy6-rbg_yiMgMbZZaQPZAwFk0tX2Z9bxRlphEXEN3GV3sS8tou4fP9OVUIBMw8ALczMON5mDY3HyskX0ExMGwuf1rT3AcdU_swqx7QImjfsDxPEMUZjC4wgDjWVk1gRfhJYC3w6SPe74CKiuEexeMHxxSly59BZfV7Fv2xX8Ng_u6HCLZAHFOnUwIGFQLZETyXC_GV4SAH1_encvMc8sNQ0PJFUQ7ilwtbMjdJJukUFR16gIUaHYtW3Ut2fJQPq3vFoHlMHC82bXfDNEWwLC0Hrl3e21oUjkfVfolVmz6kbuvsGP-F83BhK221vpcpuu54oHY4FgDAM6E96gbsn_8QlCiluEsR2vYsuREjB2lKLex6S9rVZEygnPYeYYGm1o_nryiQHanIjHDfuQNVemIh4HA9ojI4CiJTMkJH1U5QEHGbILLhyla-bnDyafEuXwVnVexzmg3tiDcXBermw7VVy_FSTTrOM0sqTggieG8wFdaJmNfHo6TE0ynjEn1Fh_gmfzRfjW_goClO5Dmz56OFNG1zNQU35DE0uoNWIH_BfWCoGRNAj3fBBUdGJjjciFAbG2FL2LA-q8thSHDD0leu6vCDQkLbgcUhGnRj7xeNadXAZX8h8uWHpcTeV4qa4m9IjyGDmhEIXJF0RSI5zwfRxE9udY0vQ-dAUY"},{"name":"RjEwRTZGRDY1M0FFMEY4QUQ0QkU3OEEyM0E4RUQ5NEE","extension":"der","content":"MIIFvjCCA6agAwIBAgIEQZehYjANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNTAtNDAeFw0xODA4MjAxMzI0MzhaFw0yODA4MTcxMzI0MzhaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNTAtNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKMJbWykXO2hSsaq7Yyz85voS8psBSd8KbutIHjx-xDG79YXBkVqNkuQ02EcfJJUPsPyrgDOdRjFyIaLJBnufymtDnxjVL0D7QvAP-cbVw2AqTxfZMbp8ELAo4ZOt2Qmu-StTeBbczd0tpeFeVwuZ-WJl5Pp0poEwtK_DD1lIB1oee3KZSENEvmCneNCtFRCq78-iPkz3_ltb8uOgccCHUW4MP67J0SKBuvqW4WG1-_tb-8u6M-Ee9RRO1Q7EN-ee6caKW05fwiD8hVCWQ7qXpj6QjRsmh0_ywhBenaabCFt2U1NfkK2OKOI6DMWG8yE4a4UX6dwX0DOrFd7Xj3MkmkpYbGkbS8OxRhgS3BB5J9A26obdmIbaF3bUH2G_TdGw8D2AGHKZ5wqWgMcKJIlAthVAHqablYj9qIXlj_uLGS6Ft0tpGJ4VW5ubugvfZd-MJTiHDMGhL5F3yOwyVcwPsRuzGQ2mThX_AutXGeJqlLn1mkIYX7l8TUoMo_Dza9jjFNlNj8xPxXscw34S-KFZ9_VLLT34995Uzwjw-SlcBSZEagkiCyIX9fYbbIDtse9hrM2oGjdtswHhh5RuGd1nDw4oMsjQkakGoQVnkRCzUHy2DsqlwggI5hZSGE_VxfzGQDuHnagc_JGgfPxs78dMuBuUL7Mzayd6jbZySflqcfJAgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQCApcSyejtSLuGmLGjOD9UpyxdjIl4h6bO4YgFcV1wbmCIwqUCAYxMrQODMXeQfWATTWA7RDLNHXtz02LYN_JOIVscrtXytKoyN9w8XFrkVxkly4ZMJ1iaaG2OAyFC4pBSwQqbL7gwHn8l15uhgqlD2TPrJ13kTSG0xMjQC0s5Z29izJK0R3svSs_pNwcT0YOAN3KV9HEeY8rNh__AT2t1iaz2G_V3iV7G4V-5-E6_rsxlzHFo2irR-hkjIsL7TFEymlUWE-zcqZb4s4BYw9hKbxfcoTRWkfUOWp98Umr4vDxaIslLhhOYzeNn6DO7fLw8ngFQxCCZvrQw5ofkNZ9sdhkPxcmyKLihO-D9BGQkk8sNRNJKttUFgBxB9pANJjKQg2SzhzL5NTbDkvd4TweUiTUzzX5_QjDybm0xyNaxm778mhS8qULN6KAb_VlzO4-5KXDd9m27HdlXSQ2oFTmTvf_U2easxEyhP4_P8UObfToElhIgaOwURjI8SXVhk5K7_wUXbmTubyBgDoAeBkZIHhY-T60uoQApwwB_WUqa9q0zb1L6N-piDvJkoZcJgpmk1I0OjUZdTTqNmZRG33Mthoe3Rhxv2tx0wMwOGXq9qJshGJsux9hgPD6W_PYYg37Hkk_vkmmzfw4GUfXfQRvhpGx_BpbMrYKFD7Qqc-I1IUw"},{"name":"QkY2OTUwNUQwNkJDMDBBQkQ4REY4NDNBRDVDNzgzN0I","extension":"der","content":"MIIFtzCCA5-gAwIBAgIELEHygDANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDUwLTMwIBcNMTgwODE3MTgxODM5WhgPMjA2ODA4MDQxODE4MzlaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA1MC00MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsRpfy9HwzYcmHtpSJrLWqLdUALFi-wVuHNWx62K3uPn4Sy9cc5y1UWcr3dscJHsUIw-G6XfvYAwwa8OHcI04hrDQK7gJDY5Wg_dpwDwhcJXY1gvYeGeATjDHtLdSoLWR48qqWLhZgQhC_9WL7cXq5r6Uy9qvwwyrIqv2pY5k16bdpomcSmdImK92fnZLV030YXepSuYCsQZyXFwiFoJBY3bHdjreQAiG3J28_jIVeDGW2XYF9XUvgqVY2ttCeBdD9OvHKhqVDjFRtWOuNB0iFTu3Q78X7gTzlDQkX2bwmtfSvTAM3zCRheI_vSNZa-5eXTEf1oItg2ODh6MkG2hIhiDMA56pQKW0R1RwY5tMq6Ul8MF6jec2biaKyOHOZyww4m6iP9IH6YVZXyz3FfTX8WiGauylSqZRzGZNUG0FWn7cK3BIgzJwki7wqFEewI2xCWesTMbGQi83EDtdnIvo8SnKA7tNPTJpPaM7Ez-IYlEIi8_Nm8LJfQfRMEr3jUaxyQvSDFsKsBR0YVSN4OGECT7XBrxtaCNoGQ140kinHnLy3hlwB-o8Pu5Fk1seaX7ITwce68RhnAQloaRsxeDxDVTi9MDHizPdSaz4-KXilD3cYcwwkUTBbiuCu6Nutq-Lg4viBBPNMHOEwHnERGXLWA9IXolITPoJAYAWvxYHh6cCAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAAAUJCDIALrlkraT8cGjCG67CtneE5SYvHI2n72KMJ5qsGLaRy2e5MkyPVuAqIzBBuWD5lkVJJz2INDiu3tcZ8tPsnFvsujA_Q6zxmME_x3v3toFhLeRzUiNxbr-T6QuMl5KcoFOWPu94u6o1R41nxkh-ShtuBw_QByFxirz4UaYF4g5EPEK5urfCedO3FCvH8S2D8FpLq619Q_SH65kUR4mF-R2v4zEXacHy1RQBn25T--X_ECJcH9X2_xZg4MzFYHb3Qyt_nPMEEPHpIaI9lQPl9qLXGaVrdNfmpPG9tnNpkxxROl2AWoMbGIZHLXSgkKNp51Vt2r_6jLkJWfRp-MtluREjiXUiyrzl7bl6XcnGJkaQrIR40omlvdIGd-ZKWmJd0ZYX8Bm-pcLEESgE919qE43mYd8TBlBPuwEKPI30uiNGQO0RKebJivLyw_hzaxOBiuNbaLBeelKS3esAJt0QMh7UvjKrBMNCtT8XEWy9SGxiSjByaGeygGaQyjtCbr8wheofRxz9cO4p0_HoKKv_qiEkTMWtuDg44yHFhOTFKi_cej1j9JGBn9UPSMdX9M6vlow-N6DgBpHvadivSFa35On13ahdfxucNXBT6b6XMyXYNMeRKnxUQGpO-jXwgi7zUdtjfklYY_CyKrll5Hz_DZrtxtf5ik1dUbXk_a0"},{"name":"QjM3OUYzRTY5QUFBNUU1MUMyOTgwNDZCRDIzNkZBMjg","extension":"der","content":"MIIFvjCCA6agAwIBAgIEFEsHkjANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNTAtMzAeFw0xODA4MjAxMzI0MjRaFw0yODA4MTcxMzI0MjRaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNTAtNTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALkyOF6VNbT2UtHS5boNEhvlIdmVLzvn_TQHexvsCGigxwi5O3J12kzY-tz2ABBJeZrz8GXuuLCT7bbvqjZv72FYLR3vPaCMDNvKCQQkC-XE3eXfI6wZydstIbhn8zpNW5ZiyGOeG09gTZPT8tOb6xIw_4sUuwmMk15se-rJSvsTLRMUbIrS3N-JqrhFEqv0_C6yW4jRCsZBnboal8-fC_uLduHAqHRVDGMZ00re-qqw6mBeXJ4iOHVpUNgzCcolApn0yfWcWA_mEf8bLpsazT0MZEUK4e51iUjVe4gMyj8a216FAkeCEyi7_J_Pg96qvTgmmQKTUFFa_dyWubBQCZu5BsPh30vipqo_vmBqlDMEgV7r3mXWrmr4977DiW9-M05XkfPGdXCK3hl6Uhl1jr7sUK7SpKyN4yabRKFcnfyfjiaMEkOyD4eDdLYHqwJnSxMTPesEEAJKOzD7tPyKlpWfaTksprYKDewkGLGQO5EyLRV0SW6s5O9m_u-dLf2rk96HrcfehxhhhmdsFZXAjGxlrOcq-oKIJEtZ_4YG0VHCiN-Uw6gd8YG5_uTM8LiaGDvvjILeBYoGIk0HiCkBbDk89Qx-SzHmq6gjiVU-5SA5c7CSuYPsTqQ6LQa67QCNF0jdb1B30pbFWDJujbGfOtpjESOy9ys_2gWBXNz_tFyzAgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQAkkYhZqHwRAC_XTuoy8jvkpFy_LQdqfoZbbl8szlDWaw2tlmBj0VbDszB1-pGyRJqZndwFJ3eXpWIWYUSj_YE2tuOFS6JtvjPHEx1-wXfL931428ISan7BMcI7UACa1Df7wm4eBj7WU6FYfx96opAi2c-ARirQdgzm4B8qgXyKFbEcEOWwcJ25NBDou2AAHk7vZkjwDW7GKQW2MdDPrME5WN5ZXRkDeFqcHYrJFal0zPf-eXIVrdx5NJY8CWgWFt-TAxdGXRn9Yl0FEcXkSMX1ea6MqU95wZb9rDHvicZA7ElQ-gXbkD1piPfoqEkFiwPf0fx4-0PDge-b0UTpQ6cTfWVwv1KPENGwdSDy5SDckTH2GbI2KtO4Iw5APJPdzTDqY9AOqDrWEhjCozxIrIOrGsW45OcQGHF56UHAuEnMmh2-6RHyda0PttE6C65BGrch0D2ribqNeLwlyNu69H3tLEUMUJ_NqZV9hkh0h30-6WdLCFwRi_LrK9Z3XuydAnRLXVhyPYNtKQJl1rYJEii5UiGX0TcMVrsruivfWbXQhti_-gkVKt64Sgp9SJdVk2G67PdEzdOP3ro7IxC9H2VOIcKGAjyHQVtrw0ebm2XKAn2k55UTgM5GXU14tEbNjwLLBsWugjyhfbnuNqTcDL9OwV8j23qv0zcRAfnnF65JaQ"},{"name":"NzdCRUExOTU1N0I0NTVGM0E0QzQwRUUxM0FEQ0Q3NzE","extension":"der","content":"MIIFtzCCA5-gAwIBAgIENnH5ajANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDUwLTMwIBcNMTgwODE3MTgxODM2WhgPMjA2ODA4MDQxODE4MzZaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA1MC0zMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqlNNVifX30lf3SEXvTSS3AB5tT38UJnDFzn8-TNzZHMAk-AiV7zIB7Ii-Pu_A_fw2ZrVh8FVpTO4L5l1dJddHPG9FFHem8B-gBI_1vV0vzH5J7z7cRz600FJgsk2Mn1ODWh6f07sRtNeeEmWLSpBGrB0RNTo-dzvRiu57tFVtSJKs2vw8SsJ1iYlhGZGCsGOY6pj3kR-sTMKpJTEuWb3cRUNJxD1KJZ7Ampum7BywGH2kfD4GPrtHHRTusIPBqoicbU27upzrlD28rr9jFTyr7lto4mbnN3YiLIOz2YHjVRC4af4iamT_twjEuJABwJ3ZtayqPL4ZIlTQiJ3PHoWjyJ5Uwbmd8SDmHjxLV7wzl6ABncXDQa_L9LB-LBCnMPxA2KXm9toigFuqB-xrEimHuNzY1M_Jmm5H_26JOsPQHoQGaW_l0TQ0fd-VmPOLseAkcAmL97zBBKuhQ1-AKqfQEzpgMyW-JzGgURFD2jQLj-Kqgr9a6wyTh4Y7-S0L2Tdj5nFhLNSPcbY5-m-qUE0nBK2EU-VYIJx9sWyAKdYDBrsrLK_AWn0g8lUmTnidSRqrM7i1_85-bKAk_IwG6fiw3_hxtMdI9hwGoB73uNeLWktBKP-tmP2mVpDZPGM1-gmG4Qq4_4Mj-Ps58REcM_3dAhqsQPwy6aR0dXDdnS2JP8CAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBAI3ikuDE9_pxzfIKkgT_sE0zJOzp3lalTV5TTHKuaakF_kQqEZmqp_t9nkRV7C0dKYNDxlrnyXf5QeMVKos62IrMg7yJor8FCD6fnRBch-rvKMEx-_gEvrvmpiXuQARU7MhI5aHVoBJksyFI3hoJ8S13paFAAi-jlljCJ9Cl5PpjKI3W9tFYiiE7AukX6eVCaX9GDVjrNWcw2AP_HtVRfKNISM6pBooVEgC6huqm9pg_GqycSVAfclhJPbtCUGDCsuzKz5ozf6UesTJ7ra9mlOk6M_NGHxudzyLH0l9bvEZP3-nVBdNYB6wb9ZQ8xUBBQ9qLN1vS6Sp4WFICMJo8CVS8MiHmWJh7KqAC9on9YsQslJLPpZh7OdO9ElrNrl9GdV0IOCRDEY2cAK4KeeUvMKXJ6iy6qzz6WbAOUraStZPSy8cE3Dw2Zbp8sPxu8mK7dyL1nxCX21WUP00TOYZzPB6CPgBJtv-wszJvbJq1j8zUfueNTwgdTHU3EgnfL45cVadd_nhFLtcDThnbqPqF-n_NC5YDvmgmfYw_gNyXDo7s4RPlUKlflQb0o6BPSahCyDOZS7ZFkoaJUUSZatllDFQA8hKcyKjuPYAcOyBOVtbWhapQVfIa3DHQoA7ku8c20MP4AFs4XTHMTofJgncK_e5GBLmCON8OnG9QZSqvp0dt"},{"name":"OEUzNDdCQkFBN0JBNTcxNzVBNjY1M0U4QTk0OUEyMzU","extension":"der","content":"MIIFvjCCA6agAwIBAgIEQ9CDfjANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNTItNDAeFw0xODA4MjAxMzI1NTRaFw0yODA4MTcxMzI1NTRaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNTItNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANogfPOp-Iu-F9A108z_tGCf5swg_W0SloLwjJdcGLpHUYrUG3KMnPc_B_UfiE9DsugWlZ-L5lgZ0tjZ6euG3pGw6cgnOG9lZvheqOrOr8z4Eu85UuQF8XDSOuED6Ry4pHG4RpRvsiShYt14prBVPPG7sVxG-9NAOe0YOeAJtCJePJ9NBWzpPJySszWizbyVK9SyAiE_Leek_EYmTu2Xh3zRLD2o0mkqe1zuK_wKwpXFIuXcqWExKjHTMEc6_5vChPa6EzcXYofyOXQrFtDL-33j5nKJTSwbRzKF5xSCRjLWCd9yIm_KewoQxtsH7NBLE9EUBG-RquoQjxDsWKAjFldFfbTYT3gvud9az2e1j_dhEzNKCf8r86ziejHL5SD3KdNaEvKyDj-qatnzivzV55uBPx1mXiC9AdtmoiiSoHzPgcCeqUVHugs33XP2mPRBIqObr-nUsDradOJb0SzhWM0cA1wi_PURI5TmnDEPvTlZxNN-F_KoL6r9E7_GG1luPv4BmlnJaiFLR-7PEfHNkogyzDRqzYKHfLVOtDWN2EyuBvvelzbTHOLHcYwXw71GnBSkFvc4G6vlUm2VGr3S6zzUqbGVoORds2KWe-1ttraLloWrC37_CO9LDC8v2MOeUEUPwwlhoh6srFaofYZ4Q8e_engD3ZSltRx81CjCWxYTAgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQABDLXoC_V_cqmSMgt5p__gT9aDH0Jf7_MQhUEF0ecvC2zX7513P05_9-UGVk2UzWVsVs4taWSjJDy7cS18NZTB3pWz-kjbqPiamEvGUKaBn54cIrTVNtoD9-c65ulXUIb6RZhbvoLDEvsZPcKiEGudU4gNxqdh3HHXE3E9TLSAu-Gay7efX-H5UGKDa18vI--b8k1_M_LtMZa--1xyDH6UPH7KWpfBmhkkGfbX51ADxw68jMdr4vVAPp00odtF97C85sMqHpdsfpvxsAQhBqttljuvLgBolORG3p94WlceEMNICI4arIN7Ae81zrSINPayuLyGVJnXUEB9SXfFwhF7FkQ5wCXTHQhetCxmU_FLZiF9UkOwlY6WTgLutJmiKouSM1IIYJQyqnKYCMUnJFiFkQQ5AzFL9pWuJVPVU9GqddIVDN2UCcdeZTls9veoe4NrdXtktFgiiqObm2OBkkyVq_zkZpdGnx4l5EdklV0htvHxwV4FhiCHTIaVkYFrkEj69rUVWDXX4TKi98mosbJzy1N3EPxVIaMRxaWbFBJXWnZtxveICIHd6Y0GGyb1HjlTJmdbqxlw-OsQhMLmOw8Vgo-FamSYwod33iq0SInqYdwI5tECVLo1wQDqEl9LLX1gX3rUo4h2U2P0p9ean0gKmqaONfKvukGy4tJlu7I3yg"},{"name":"QURDMjVGRjQ4RUI4NDcyOUY2NEM3MDQxMjg2REZBNkQ","extension":"der","content":"MIIFtzCCA5-gAwIBAgIENlQkRTANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDUyLTMwIBcNMTgwODE3MTgyMzUxWhgPMjA2ODA4MDQxODIzNTFaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA1Mi00MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2_UdH8UsX5gCDwBtb-v3AZFV_kgqqZuhzQWxqVvreHSJu6-eAOsoIvT0PxZNY5YFeA549R7CTNavt8_LIJYCH07B-s4LNF5fAUyQW9CN4WRWwJB5q0YdhjHQiWkxzOCLe9KGJxlGIn1BRSKxKAxY66ZkCitJhWnAQUgEWkDYXGk5IcRDaEptYFxtbnjABuYl0goHeYF89e6_nanYaYSiB7wzPwUkxVoGOiC23Y9nVxoxwXewfKgYyiHOzq66qh6Rvx7tJt83JvArUxv8ZOh3L8d21kKEec1smymn4PBY-vB2HsrTf0B6-3cyqDXFoeUMi5b6DD06iBk925DJ0dsJI0PSbAXxApNTffIpnAinLFFgzlQVqyruA_qHvN5gvSuAyEb0sVHNU7o3cttD0agV9LGAA5j16KWYzE8MU-0FQ9oXCY2w9nkgKwH3rlOlSTBTy59Zk_cRYTGCKEcLDcMsddkH8f_osctzd7hyZ7U8GzBNzi41QrRXDHlAEiUcv_K0pNiYajixy8I3DVwKLk_MKXKJ1EgjoSsgijerpPA31Q8fvwLZxkh7BBTyhMpMc800SLk9ZYwYV7TnnaUFSK10xBwmHat_Qv7aA7DeH_npvdsRMHZNy7m-NJYh3uS0giSu8tZ2bkLWnP9tUgu2vDaLM6ZlWkxmRC2C7gwVoydtZMCAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBADkZ4GMVJn_IXhExbOq-90aBprtVGPvhvdgbwuC6PbVNvHzAlB3Us2V1Ny-N3bFfmSjLNfuXwT6ebzaBQny7jOyb_b9Xx2wi31dMGGnGP0ldyzX9ZBXQ30fUZvcFgt84lZlf7ET_lJJyTNus5ssQcyoqntZ2ikkyWA80bvi-iXwVEkiKwGy_7hxf4JkbLti6AJYOKyToxw7Lntz3DiU1Pw4ZS-pKBf2qDSxQdWS24AJGFqw4NAN5HHYH4sOnfw7ZECPnQwhCIgmyX4DVq0-w32U1gQs0nLuIW9sgrrJIeIAX9Rw1-7_Vqyy-DUMWjcNUGPcv-EL-ft8O1YV7asc8_3k3281sF8d23OdestTysFRoCThxH0iJbKLrjExiuibO0KaACShE4u77ZMYYgcxX5ux3xhJWl6TdeD2spJex9rjw3EFNXdSnPxGPvGUIuLyBHvcFfEKBKZCoW7nAXV1eMaRkPIJ_KFm3n7Axfrjbusci1dg7SRIiOisarX9PCTN7WB6z3raPP9gobaIgjTOiQeNHP0o8Et-Xl9TzHFxFxrvsSvqSAFwU-AkKXc6ZXXm2pwe6ceWOyL6hLJNq8gwmDYLGZRxYzky9xZL4mTFXH9GdOhfxGK7FlneepIKZ0vrYx5ckN5fa99siXy8XgqRFAi63BefRGdP1J4D8YjthL8Nb"},{"name":"NEE5M0MwNDQ5QjlFNjFEMDcyMjc5MzE2QjlCODY4NEU","extension":"der","content":"MIIFvjCCA6agAwIBAgIEAnR-RTANBgkqhkiG9w0BAQ0FADCBjTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MSMwIQYDVQQDDBpBZG9iZSBJbnRlcm1lZGlhdGUgQ0EgNTItMzAeFw0xODA4MjAxMzI1MzZaFw0yODA4MTcxMzI1MzZaMIGRMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxJzAlBgNVBAMMHkFkb2JlIENvbnRlbnQgQ2VydGlmaWNhdGUgNTItNTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIjEKE4N1ElmK2wYvokPvK4H8Ey1g_DyXsTfurVnPmrAfFwQdAPxJWUsGzbtZyH6PjMmtbEBUaJiVD2x4I89KowkU-7_14r91SekId6KdI6_UqdP30mh4DhSs0smkFv1hQz6HPudjBl5-3LzIKuBHfUFdAZz4cebxcYdXBuIcOr0bwJVn4nSY0Hi9BqX8bf7BsgyaMogA_1FCD-Rs1wcTxWN68-D5yR2JnUlKa80rpNwl98iApC-WkyXkEN4FweZ0Z859frY5e5hxRqlsvKHF_XHII8cWigAHvYZPBPRrQurZ02zxTY2CCY7lOcFkSV7uOvXje2Fhs5aMtWKw_kbgsx8qJqxKY1MqN0-5JqEea3gbDRUN5aL7EeYXJAzEGdq2gdrdPjRhYcJCYwMC95E2vRqjGrsDVa--R9tVyuEVgb2QLwg8YWT7m0ySgediTiAtKJLccPJCSXPTiG9FvDkscvJ7riq0hrTSsaaFxV-FZtZkfgz4hFvE0jG-dXRYfcJJpQjRBXFLUYCV2GmQnxtIaD2vEAh3PkIlL-H2lJrbi-Gge5etBp9fDm8a9yFtkXlFOYWwFb1peRvblT_T4RaEhsEzMS0qLGkaMAmV1e6wXQ39jOm_jfgdAClsl03EqcACdqry0gnwb_V_A_KSnMv2piQdyxJGwYsHDe7-vP-Uoc5AgMBAAGjIDAeMA4GA1UdDwEB_wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBDQUAA4ICAQBB1U-OMn_G_hT_HQg6sfmQPmhhgsP-OxQsU7nqtDQTf10pkJeehFi5xs_iVTIpGYhBZIuCe2CoBHFd7DOENNhH3QOBQY67DmBmsayBnHUOht9yu5KYp5Btk0SjuEDQawlBI2akwlr5GoTXXGx1YWwu6SJAaLyVhpPdudPsHPnEtEXeYTraT3mHijKcsnD_4LIY2TSIOCyZ5euTsZKW82qZDKqTeeA9tfzrPdFB0yreetZhCiJ59iqbqc5Qcd-gXZaXpSgy4NfiiuFr5G9PlJEP4zTxxFMM5PKqJqT13OQR2lOdJE95xC940VK5jLxESzDpFBtI14dAyzK5tqatINFO7-GPQHzVd_kI2AKbpVYHtzk9MRJ8Ew18LHvHIJU_OyroKXwtUgLeLVZk27hlNBXR4vwaowsj6J_ThPzsuZig7O9XLYZce6xFtyw7mhq2ayPMYKUVFG1daKl3wDN-EKfWmBBxYqNnoHGjDB9DIwLAbenQWCUlOTsCeRhgZyHsfW9IVFZHETuM9QzjXtN7qsCREcZuYICePpu6gUe6LBJfc_Bx2ebxcR_zZLH5ku89aDu69FvZ6XPQw_Xs8E7h5SYCEJkNvB7IFIB_LT_MFr0dW4QPgJatnNnrXlTz5pYrr3nmardEhZwJ0IKNzh2RmpDdR2VIfLiZmF_aw1YekPyCPQ"},{"name":"OUUxQjdEOURENkQ0RDQzNTUxNENDRjY0N0I3Njg4NUM","extension":"der","content":"MIIFtzCCA5-gAwIBAgIEQqWBbDANBgkqhkiG9w0BAQ0FADCBhTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExETAPBgNVBAcMCFNhbiBKb3NlMRYwFAYDVQQKDA1BZG9iZSBTeXN0ZW1zMRkwFwYDVQQLDBBDbG91ZCBUZWNobm9sb2d5MRswGQYDVQQDDBJBZG9iZSBSb290IENBIDUyLTMwIBcNMTgwODE3MTgyMzUwWhgPMjA2ODA4MDQxODIzNTBaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIU2FuIEpvc2UxFjAUBgNVBAoMDUFkb2JlIFN5c3RlbXMxGTAXBgNVBAsMEENsb3VkIFRlY2hub2xvZ3kxIzAhBgNVBAMMGkFkb2JlIEludGVybWVkaWF0ZSBDQSA1Mi0zMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAiJ-rm1FCZc9y2McW80n6MaWT_bvz1xLwjpAT87SQZreDMiaQrQolq52BAK2YNPhYxSvuUkyXsvKOHlXy1u2bMMP8uyA_1_FtUsk8pAoJ44qdstWd7wp29cUpvLMoAbhNi_5rI6CxftPOP2ZrMzjwv1syPsUaamCMJLSdcSVPF4cb1I9TNPWuDWkQ2LlVdyNx2gp8CFP_1uoEr_vXoHJ74oyHPAluLxlHXzG5GX6aimQZ1Tm7fXngGOLNu4xm3t682FDIbIr_6GX1FRu7VGh_N9m-L5EFW7BBR-HEQJi-LzzlsUwlGiMkAkWC9i_ccfirkbV6BiEHxP9LA6lK4d7wuf22-Xvad6IzltI-U3jTHEa6b4zoMx0bIXq1KPLEFiPeZaqSkmAw2_likv5FrdZpVMl0iS77j2aZDSCXvTDG5BF3F-VKbly9Sjk4Hhc7J9pBDG0lsaHVWUuo8nQ_LW5tdqheUKRa4pfNRPtCnJlRoZ-0er1UdOY5n_cRHkSav34N1JUkK_pSv4rZIrS9hZoyTfEeTy2qTbrhn3yZ5ZvydAGyE4QHtm-jPNsFR1_07HrHWab6bwcTbasdEnvCzvbja6XNwSUN5kwR2CEp6RqDnBkkD5uCqEg-d_kpGwmFQgF_3GAuqD4HhfVACH1OQhhDI64kXjSqwiEH0y71HgVukUECAwEAAaMjMCEwDgYDVR0PAQH_BAQDAgIEMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIBACCVkVjsxAP57YhwM5YIrtjuc50N3yElrd3VcE3wiYvkb5VRIrnX0x_I3ucqAywJazJo_hBJg7t56MtdFye9ruAENqiSlOJ3TB9vqqXC-1v-R6r--BCk4fkTgQHLpiwej_flXsZEAnmrvJCcFXJIfX51asu-S5GhkG3Bwah8HSxUYOB-VwWs4tPzr8uyDcKF-jsEfUu7IhwrLznY6L0-GyaHCIK7XrwpTedrBXFJWhjM2YBOxvmtqG9JQgJTRk8T3NW-LeVHDGcv_UVFISGcu-9LT_00B-00JSMITsmB2fKOJid_ku3UnZpBuxz9q5NZtNbueH81O8DByTX3-TzM7kz6ucVCzRQfnCaEnOwE0bOgbsFcPK8vKqc5Xr1PUyU-hoWvZNyB6dGC4cpf4YtvO0EMVEDhfU08AhqovH22FI9zV3DEIK_DaE6rezvsWr-Q9M2NoxjuwvoTwsz96CS25mQAHQ4XQ5GkrHNiiCryLSJkPH8B9Jp4r003XyapkWedWMcPOabY_QpS-BM4AxJ5mjsj7KK8iv5PWyTEcohIoUQOQaOXpdzBguZOznulTCjN1duNLvEUUAD106x_IA0E08nSJDlACmEzVmJzX7wvuGNZeO-V-JJRNsTPSEvJHxk-OEP-lQNL_zCSetDRpQNhiSy0IOpns4QL1oUM4DzQCkcQ"}],"asnps":[{"name":"NWY5NzNiZDEtM2IwYi00YzZiLTk5MzctZDU2Zjc4MDZlMWJj","extension":"asnp","content":"eyJhc25wU3BlY1ZlcnNpb24iOiIxLjIiLCJwYXlsb2FkIjoiZXlKaGNIQlFjbTltYVd4bElqb2llMzBpTENKc1pXZGhZM2xRY205bWFXeGxJam9pZTF3aWJHbGpaVzV6WlVsa1hDSTZYQ0o3ZTJ4cFkyVnVjMlZKWkgxOVhDSXNYQ0pzYVdObGJuTmxWSGx3WlZ3aU9qVXNYQ0pzYVdObGJuTmxWbVZ5YzJsdmJsd2lPbHdpTVM0d1hDSXNYQ0psWm1abFkzUnBkbVZGYm1SVWFXMWxjM1JoYlhCY0lqcDdlMlZtWm1WamRHbDJaVVZ1WkZScGJXVnpkR0Z0Y0gxOUxGd2laM0poWTJWVWFXMWxYQ0k2ZTN0bmNtRmpaVlJwYldWOWZTeGNJbXhwWTJWdWMyVmtSbVZoZEhWeVpYTmNJanA3ZTJ4cFkyVnVjMlZrUm1WaGRIVnlaWE45ZlN4Y0ltVnVhV2R0WVVSaGRHRmNJanA3ZTJWdWFXZHRZVVJoZEdGOWZYMGlMQ0oxYzJWeVVISnZabWxzWlNJNkludDlJaXdpWm5Kc1VISnZabWxzWlNJNkludDlJaXdpY21Wc1lYUnBiMjV6YUdsd1VISnZabWxzWlNJNklsdDdYQ0p3Y205bWFXeGxSMlZ1WlhKaGRHbHZibFJwYldWemRHRnRjRndpT2pBc1hDSnNhV05sYm5ObFNXUmNJanBjSW50N2JHbGpaVzV6WlVsa2ZYMWNJaXhjSW14cFkyVnVjMlZGZUhCcGNubFVhVzFsYzNSaGJYQmNJanA3ZTJ4cFkyVnVjMlZGZUhCcGNubFVhVzFsYzNSaGJYQjlmU3hjSW1Gd2NFVnVkR2wwYkdWdFpXNTBVM1JoZEhWelhDSTZYQ0o3ZTJGd2NFVnVkR2wwYkdWdFpXNTBVM1JoZEhWemZYMWNJaXhjSW1GamRHbDJZWFJwYjI1VWVYQmxYQ0k2WENKR1VreGZURUZPWENJc1hDSmlhV3hzYVc1blUzUmhkSFZ6WENJNlhDSk9UMUpOUVV4Y0lpeGNJblZ6WldSR2IzSk1aV2RoWTNsUWNtOW1hV3hsWENJNmRISjFaU3hjSW14cFkyVnVjMlZGZUhCcGNubFhZWEp1YVc1blEyOXVkSEp2YkZ3aU9udGNJbmRoY201cGJtZFRkR0Z5ZEZScGJXVnpkR0Z0Y0Z3aU9udDdiR2xqWlc1elpVVjRjR2x5ZVZkaGNtNXBibWRUZEdGeWRGUnBiV1Z6ZEdGdGNIMTlMRndpZDJGeWJtbHVaMGx1ZEdWeWRtRnNYQ0k2TUgxOVhTSXNJbU52Ym5SeWIyeFFjbTltYVd4bElqcDdJbTVuYkVGd2NFbGtJam9pU1d4c2RYTjBjbUYwYjNJeElpd2libWRzVEdsaVVuVnVkR2x0WlUxdlpHVWlPaUpHVWt4ZlRFRk9JaXdpWTNKbFlYUmxaRVp2Y2xaa2FTSTZabUZzYzJVc0ltTmhZMmhsVW1WbWNtVnphRU52Ym5SeWIyd2lPbnNpWVhCd1VtVm1jbVZ6YUVsdWRHVnlkbUZzSWpwN2UyRndjRkpsWm5KbGMyaEpiblJsY25aaGJIMTlMQ0p1WjJ4TWFXSlNaV1p5WlhOb1NXNTBaWEoyWVd3aU9udDdibWRzVEdsaVVtVm1jbVZ6YUVsdWRHVnlkbUZzZlgxOUxDSmhjSEJWYzJGblpWUnlZV05yYVc1blEyOXVkSEp2YkNJNmV5SmxibUZpYkdWa1ZISmhZMnRwYm1jaU9tWmhiSE5sTENKd2NtOTBaV04wVkhKaFkydGxaRVJoZEdFaU9tWmhiSE5sTENKbGRtVnVkSE5VYjFSeVlXTnJJanBiWFgxOUxDSnpaWEoyWlhKSlpDSTZJbXhqY3lJc0luQnliMlpwYkdWVGRHRjBkWE1pT2lKN2UzQnliMlpwYkdWVGRHRjBkWE45ZlNJc0ltRndjRXhwWTJWdWMyVk5iMlJsSWpvaVVFRkpSQ0lzSW1Ga1pHbDBhVzl1WVd4TVpXZGhZM2xRY205bWFXeGxjeUk2SW50OUluMCIsInNpZ25hdHVyZXMiOlt7ImhlYWRlciI6ImV5SmpiMjUwWlc1MFUybG5ibUYwZFhKbFFXeG5Jam9pVWxNMU1USWlMQ0owY25WemRHVmtRMlZ5ZEVacGJtZGxjbkJ5YVc1MFFXeG5Jam9pVTBoQkxUVXhNaUlzSW5SeWRYTjBaV1JEWlhKMFJtbHVaMlZ5Y0hKcGJuUkpibVJsZUNJNk15d2lZMlZ5ZEdsbWFXTmhkR1ZFWlhSaGFXeHpJanBiZXlKcFpDSTZJbEpxUlhkU1ZGcEhVa1JaTVUwd1JrWk5SVmswVVZWUk1GRnJWVE5QUlVWNVRUQkZORkpWVVRWT1JVVWlMQ0p6ZFdKcVpXTjBUbUZ0WlNJNklrRmtiMkpsSUVOdmJuUmxiblFnUTJWeWRHbG1hV05oZEdVZ05UQXROaUlzSW1obGVGTmxjbWxoYkU1MWJXSmxjaUk2SWpReE9UZGhNVFl5SWl3aWMyaGhNVWhoYzJnaU9pSkdRVFExUmtJMVJqZ3hSREEyTUVGQ05VVTVRa0V4UWpWR056QkZNRFZHTlRjMk9UWXpNRE5FSWl3aWMyVnhkV1Z1WTJVaU9qRXNJbVJ2ZDI1c2IyRmtVR0YwYUNJNklsSnFSWGRTVkZwSFVrUlpNVTB3UmtaTlJWazBVVlZSTUZGclZUTlBSVVY1VFRCRk5GSlZVVFZPUlVVdVpHVnlJbjBzZXlKcFpDSTZJbEZyV1RKUFZGVjNUbFZSZDA1clNrUk5SRUpDVVd0Uk5GSkZXVFJPUkU1Q1VrUldSRTU2WjNwT01Fa2lMQ0p6ZFdKcVpXTjBUbUZ0WlNJNklrRmtiMkpsSUVsdWRHVnliV1ZrYVdGMFpTQkRRU0ExTUMwMElpd2lhR1Y0VTJWeWFXRnNUblZ0WW1WeUlqb2lNbU0wTVdZeU9EQWlMQ0p6YUdFeFNHRnphQ0k2SWpnMVF6YzRSRGxETmpoRU5qUXlNekZGTmpCR1JETXlSREkyUlVFM05qQkVORGt5TURBeE0wUWlMQ0p6WlhGMVpXNWpaU0k2TWl3aVpHOTNibXh2WVdSUVlYUm9Jam9pVVd0Wk1rOVVWWGRPVlZGM1RtdEtSRTFFUWtKUmExRTBVa1ZaTkU1RVRrSlNSRlpFVG5wbmVrNHdTUzVrWlhJaWZWMTkiLCJzaWduYXR1cmUiOiJ7e3NpZ25hdHVyZTF9fSJ9LHsiaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TWl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklsRnFUVE5QVlZsNlVsUlpOVkZWUmtKT1ZWVXhUVlZOZVU5VVozZE9SRnBEVWtSSmVrNXJXa0pOYW1jaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTlRBdE5TSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJakUwTkdJd056a3lJaXdpYzJoaE1VaGhjMmdpT2lKQk1EazBNVVl6TnpaRVF6RTJRa1F3TmpZM1FqUTROMEk0TXpKRk9VTTJPVUZEUkRGRVEwSTRJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWxGcVRUTlBWVmw2VWxSWk5WRlZSa0pPVlZVeFRWVk5lVTlVWjNkT1JGcERVa1JKZWs1cldrSk5hbWN1WkdWeUluMHNleUpwWkNJNklrNTZaRU5TVlVWNFQxUlZNVTR3U1RCT1ZGWkhUVEJGTUZGNlVYZFNWVlY0VFRCR1JWRXdVVE5PZWtVaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRWx1ZEdWeWJXVmthV0YwWlNCRFFTQTFNQzB6SWl3aWFHVjRVMlZ5YVdGc1RuVnRZbVZ5SWpvaU16WTNNV1k1Tm1FaUxDSnphR0V4U0dGemFDSTZJa00wUkROQ01qYzFSRFV5TlVNME5qRkROekJHTkRWRlJVSkVOamxFUWpjNE4wRXhNamxDUmpjaUxDSnpaWEYxWlc1alpTSTZNaXdpWkc5M2JteHZZV1JRWVhSb0lqb2lUbnBrUTFKVlJYaFBWRlV4VGpCSk1FNVVWa2ROTUVVd1VYcFJkMUpWVlhoTk1FWkZVVEJSTTA1NlJTNWtaWElpZlYxOSIsInNpZ25hdHVyZSI6Int7c2lnbmF0dXJlMn19In1dfQ"},{"name":"M2MxMjI5NDEtZDcxZS00YTg3LWI0MWQtYjE1MjEzZmQ3N2Jl","extension":"asnp","content":"eyJhc25wU3BlY1ZlcnNpb24iOiIxLjIiLCJwYXlsb2FkIjoiZXlKaGNIQlFjbTltYVd4bElqb2llMzBpTENKc1pXZGhZM2xRY205bWFXeGxJam9pZTF3aWJHbGpaVzV6WlVsa1hDSTZYQ0o3ZTJ4cFkyVnVjMlZKWkgxOVhDSXNYQ0pzYVdObGJuTmxWSGx3WlZ3aU9qVXNYQ0pzYVdObGJuTmxWbVZ5YzJsdmJsd2lPbHdpTVM0d1hDSXNYQ0psWm1abFkzUnBkbVZGYm1SVWFXMWxjM1JoYlhCY0lqcDdlMlZtWm1WamRHbDJaVVZ1WkZScGJXVnpkR0Z0Y0gxOUxGd2laM0poWTJWVWFXMWxYQ0k2ZTN0bmNtRmpaVlJwYldWOWZTeGNJbXhwWTJWdWMyVmtSbVZoZEhWeVpYTmNJanA3ZTJ4cFkyVnVjMlZrUm1WaGRIVnlaWE45ZlN4Y0ltVnVhV2R0WVVSaGRHRmNJanA3ZTJWdWFXZHRZVVJoZEdGOWZYMGlMQ0oxYzJWeVVISnZabWxzWlNJNkludDlJaXdpWm5Kc1VISnZabWxzWlNJNkludDlJaXdpY21Wc1lYUnBiMjV6YUdsd1VISnZabWxzWlNJNklsdDdYQ0p3Y205bWFXeGxSMlZ1WlhKaGRHbHZibFJwYldWemRHRnRjRndpT2pBc1hDSnNhV05sYm5ObFNXUmNJanBjSW50N2JHbGpaVzV6WlVsa2ZYMWNJaXhjSW14cFkyVnVjMlZGZUhCcGNubFVhVzFsYzNSaGJYQmNJanA3ZTJ4cFkyVnVjMlZGZUhCcGNubFVhVzFsYzNSaGJYQjlmU3hjSW1Gd2NFVnVkR2wwYkdWdFpXNTBVM1JoZEhWelhDSTZYQ0o3ZTJGd2NFVnVkR2wwYkdWdFpXNTBVM1JoZEhWemZYMWNJaXhjSW1GamRHbDJZWFJwYjI1VWVYQmxYQ0k2WENKR1VreGZURUZPWENJc1hDSmlhV3hzYVc1blUzUmhkSFZ6WENJNlhDSk9UMUpOUVV4Y0lpeGNJblZ6WldSR2IzSk1aV2RoWTNsUWNtOW1hV3hsWENJNmRISjFaU3hjSW14cFkyVnVjMlZGZUhCcGNubFhZWEp1YVc1blEyOXVkSEp2YkZ3aU9udGNJbmRoY201cGJtZFRkR0Z5ZEZScGJXVnpkR0Z0Y0Z3aU9udDdiR2xqWlc1elpVVjRjR2x5ZVZkaGNtNXBibWRUZEdGeWRGUnBiV1Z6ZEdGdGNIMTlMRndpZDJGeWJtbHVaMGx1ZEdWeWRtRnNYQ0k2TUgxOVhTSXNJbU52Ym5SeWIyeFFjbTltYVd4bElqcDdJbTVuYkVGd2NFbGtJam9pUW5KcFpHZGxNU0lzSW01bmJFeHBZbEoxYm5ScGJXVk5iMlJsSWpvaVJsSk1YMHhCVGlJc0ltTnlaV0YwWldSR2IzSldaR2tpT21aaGJITmxMQ0pqWVdOb1pWSmxabkpsYzJoRGIyNTBjbTlzSWpwN0ltRndjRkpsWm5KbGMyaEpiblJsY25aaGJDSTZlM3RoY0hCU1pXWnlaWE5vU1c1MFpYSjJZV3g5ZlN3aWJtZHNUR2xpVW1WbWNtVnphRWx1ZEdWeWRtRnNJanA3ZTI1bmJFeHBZbEpsWm5KbGMyaEpiblJsY25aaGJIMTlmU3dpWVhCd1ZYTmhaMlZVY21GamEybHVaME52Ym5SeWIyd2lPbnNpWlc1aFlteGxaRlJ5WVdOcmFXNW5JanBtWVd4elpTd2ljSEp2ZEdWamRGUnlZV05yWldSRVlYUmhJanBtWVd4elpTd2laWFpsYm5SelZHOVVjbUZqYXlJNlcxMTlmU3dpYzJWeWRtVnlTV1FpT2lKc1kzTWlMQ0p3Y205bWFXeGxVM1JoZEhWeklqb2llM3R3Y205bWFXeGxVM1JoZEhWemZYMGlMQ0poY0hCTWFXTmxibk5sVFc5a1pTSTZJa1pTUlVVaUxDSmhaR1JwZEdsdmJtRnNUR1ZuWVdONVVISnZabWxzWlhNaU9pSjdmU0o5Iiwic2lnbmF0dXJlcyI6W3siaGVhZGVyIjoiZXlKamIyNTBaVzUwVTJsbmJtRjBkWEpsUVd4bklqb2lVbE0xTVRJaUxDSjBjblZ6ZEdWa1EyVnlkRVpwYm1kbGNuQnlhVzUwUVd4bklqb2lVMGhCTFRVeE1pSXNJblJ5ZFhOMFpXUkRaWEowUm1sdVoyVnljSEpwYm5SSmJtUmxlQ0k2TXl3aVkyVnlkR2xtYVdOaGRHVkVaWFJoYVd4eklqcGJleUpwWkNJNklsSnFSWGRTVkZwSFVrUlpNVTB3UmtaTlJWazBVVlZSTUZGclZUTlBSVVY1VFRCRk5GSlZVVFZPUlVVaUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRU52Ym5SbGJuUWdRMlZ5ZEdsbWFXTmhkR1VnTlRBdE5pSXNJbWhsZUZObGNtbGhiRTUxYldKbGNpSTZJalF4T1RkaE1UWXlJaXdpYzJoaE1VaGhjMmdpT2lKR1FUUTFSa0kxUmpneFJEQTJNRUZDTlVVNVFrRXhRalZHTnpCRk1EVkdOVGMyT1RZek1ETkVJaXdpYzJWeGRXVnVZMlVpT2pFc0ltUnZkMjVzYjJGa1VHRjBhQ0k2SWxKcVJYZFNWRnBIVWtSWk1VMHdSa1pOUlZrMFVWVlJNRkZyVlROUFJVVjVUVEJGTkZKVlVUVk9SVVV1WkdWeUluMHNleUpwWkNJNklsRnJXVEpQVkZWM1RsVlJkMDVyU2tSTlJFSkNVV3RSTkZKRldUUk9SRTVDVWtSV1JFNTZaM3BPTUVraUxDSnpkV0pxWldOMFRtRnRaU0k2SWtGa2IySmxJRWx1ZEdWeWJXVmthV0YwWlNCRFFTQTFNQzAwSWl3aWFHVjRVMlZ5YVdGc1RuVnRZbVZ5SWpvaU1tTTBNV1l5T0RBaUxDSnphR0V4U0dGemFDSTZJamcxUXpjNFJEbEROamhFTmpReU16RkZOakJHUkRNeVJESTJSVUUzTmpCRU5Ea3lNREF4TTBRaUxDSnpaWEYxWlc1alpTSTZNaXdpWkc5M2JteHZZV1JRWVhSb0lqb2lVV3RaTWs5VVZYZE9WVkYzVG10S1JFMUVRa0pSYTFFMFVrVlpORTVFVGtKU1JGWkVUbnBuZWs0d1NTNWtaWElpZlYxOSIsInNpZ25hdHVyZSI6Int7c2lnbmF0dXJlMX19In0seyJoZWFkZXIiOiJleUpqYjI1MFpXNTBVMmxuYm1GMGRYSmxRV3huSWpvaVVsTTFNVElpTENKMGNuVnpkR1ZrUTJWeWRFWnBibWRsY25CeWFXNTBRV3huSWpvaVUwaEJMVFV4TWlJc0luUnlkWE4wWldSRFpYSjBSbWx1WjJWeWNISnBiblJKYm1SbGVDSTZNaXdpWTJWeWRHbG1hV05oZEdWRVpYUmhhV3h6SWpwYmV5SnBaQ0k2SWxGcVRUTlBWVmw2VWxSWk5WRlZSa0pPVlZVeFRWVk5lVTlVWjNkT1JGcERVa1JKZWs1cldrSk5hbWNpTENKemRXSnFaV04wVG1GdFpTSTZJa0ZrYjJKbElFTnZiblJsYm5RZ1EyVnlkR2xtYVdOaGRHVWdOVEF0TlNJc0ltaGxlRk5sY21saGJFNTFiV0psY2lJNklqRTBOR0l3TnpreUlpd2ljMmhoTVVoaGMyZ2lPaUpCTURrME1VWXpOelpFUXpFMlFrUXdOalkzUWpRNE4wSTRNekpGT1VNMk9VRkRSREZFUTBJNElpd2ljMlZ4ZFdWdVkyVWlPakVzSW1SdmQyNXNiMkZrVUdGMGFDSTZJbEZxVFROUFZWbDZVbFJaTlZGVlJrSk9WVlV4VFZWTmVVOVVaM2RPUkZwRFVrUkplazVyV2tKTmFtY3VaR1Z5SW4wc2V5SnBaQ0k2SWs1NlpFTlNWVVY0VDFSVk1VNHdTVEJPVkZaSFRUQkZNRkY2VVhkU1ZWVjRUVEJHUlZFd1VUTk9la1VpTENKemRXSnFaV04wVG1GdFpTSTZJa0ZrYjJKbElFbHVkR1Z5YldWa2FXRjBaU0JEUVNBMU1DMHpJaXdpYUdWNFUyVnlhV0ZzVG5WdFltVnlJam9pTXpZM01XWTVObUVpTENKemFHRXhTR0Z6YUNJNklrTTBSRE5DTWpjMVJEVXlOVU0wTmpGRE56QkdORFZGUlVKRU5qbEVRamM0TjBFeE1qbENSamNpTENKelpYRjFaVzVqWlNJNk1pd2laRzkzYm14dllXUlFZWFJvSWpvaVRucGtRMUpWUlhoUFZGVXhUakJKTUU1VVZrZE5NRVV3VVhwUmQxSlZWWGhOTUVaRlVUQlJNMDU2UlM1a1pYSWlmVjE5Iiwic2lnbmF0dXJlIjoie3tzaWduYXR1cmUyfX0ifV19"}]} --------------------------------------------------------------------------------