pax_global_header00006660000000000000000000000064144401465740014523gustar00rootroot0000000000000052 comment=c04f90f65f4f5b9bb4c5e8dd43694db7f5a89750 shoelaces-1.3.2+ds/000077500000000000000000000000001444014657400140765ustar00rootroot00000000000000shoelaces-1.3.2+ds/.gitignore000066400000000000000000000005621444014657400160710ustar00rootroot00000000000000# Compiled Object files, Static and Dynamic libs (Shared Objects) *.o *.a *.so *.pyc # Folders _obj _test .vscode .cache __pycache__ # Architecture specific extensions/prefixes *.[568vq] [568vq].out *.cgo1.go *.cgo2.c _cgo_defun.c _cgo_gotypes.go _cgo_export.* _testmain.go *.exe *.test *.prof shoelaces config.yaml *.deb # auto-generated manpage docs/shoelaces.8 shoelaces-1.3.2+ds/CHANGELOG.md000066400000000000000000000021721444014657400157110ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [1.2.0] - 2021-01-13 ### Added - Use Go Modules instead of Go Dep. - Add docker build. - Add parameter `-base-url`. ### Changed - Changing parameters `-port` and `-domain` in favor of `-bind-addr`. ## [1.1.0] - 2020-04-01 ### Added - Build production binaries. - Support config subdirectories. ## [1.0.2] - 2019-01-09 ### Added - Add scdoc manpage. ### Changed - Rename example-templates-configs to data-dir. - Move screenshots to docs/screenshots. ## [1.0.1] - 2018-12-04 ### Added - Added dnsmasq example. ### Fixed - Fixes in ipxe for Debian and CentOS. ## [1.0.0] - 2018-08-03 ### Added - First release. [1.2.0]: https://github.com/thousandeyes/shoelaces/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/thousandeyes/shoelaces/compare/v1.0.2...v1.1.0 [1.0.2]: https://github.com/thousandeyes/shoelaces/compare/v1.0.1...v1.0.2 [1.0.1]: https://github.com/thousandeyes/shoelaces/compare/v1.0.0...v1.0.1 [1.0.0]: https://github.com/thousandeyes/shoelaces/tree/v1.0.0 shoelaces-1.3.2+ds/Dockerfile000066400000000000000000000010641444014657400160710ustar00rootroot00000000000000FROM golang:1.15-alpine AS build WORKDIR /shoelaces COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-s -w -extldflags "-static"' -o /tmp/shoelaces . && \ printf "---\nnetworkMaps:\n" > /tmp/mappings.yaml # Final container has basically nothing in it but the executable FROM scratch COPY --from=build /tmp/shoelaces /shoelaces WORKDIR /data COPY --from=build /tmp/mappings.yaml mappings.yaml COPY --from=build /shoelaces/web /web ENV BIND_ADDR=0.0.0.0:8081 EXPOSE 8081 ENTRYPOINT ["/shoelaces", "-data-dir", "/data", "-static-dir", "/web"] CMD [] shoelaces-1.3.2+ds/LICENSE000066400000000000000000000261351444014657400151120ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. shoelaces-1.3.2+ds/Makefile000066400000000000000000000010221444014657400155310ustar00rootroot00000000000000GO = go SCDOC = scdoc LDFLAGS = "-s -w" pkgs = $(shell $(GO) list ./... | grep -v /vendor/) all: $(GO) build fmt: $(GO) fmt clean: rm -f shoelaces docs/shoelaces.8 shoelaces.8: $(SCDOC) < docs/shoelaces.8.scd > docs/shoelaces.8 docs: shoelaces.8 test: fmt $(GO) test -v $(pkgs) && \ ./test/integ-test/integ_test.py -vv .PHONY: all clean docs binaries: linux windows linux: GOOS=linux ${GO} build -o bin/shoelaces -ldflags ${LDFLAGS} windows: GOOS=windows ${GO} build -o bin/shoelaces.exe -ldflags ${LDFLAGS} shoelaces-1.3.2+ds/README.md000066400000000000000000000234771444014657400153720ustar00rootroot00000000000000# **Shoelaces:** lightweight and painless server bootstrapping **Shoelaces** serves [iPXE](https://ipxe.org/) boot scripts, [cloud-init](http://cloud-init.org/) configuration, and any other configuration files over HTTP to hardware or virtual machines booting over iPXE. It also does a few other things to make it easier to manage your server deployments: * Has a simple but **nice UI** to show the current configuration, and history of servers that booted. * Uses simple **Go based template language** to handle more complex configurations. * Allows specifying the **boot entry point** for a given server based on its **IP** address or **DNS PTR** record. * Supports the notion of **environments** for _Development_ and _Production_ environment configurations, while trying to minimize template duplication. * Puts unknown servers into iPXE script boot **retry loop**, while at the same time **showing them in the UI** allowing the user to select a specific boot configuration. ## How it works As soon as Shoelaces starts, the service will be patiently waiting for servers to boot. If no servers are detected, you'll simply see a spinner in the web UI, as can be seen in the screenshot. ![Shoelaces frontend - Waiting for hosts](docs/screenshots/shoelaces-frontend-1.png) The URL `localhost:8081` will actually point to wherever you are running your Shoelaces instance. It must be reachable by the booting hosts. The following picture shows a high level overview of how a server notifies Shoelaces that it's ready for booting. ![Shoelaces overview](docs/screenshots/shoelaces-overview.png) In this graph we can see that as soon as the server boots using network boot, we instruct the machine to switch to an [iPXE](https://ipxe.org/) executable. We do this because we need to be able to make HTTP requests to Shoelaces, and regular [PXE](https://en.wikipedia.org/wiki/Preboot_Execution_Environment) does not support that protocol. So, when a server boots, the [DHCP](https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) server will instruct it to retrieve an iPXE executable from a [TFTP](https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol) server. When the host receives the iPXE executable, it will chainload into it and trigger a new DHCP request. Finally, the server will detect that the request comes from an iPXE executable, allowing it to respond with an HTTP URL. This URL, as you may have guessed, will be pointing to Shoelaces. If there was no automated installation configured for the booting server, you'll be able to select an option to bootstrap it in the Shoelaces UI. ![Shoelaces frontend - Host detected](docs/screenshots/shoelaces-frontend-2.png) A couple of things can be said about this screenshot: * When you select a task, a bunch of input boxes for filling with parameters will appear (in the picture, they are *release* and *hostname*). The parameters to complete will be dynamically loaded from the chosen task template. * Hosts send their MAC address when they contact Shoelaces. From the HTTP request Shoelaces will extract the source IP and perform a reverse DNS lookup. If the DNS query is successful, the resolved hostname will be shown in the web UI. If no hostname was resolved, Shoelaces will show just the MAC and the IP. ## Setting up ### Building Shoelaces At the moment a binary package is not provided. The only way of running Shoelaces is to compile it from source. Refer to the Go Programming Language [Getting Started](https://golang.org/doc/install) guide to learn how to compile Shoelaces. Once that you have configured your Go, you can get and compile Shoelaces by running: $ go get github.com/thousandeyes/shoelaces $ cd $GOPATH/src/github.com/thousandeyes/shoelaces $ go build ### Running Shoelaces You can quickly try Shoelaces after compiling it by using the example configuration file: ./shoelaces -config configs/shoelaces.conf Head to [localhost:8081](http://localhost:8081) to checkout Shoelaces' frontend. ### Shoelaces configuration file Shoelaces accepts several parameters: * `config`: the path to a configuration file. * `data-dir`: the path to the root directory with the templates. It's advised to manage the templates in a VCS, such as a git repository. Refer to the [example data directory](configs/data-dir/) for more information. * `debug`: enable debug messages. * `domain`: the domain Shoelaces is going to be listening on. * `mappings-file`: the path to the YAML mappings file, relative to the `data-dir` parameter. * `port`: the port Shoelaces will listen on. * `template-extension`: the filename extension for the templates. The default is `.slc`, so you can just stick with that. The parameters can be specified in a configuration file, as environment variables or, of course, as parameters when running the Shoelaces binary. Refer to the [example config file](configs/shoelaces.conf) for more information. ### Extra requirements Along with your **Shoelaces** installation, you will need a LAN segment with working [TFTP](https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol) and [DHCP](https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) servers. Any TFTP server should work. The DHCP server will need to be able to match the `user-class` of the boot client. In our example the configuration is for the widely used [ISC DHCP Server](https://www.isc.org/downloads/dhcp/). Shoelaces will happily coexist with the TFTP and DHCP servers on the same host. The server you are going to bootstrap needs to be capable of booting over the network using [PXE](https://en.wikipedia.org/wiki/Preboot_Execution_Environment). #### TFTP The TFTP server is only used to chainload the iPXE boot loader, so setting it up in `read-only` mode is sufficient. The loader we use (`undionly.kpxe`) can be downloaded from the [ipxe.org](http://ipxe.org/howto/chainloading) website. It is also possible to compile your own iPXE executable in order to customize the booting of your servers. For example, it's useful to [add your own SSL certificates](http://ipxe.org/crypto#trusted_root_certificates) in case you want to boot using HTTPS. #### DHCP Drop this config in your **ISC DHCP** server, replacing the relevant sections with your TFTP and Shoelaces server addresses. ```txt # dhcp.conf next-server ; if exists user-class and option user-class = "iPXE" { filename "http:///start"; } else { filename "undionly.kpxe"; } ``` For **dnsmasq** (v2.53 or above) you can add this to its existing config, e.g. by putting it in `dnsmasq.d/ipxe.conf`: ```txt dhcp-match=set:ipxe,175 # iPXE sends a 175 option. dhcp-boot=tag:!ipxe,undionly.kpxe dhcp-boot=http:///start ``` The **${netX/mac:hexhyp}** strings represents the MAC address of the booting host. iPXE will be in charge of replacing that string for the actual value. *Note*: In case you are using a DHCP server that does not have this level of flexibility for configuring it, you can always re-compile the iPXE executable for [breaking the loop](https://ipxe.org/howto/chainloading#breaking_the_loop_with_an_embedded_script). ## Script discoverability The purpose of Shoelaces is automation. The less input it receives from the user, the better. When a server boots, Shoelaces needs the user to select the booting script to use, but there are certain cases where we can automate even that. * You can preload Shoelaces with mappings from **IPs to boot scripts**. * You can preload Shoelaces with mappings from **hostnames to boot scripts**. When a server boots, Shoelaces will make a reverse DNS query to get the hostname for the IP that made the request, and will match the result to a series of regular expressions. Shoelaces will read these mappings from a YAML file that can be passed as a program parameter. Refer to the [example mappings file](configs/data-dir/mappings.yaml) for more information. ## Environments Shoelaces supports the notion of environments a.k.a. *env overrides*. Consider the following `data-dir` directory structure: ```txt ├── cloud-config │   └── coreos-cloud-config.yaml.slc ├── env_overrides | └── testing | └─── cloud-config | └── coreos-cloud-config.yaml.slc ├── ipxe │   ├── coreos.ipxe.slc │   └── ubuntu-minimal.ipxe.slc ├── mappings.yaml ├── preseed │   └── common.preseed.slc └── static ├── bootstrap.sh └── rc.local-bootstrap ``` In this case, hosts that have `environment: testing` set in the `mappings.yaml` will be assigned the `testing` environment and they'll use the `coreos-cloud-config.yaml.slc` template from the `env_overrides/testing directory`, while the rest of the templates will be served from the base directory. Everything except `mappings.yaml` can be put in `env_overrides/$env` preserving the path. The way this works, considering that **Shoelaces** is mostly stateless, is by setting different `baseURL` depending on the environment set. Normal requests would get `baseURL` set to `http://$shoelaces_host:$port` while an environment request will have `http://$shoelaces_host:$port/env/$environment_name/` *CORNER CASES*: It is not possible to boot a host in a non default environment unless there is a main iPXE script in the respective override directory. This means /ipxemenu will only present default and non-default **iPXE** entry points, and if you have a template that's included later in the boot process as an override you won't be able to select it. ## Contributing Contributions to Shoelaces are very welcome! Take into account the following guidelines: * [File an issue](https://github.com/thousandeyes/shoelaces/issues) if you find a bug or, even better, contribute with a pull request. * We have a bunch of integration tests that can be run by executing `make test`. Ensure that all test pass before submitting your pull request. shoelaces-1.3.2+ds/configs/000077500000000000000000000000001444014657400155265ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/000077500000000000000000000000001444014657400172135ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/cloud-config/000077500000000000000000000000001444014657400215645ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/cloud-config/cloud-config-release.slc000066400000000000000000000003661444014657400262630ustar00rootroot00000000000000{{define "cloudconfig-coreos" -}} #cloud-config {{template "cloudconfig-coreos-users"}} hostname:{{.hostname}} coreos: update: reboot-strategy: off units: - name: update-engine.service enable: true command: start {{end}} shoelaces-1.3.2+ds/configs/data-dir/cloud-config/users.slc000066400000000000000000000004031444014657400234250ustar00rootroot00000000000000{{define "cloudconfig-coreos-users"}} users: - name: "shoelaces" groups: - "sudo" - "docker" ssh-authorized-keys: - "ssh-rsa fake-key shoelaces@example.com" ssh_authorized_keys: - "ssh-rsa fake-key shoelaces@example.com" {{end}} shoelaces-1.3.2+ds/configs/data-dir/ipxe/000077500000000000000000000000001444014657400201605ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/ipxe/centos.ipxe.slc000066400000000000000000000006761444014657400231330ustar00rootroot00000000000000{{define "centos.ipxe" -}} #!ipxe set hostname {{.hostname}} set release {{.release}} set base http://mirror.centos.org/centos/${release}/os/x86_64 echo This automatically overwrites data! echo CentOS ${release} echo Installing ${hostname} kernel ${base}/images/pxeboot/vmlinuz initrd=initrd.img repo=${base} ks=http://{{.baseURL}}/configs/centos.ks?hostname=${hostname}&release=${release} initrd ${base}/images/pxeboot/initrd.img boot {{end}} shoelaces-1.3.2+ds/configs/data-dir/ipxe/coreos.ipxe.slc000066400000000000000000000013041444014657400231170ustar00rootroot00000000000000{{define "coreos.ipxe" -}} #!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/current echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C {{.release}} echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://{{.baseURL}}/configs/cloudconfig-coreos?release={{.release}}&hostname={{.hostname}} console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot {{end}}shoelaces-1.3.2+ds/configs/data-dir/ipxe/debian.ipxe.slc000066400000000000000000000010471444014657400230530ustar00rootroot00000000000000{{define "debian.ipxe" -}} #!ipxe echo This automatically overwrites data! echo Debian {{.release}} set mirror http://ftp.debian.org/debian/dists/{{.release}}/main/installer-amd64/current/images/netboot/debian-installer/amd64 chain http://{{.baseURL}}/configs/linux.cfg?hostname={{.hostname}} imgfree kernel ${mirror}/linux auto=true priority=critical initrd=initrd.gz keyboard-configuration/xkb-keymap=us preseed/url=http://{{.baseURL}}/configs/preseeds/debian?encrypt_home={{.encrypt_home}} ${linuxargs} initrd ${mirror}/initrd.gz boot {{end}} shoelaces-1.3.2+ds/configs/data-dir/ipxe/linux.cfg.slc000066400000000000000000000012571444014657400225650ustar00rootroot00000000000000{{define "linux.cfg" -}} #!ipxe # We set VGA to normal and nomodeset because often the framebuffers # are extraordinarily slow. # Two serial interfaces enabled, hopefully one for local and one for remote # on Dells with iDRAC/iKVM (serial over lan). # libata.force=noncq for https://bbs.archlinux.org/viewtopic.php?id=196267 # We probably want ncq for harddrives, but we don't have many of those. # queued trim is broken with our 850PRO/Linux combo, or maybe entirely on the Samsung 850 PRO SSDs set linuxargs hostname={{.hostname}} console=tty0 console=ttyS0,115200n8 console=ttyS1,115200n8 vga=normal biosdevname=0 nomodeset interface=auto libata.force=noncq consoleblank=0 {{end}}shoelaces-1.3.2+ds/configs/data-dir/ipxe/storage.ipxe.slc000066400000000000000000000010031444014657400232650ustar00rootroot00000000000000{{define "storage.ipxe" -}} #!ipxe echo This automatically overwrites data! echo Ubuntu {{.release}} amd64 storage set mirror http://mirror.rackspace.com/ubuntu/dists/{{.release}}/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64 chain --autofree http://{{.baseURL}}/configs/linux.cfg?hostname={{.hostname}} imgfree kernel ${mirror}/linux auto=true priority=critical initrd=initrd.gz preseed/url=http://{{.baseURL}}/configs/preseeds/storage ${linuxargs} initrd ${mirror}/initrd.gz boot {{end}}shoelaces-1.3.2+ds/configs/data-dir/ipxe/ubuntu-minimal.ipxe.slc000066400000000000000000000010011444014657400245650ustar00rootroot00000000000000{{define "ubuntu-minimal.ipxe" -}} #!ipxe echo This automatically overwrites data! echo Ubuntu {{.release}} minimal set mirror http://mirror.rackspace.com/ubuntu/dists/{{.release}}/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64 chain http://{{.baseURL}}/configs/linux.cfg?hostname={{.hostname}} imgfree kernel ${mirror}/linux auto=true priority=critical initrd=initrd.gz preseed/url=http://{{.baseURL}}/configs/preseeds/ubuntu-minimal ${linuxargs} initrd ${mirror}/initrd.gz boot {{end}} shoelaces-1.3.2+ds/configs/data-dir/kickstart/000077500000000000000000000000001444014657400212125ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/kickstart/centos.ks.slc000066400000000000000000000016731444014657400236330ustar00rootroot00000000000000{{define "centos.ks" -}} logging --level=info cmdline url --url="http://mirror.netcologne.de/centos/{{.release}}/os/x86_64" network --bootproto dhcp --hostname {{.hostname}} rootpw root auth --useshadow --passalgo=sha512 --enablefingerprint keyboard --vckeymap=de --xlayouts='de (nodeadkeys)' lang en_US.UTF-8 timezone Europe/Berlin --isUtc zerombr clearpart --drives=sda --all --disklabel=gpt bootloader --append="crashkernel=auto panic=60" --location=mbr part biosboot --fstype=biosboot --size=1 part /boot --fstype="ext4" --ondisk=sda --size=500 --label=/boot part swap --fstype="swap" --ondisk=sda --size=8000 part pv.01 --size=1000 --grow --ondisk=sda volgroup vg0 pv.01 logvol / --fstype="ext4" --vgname=vg0 --size=10000 --name=lv_root --grow %packages @core %end %post #!/bin/bash hostnamectl set-hostname {{.hostname}} echo -e "\n#######################\n # Finished Post Tasks\n#######################\n" sleep 5 %end reboot {{end}}shoelaces-1.3.2+ds/configs/data-dir/mappings.yaml000066400000000000000000000005361444014657400217210ustar00rootroot00000000000000networkMaps: - network: 192.168.0.0/24 script: name: ubuntu-minimal.ipxe params: release: xenial - network: 10.0.10.0/24 script: name: coreos.ipxe params: release: stable hostnameMaps: - hostname: msc1.example.com script: name: ubuntu-minimal.ipxe params: release: trusty shoelaces-1.3.2+ds/configs/data-dir/preseed/000077500000000000000000000000001444014657400206425ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/preseed/common.preseed.slc000066400000000000000000000005611444014657400242650ustar00rootroot00000000000000{{define "preseeds/common"}} d-i auto-install/enable boolean true d-i debian-installer/locale string en_US d-i console-setup/ask_detect boolean false d-i user-setup/allow-password-weak boolean true d-i passwd/root-login boolean true d-i passwd/make-user boolean false d-i passwd/root-password password password d-i passwd/root-password-again password password {{end}}shoelaces-1.3.2+ds/configs/data-dir/preseed/debian.preseed.slc000066400000000000000000000020061444014657400242130ustar00rootroot00000000000000{{define "preseeds/debian" -}} {{template "preseeds/common"}} d-i partman-auto/method string regular d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true # atomic: Just one partition d-i partman-auto/choose_recipe select atomic d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i user-setup/encrypt-home boolean {{.encrypt_home}} d-i base-installer/install-recommends boolean true d-i clock-setup/utc boolean true d-i time/zone string America/Los_Angeles d-i clock-setup/ntp boolean true d-i debian-installer/quiet boolean false d-i debian-installer/splash boolean false d-i pkgsel/update-policy select unattended-upgrades d-i grub-installer/timeout string 5 d-i popularity-contest/participate boolean false d-i finish-install/reboot_in_progress note {{end}} shoelaces-1.3.2+ds/configs/data-dir/preseed/storage.preseed.slc000066400000000000000000000066401444014657400244450ustar00rootroot00000000000000{{define "preseeds/storage" -}} {{template "preseeds/common"}} # The method should be set to "raid". d-i partman-auto/method string raid # Specify the disks to be partitioned. They will all get the same layout, # so this will only work if the disks are the same size. d-i partman-auto/disk string /dev/sda /dev/sdb d-i partman-lvm/device_remove_lvm boolean true d-i partman-lvm/device_remove_lvm_span boolean true d-i partman-auto/purge_lvm_from_device boolean true d-i partman-md/device_remove_md boolean true d-i partman-lvm/confirm boolean true d-i partman-auto-lvm/new_vg_name string vg0 # Next you need to specify the physical partitions that will be used. d-i partman-auto/expert_recipe string \ multiraid :: \ 256 512 1024 raid \ $lvmignore{ } \ $primary{ } \ method{ raid } \ raidid{ 1 } \ . \ 4000 4096 -1 raid \ $lvmignore{ } \ method{ raid } \ raidid{ 2 } \ . \ 2000 4096 50000 ext4 \ $defaultignore{ } \ $lvmok{ } \ method{ format } \ format{ } \ use_filesystem{ } \ filesystem{ ext4 } \ mountpoint{ / } \ lv_name{ root } \ options/noatime{ noatime } \ options/nodiratime{ nodiratime } \ options/discard{ discard } \ . \ 100% 512 100% linux-swap \ $defaultignore{ } \ $lvmok{ } \ method{ swap } \ format{ } \ lv_name{ swap } \ . # Last you need to specify how the previously defined partitions will be # used in the RAID setup. Remember to use the correct partition numbers # for logical partitions. RAID levels 0, 1, 5, 6 and 10 are supported; # devices are separated using "#". # Parameters are: # \ # d-i partman-auto-raid/recipe string \ 1 2 0 ext3 /boot \ raidid=1 \ . \ 1 2 0 lvm - \ raidid=2 \ . d-i mdadm/boot_degraded boolean true d-i partman-md/confirm boolean true d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select Finish partitioning and write changes to disk d-i partman/confirm boolean true d-i partman-md/confirm_nooverwrite boolean true d-i partman/confirm_nooverwrite boolean true d-i user-setup/encrypt-home boolean false d-i base-installer/install-recommends boolean false d-i clock-setup/utc boolean true d-i time/zone string UTC d-i clock-setup/ntp boolean true d-i debian-installer/quiet boolean false d-i debian-installer/splash boolean false ##This should be set by Puppet instead. d-i pkgsel/update-policy select none ## d-i grub-installer/timeout string 5 d-i popularity-contest/participate boolean false d-i finish-install/keep-consoles boolean true d-i finish-install/reboot_in_progress note # This just halts, we want a reboot. #d-i debian-installer/exit/poweroff boolean true {{end}} shoelaces-1.3.2+ds/configs/data-dir/preseed/ubuntu-minimal.preseed.slc000066400000000000000000000020021444014657400257330ustar00rootroot00000000000000{{define "preseeds/ubuntu-minimal" -}} {{template "preseeds/common"}} d-i partman-auto/method string regular d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true # atomic: Just one partition d-i partman-auto/choose_recipe select atomic d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i user-setup/encrypt-home boolean false d-i base-installer/install-recommends boolean true d-i clock-setup/utc boolean true d-i time/zone string America/Los_Angeles d-i clock-setup/ntp boolean true d-i debian-installer/quiet boolean false d-i debian-installer/splash boolean false d-i pkgsel/update-policy select unattended-upgrades d-i grub-installer/timeout string 5 d-i popularity-contest/participate boolean false d-i finish-install/reboot_in_progress note {{end}} shoelaces-1.3.2+ds/configs/data-dir/static/000077500000000000000000000000001444014657400205025ustar00rootroot00000000000000shoelaces-1.3.2+ds/configs/data-dir/static/test-script000066400000000000000000000000361444014657400227050ustar00rootroot00000000000000#!/bin/sh echo "Hello world" shoelaces-1.3.2+ds/configs/shoelaces.conf000066400000000000000000000001631444014657400203430ustar00rootroot00000000000000bind-addr=localhost:8081 data-dir=configs/data-dir/ template-extension=.slc mappings-file=mappings.yaml debug=true shoelaces-1.3.2+ds/docs/000077500000000000000000000000001444014657400150265ustar00rootroot00000000000000shoelaces-1.3.2+ds/docs/screenshots/000077500000000000000000000000001444014657400173665ustar00rootroot00000000000000shoelaces-1.3.2+ds/docs/screenshots/shoelaces-frontend-1.png000066400000000000000000001242241444014657400240220ustar00rootroot00000000000000PNG  IHDR 0 pHYs+ IDATxg|33MR(ҤHzU,ر]E(&"Mz' 7[fy1C(^N=I6Җu%&*  p-"$ $ $ $ $ $ $ $ $ $ $ $ $ $0Uvp $I-,IPsWU~. "$RRɕS-[S%Ymlk*s.os:QˀʧԫcUz }IU%??_i-GkiZaa3iriJ-/F?M5Ԩ{WV-a2 }TvK~~Rh>xPT)* 5IS'!IVk{zSxQCf%?Â4!<-|QWyZK 6h{fP!nݦ?\-r[)4ܶc{$2۷U4Τ:ӴuDrPmk9B\qwX/\8;nV!ڲUMڥW]$GFZ.p6͝s w@1 BYSڶ$pge9.,] o-(sq|] M I;}}BUrz'I'pI)c vڰvj@`oSB@v%$j6[fqێy|R)~8r/ѵQI;Mӄ,䲪Maג3J*;KAJXu^׎Zn^CJ8Z5!!v\}׉'~ebBv_Pq$_ $?_Bd-{{KsDžt#I8}kwF$rfqRH~ao[-eHBh.($wz'WNI-cBܰѵ}8FHnPҠ1u^z5)8H>rTMLL:ײ:_Nn)ZBY!UinߎL-0ta| $AϜkՔT"׶jNQ)>^ʵkʵkOrRKMuTdl/|}R*pxM7qR!ȼQ{S}Ip5 ܧrddfqXX 55jjմT׶ǴZ$WBhY"UXK+[PIZzBx[%Is, &4Vm,!RcbYr(SfRxnErmOp?G%$un)(PN-Jxx7)jgʗ>ߏ>r[g4_>p 4* *jYȼjҠZP5,vkGs>UzzRҬ\dAҵ=aLgòlGʘ[BhW׶i lt{!>ʏ@ $AHi ~)|jރgjiAVڑڭ9K'N'N5] OرuT_g4O/G\.!d<'BB c~Ls^oR #%i`P[vt)n6;8 +h 5gʺ<i \޲+Opa,i'ʊ)> /G]l>fG)y]6unqn+ۚ꒫Yϓ%O /XX4q̡,ϱ0h]^ jY\$W/6_g˴I4vsnsfՂ-z W$8#;Nv9P#Kf4{'/;Z VOKkݦOT)IrHnd9wM|Y \;]{4WYsT%rHY\Z[5c}!kB9ذnV?d#Z6:n^xX@C]dz^V5 )YNZʉi#5nFmw,¤6q$A!ag!BDYԛޟ}6ӂNm͌4MUMgr"ߒgfvi Xo=BT u"$пOӗ,/m}[%k7VzBxh9yg#I,c OcGV;݀RI;IQL[ ! Kt)Q^.AqdK9޿$h*"Zlpwe올:bjF QWJQ5OOHvMڜovf_^Qr3&҄vWv .=[*Ku3: !4!6[Ҝr-!x4"G wn`UGn!D[ޜg muնLBS-'%W8C؊?ݎ;vMjzNfV;IH;lv9Фy;;psVt !r|I1ޮf}TAl=!Ux !Df`ߞBC}{fd].]yW׺n&BuMZͷvBں=OYm֦3[V~YR+!ɰM')o@]/sѶe^/ $vזmn4wYeמx-}B\Un* gQ^qqSז|CO8!Dm/usl"vOH+@OH{  4l\/#Ҥ{>5ke iRzÓ$I= '_3'˚^Am7v+%_+끰:^3VkhxKy`漢a޲v_%I_3KOH'tڿ-$R0VY>Wњ8w0O[jφiޒvy-o`?xWNN1?U8׬Y tCs//˜W?]=nei$o4jk8tk&_噾dwq<1Akhp,̣asN߻[>oO?ے>~]:>H4W{u,vzoL5b= !~x{L>:oߚm O3 B$?u!#~#2<L۟_5_$Sf^w kToGnUꈣ_E(cM^ed=gV!9"ҭ΁Jh!ɢilsY]|8Rv $:lKYC*ޝPY᯸Ť~]'ȼAv& OobͲ"_^~en"¤^]B4:Ť}V;*]'J。O ]^w%>ܿ7̓ʔK|fˏ`KnmسOwUۆxn;wm?{m-w=~F5+\?W-(xOH.YӼQys_1v-|E7Znhhʸʳ :yӣ>z>?]y=3_rF?G}2)/>z/_okٴ"CohHߡWvYyKoBLsяSǙ?74kפ=J\tg~COBg+v+…kP_S'{BZfsrwZfzh`|njYJ8a奴lǫv$bp\h%-+KMܩow>Yj\R2l.GV# -bƓ r5dAjf5ʢrd_鿧E=4J],8ob~.;kou !z׼ ΐ[y }SibBRp(ԥ9V!F]/\8⪵7Oj#eC;'凷G_hdzG.\ !ޠ(yz[ϔH{ni-֮Bw?:U/~~VqMqV&/^vNY4E?>O\i^R-"썧Js>\a/y޺{_ٛJ|kB>t6kY,oԅoWU˟/p"ioǎ_FjFVބ}VE獉'nSn!Dm-tE׊gǍz!Ď-7kdJ#څ?_<䎞BGLMB=|TtK[w߅[f_C폨DE}oW@{Bs^5j !Tunxvǵy)#LTiDݻ_ݵ[8lVOթ ںͽT_Ox{׊B(ۺ0˺"+CN8"hoRMuHiEw5.L,5!"dH UԳթIGYa&J~&.7~EYW{7r9&/֯MSk[6ndF!Dl_̬orzVNDHQZ".S{jVV9 f+6msS˳ω3)Az e1{ͅBk6 !דPJ:rg9=+'<8HQJxxHW-Fr/Z^e}ONccx?~F=gi3,ӹk  ILBҪbC'NhPI)Y[ 6gxa3Z}Fq)BuƩzBǁΰ+̐R|jNa%R5TFvZ ssݫ׺n^םbTxwhC_<SZz:`rq"d?!Du*y&udR}tytƩT1 =Pxn bvw !G y}q8+25r.!z<4O ycv(}Dco= ̋\"-תw(BHTkU;؟ȳJs~H{%xp !N9:}V9,+}ų%3o'ޡ͈q-}-+7wߢ j[̦3CdHGiTPh۟joOГ\1[v=tT{KU6ۭu~W~_XKC4ӟ]/BuSWz*%^JLCS\S+[LrHTv) fRUUC;ڶ}-^-My7TMε.^=A"s-XgIW0ldu !UpIcݬH*ό90-ݻHQa&U-Ȟ2P<ǧV7=,+%ײo (4Kb2k9[3* LiN9Ԭr5q*BB3hڙCaqBm5:srSjV7MULj?GWǤ찙o'#LVW`-ycERn*%IմNaܓfThN*0grIm`u5vڟ$W__PXXQ?=ѩt-+b6KBFBʲWb_LI=ѷ VT T㫏~6l>Z4nxyCbƒvnTklKeJh=J l-b/Z7)Y_>syKI(0{qtM+Ω+&Vxy !Vwv%$jӲiڽGݻO[,^ Dw22paٟ%k4J(نUrη<

fG 9! ,50x6EEhͮNylU/z Nܱik, L&:2p}dw]/g]/>EٱK=ٛLB ('\ִG~aZ.Fngc3C˨gu+?BzX>ageF֢LYʁVZ Syȕb./'}>̜ܥ7lp#}gҍ[ :~;Tu A?eͥ-=+Ukyr J.\w|ˋl{{uBx}EU2fQ/]i' _'?>'lMpC;ߢ7P=5ao}cJFnTu=tyNٻߐS1c7-3km ;۱#F$?]XO5tL\fIlMxlv{¾comK*\x!$\hmNIBJH u4[=p}UԼTrmׇ3n_<|O=_>hohuҁBӒlSNcroU)UiBOg'*vZ08%iynycyJ,R=dxoɷ<%j]8]6qy.Fs.BOѶXYi\bt'\vOfqiNI'jX\,BSŞPDHB͓,^ h))`%6F&u~5)ɝQ޹Xvp$Y25k&ϛedIyB`5 Z6kTWlu<(I~\RLIj^LUфMo2w(W**իlu8)H\)&FH!@Ek`u pͣ bėY̭aK^}nۮ?g'CBM-u9tIMRpA^gpQI(#ߞܲ\RRw$jnU8MHZZ\3J,˝s&T.)T.IB=;EqBrn&NS.}c|K:qca2ڱ&>ε~H-W! rĮswΗz=ˣEzuܶ;WL_9үQ  {km(jfƩ.Cop̋T$Ki]-Sӽ_>xJ #$,nVMHqN$IRuWY. 3ny4ynqخTpMN8*~8W_               HUv9$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $0Uv/8|~n݆3))1TvPQU5 u׍nw]k׭/#э׭pN>so-_j9n-[u {n?}Ƭ'O:δSΥf睯8)ig?IY-[4N<ٴnڣDYIb{g?SO\Q$7h˯sn{>tKlV[Ωd5+_\N;]+Vs-|y=+/?Oiڶ;5(ux9v-u_E4=ԶMkUNB!(`៞Ysݛzj{҇O-^gԋ*̜5grss;uw?|1^D$4O>k[vmZ !,>䎄0xR.i7ŵMNm;2/6 _sr<#ԯw%.ݠ~֨0;~闳ڄիW1sssU4lFq !hnLر͞ujn+{{xx NbyGI@i5m/Onжِۤ>FYKJMM[}+"tE4ˏGhެԀKBT!%Ǣ/_ߗVoo}a߾=' W_سw履M_|eCܯ/$U˝;uujJjFLb4h`ٽg&(v[}FGu_}Ïv/ϊڵm^ZnnޱcǏ;%/yRrxHw&%;ǎ}ѯ>/J% p hެ$IжMR;=Ź!vZMS5~O-F)97RyO.;"ؑعKgG<өĨKq{?LY^ل/͘U^Դ8S6G'gΞӨQvvM\+irKeF SYBCCn再gdƾk{|2~Bڵ$Y>zN.44wf`WOB&~ÆmZ[, KN0r+Y-زu93v{eȲjK /k[נA77(֏?|_0")iK]4AN~~aө I9dYrWYR,ƽg#Ghu#/~}x:d* ;}k[e1vV4ݶ+\_6gO.((عkwRNOB_?O.y{g\]~7i—_{R=z1NxDqAA˱@cڴ.P y^-7e2ڴn5a'?~gu֗]UΞ[n]fsͨXsQVYO?xuonn򤉃M/)]8.lӏ'}MݪVb6>7eK4|c/Ν:˃+{e+VꏷB0n]?>=k\)'}W}zQjZU-?ɨFiSӫF^^^f92j&MO?.vxxxXpp_,yŧ|ǧNO<6_}Ԯ]$/P6mI\Z_WyqO}S=2Dr}Ezv^Dsp:~D.GURZ:]SN;4o?mkjLIkٯg%/?:ZFFƯM[ݻ{ B) $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $0Uv\_ 'YDHpU>ιo}ى%7nJ&R@he AHpMp^00_i.}\.kW[|Vs[wY g~ !Y)_u9rJ IpE2m}b\NJdRlB-zdٗY)l & !ETB))W*WhP.i]Z^cJ*Uv\I!.\ȺJ%H!U'Bk}a2/>d9rz6.׮5JX0UEH0@s\+9BXt\p $9VN+ڻQANpu!}vve`fimUVI\o@6y ``N>l__e\+rss###I BUMBk"""* (>IWIAA p>zb\IIIIIIIIIIIIIIIIIIIII5JU.\IEӴw MbVvqEHnl>i>.Xcu/[r]胏򦶗lfs3gW.{I̝y^^3O9UDMn߽4z*'–,"?&CIIK2]JSRmfwdV@7)<=shW}3gLR4e^y G.DShoz ]|Ȑ}{vqL=qssk0xb2e0 H$_.1|ذؘU ؄aL YZ6Vdrm' _}vU꣇Hk|߳=Ko9x>C¹8;͜>kU0J?tHV^QOvs**.&L涸F&Tuۢ?1 s+:vDTssm}c5-]Ggח /]t#]D7'MA7޼u{wwwutt(ݒ>::^7lj`lF:ϛImڲC+7S>M=H{& ̓N.n5^=_0m Mb̸94MGVd*s/?|HL]9z|8;eU 3KĤ=M2=lr:=@z&ݾ3c:]Oאdy}CCQcO"Ckhk/ [J<edbx3~}%L"B =|";9Eǀ/&zFaK~Т0mk{|)U]^^N?zd,'ǼF8ld*~-hQ뎝F&4 mWwOʟ:en5V9m#G c#(.)AAK?~/\~梠@qqЮd꛷EnmmhZr^7dꭼD!*4MpV@sssxDl'Ds nbi3^\E25d]fBS$mQqԚ_.t-ͰE-kb֫R)[6RTVFDSֶ9s=/\"vښںsꊕI)^[7ohiiqsUHҳ99A)I | ^ģB,$4$n&^As溔WT@qINmv3kx|[Jv9;9ڝ-n&wwwzolݻ5aUVU_?s^k[{ phn]N)i)ɓsNOt̺iSN?bmiGlllZr-[[[[{e:ehJd#`&&Mqq;,uX_b|ѣF%&EZyWjF摵78ΞG y+:::fϝӵ#×/rDShmU#C_]]]oܴ0\ܱ'xV&3#-$(>xQWΪ[y+/ [c/# \ms"qn5!;w=z$)1!qg˗? ]ۆkڌ\/ԡc wm'c߸iMzMuV_V}َ7hРrKbf;~|Hf0lMt]C<{޽'ꠡkw2a (s/mmmt]Ccٶ444>yaLr"}qI H>}% Y㋏)rr&),|Dy+(AYU#nNkgq vY'GgbcǐxDZ8~qds~58/qJnpǏe &M}? """5wM /G47{>6cL&ɔ9r7NKSKL3ih755744GOH$!S&ͼf<<|ӆu-''+6X)++#Ͽ*jMN)u.ONLP99٘5Q=ϏYa\s{alfmFC}E5o|ؐs+> I TVUQ)*x%Nwnu: \(֔ؖ`7a|g?.0~,|mp/]BBGHHO'vyEP_S_.`?lq/mήS|x!pٜ=\_OWBb(p&!qq/E~~ JJK=yHC]sDfZ[SR``ln>g/k`UUD"q@y~Lcc7 @GS]SFG0w߿Јok51 {)vMm킂T*^**'+Ƿ::{!k)<}ơg-m777ssskij.0z"~WЀOXXX_Ow歲29.׷~׫h/_~u!鏊2yȐ!YY\3<<<:ڜ3vuva-}oΘ? =t:պ:RIIIAo5ڲsX̗[B .js\Gkk/ Fr.O޾sЀs ledt s5ѣ 55K59Auuͦ-LcmMk7qN޼-:ko7MϢځ;?|0S_baϟ7cvݾs&+v8>ĤA<<^@Ҵ0[쓿2Mm575!2DSC=nNnnĤ=--L&X[-]2$8@BBPOll o,Gg~gNڛz& c7UkX[VUU;~@Ct||9;a$&푕QV c#G{Eӧ~H߼w&+ԔoNqؾ#a|عk@?d*y~®]LKܸw)hmmu IؕGQQ/x鳈+`άY;ϛGBBḅǯ_v$,,lf¸{iU7-+#I{R,M􁷽{ܪtuh4:cϜYjj7lڪMײbaa!O߉v&< \\\!AVY?anS ^$&qt?e,O)'}.-b@]־*|liע$hkk7Y1LQAALXɱWz2UUcm!IQ)*q;y ړ:IaÆ/_+!1LYnnn]]ms@HH~yOs lnA~ ws視Ng;iO>K)U[۟? Rҥky~Hֶfz}#S2U}8#pj>~,s頻mlfy?hQexTccet]Cy_zE|i3Uh:AxvPյLWhll^xj::=}޼-b3g*(Q>}LYA}H_+z.#S u^Qqq߷/$Sͬl7N<ݷo2kDQc[%J$^R wƶOKg[QԴܽde`^iv4z֮X3f;=|7dG*tV(eU7c!dSյ, vV~nLThnĉaÇrTiu /[:ը^Clfi[y\t {&xьN'e~n_9kWb'ίwޛ3wŜ,4ֶ6cSU+Od#&t A~ʱ9s]z:j4՟]/uŨ^ =/ؕgH{)fH/9z\_ZAJJ@߸31碃E--Wia?`# 1}|W=*?ׄoh06_^d5ׄ&I?  A׈_ AA6$ AA 4IBAaMAA@$AA6$ AA 4IBׅ @$A~ZړuA4IB?9|" ݸY[ψm#u22XnÏj>ڰ.:rU8SZds\\k[c'~QߋDEa~^A/!Fe/^>fwܳ`og &|f& ErW}D4IB_P :x::77uϮˡmWTsTuXۉdFݻ~TD?>ˉo<< ߟHO%?~TL}Q#nڢoL oh`[1#ųT KGgW:">aݻ t t=gWׯ7w/!#$lImm-M53 b=oc'N|UH>rs.&-nUWsnV$SvLT$S/^u Th^zmW/˴sih:NP$Sofs{E2`FEMan~0qi3Uhce͡i=.8tęߗ ]LSGWGju 7of+ifviXX:V}Zv(g9:|߁&ITF摵78ΞG y+]bլcctuuwvvB'7AAm[6\_G*g IDATnwҞ]I&l8yL)ORm>lXqINmv3kxj>ɥ&6f͎[H$|vI𐟟_G޷uӦ8>~reD>mmmuش:bB[}:cy<]:2|+׮\MٻOJJH%aedhիVG/x:= |<`bl<<[=Je2yF !JJJ~v? 4e:t aG(wǣ.\Dy-a^>c[y(W]0,@z߰kaXww7](hQQE u3d,0Ԣ ]fa---7o/^RP)%%xԛEK?tXL-,|;qr (D)gpQ<EE JsD.v=}QZJׄ&GݴKul"J7ddWulxx|L{j9YG)T g_ZZn gVmcMVFf9w6>=imm!t5oOii7oM_->l'_S[ /TQr2lʻ0j"j==&+8...~~>{;[3Yedo{Cѥ$%Mk2 Ǘ(\C555'0DLea'r嚮EpbSCRRBLxs$$%^ ā 8LNCI Φ&ϓ*+$$$/u ݆GM1{D:TQSCg˹@<|1d Rn0C/\%BRUm킂TFRrr|||kSXO" UM]}=[ZN dE" dIGS]SMF9b\}r&+[L#,&&Z~GGGʾT1{mQ^*#[Yf@W^RZ*))j 5^6644L&j4W[=@JAB+IN®D~~>J~'OEʏN1gάYu6mզkY[Y% tJ'eW/ޞ1hݾ{6n-o\\\{S4668z_5 [eSIiir^ƚ1m$wOoOm;deBVF&+ܑǵ}iiad'?eW6ojnj¡p*En5MM ~Qrb_2rĈ#F  d0>ۼo%SH1vJblάY;ϛGBBḅǯ_aL&[YZDDE:Y^sk֮쐒GaŞݻ@JRr릍!G\Ŷy. }N<fpfZjJ}}BEaJ wwuu-]ɉ;UgGD&'Y3FX'So<}]I.n2 _y8{wo޼ݵ#d1a1xRʂD"}J=I#vs>^^DEN?|eOSaZs3M[#bdh;ic'||^z.z@Z=ݻTg3ȷ*--ٵ@+ǫ<|4ccjEc%'&XZsGA~qkBA;~\=]O?إFSB@$A/oٴ31)iO`QK E!A;AnAR* t5AA@$AA6$ AA 4IBAaMAA@$AA6$ AA 4IBAaMƠMU]nkDchhۓ`Z 8Ӆt5K=u5vlD'>-LLHa===;M+c=zۓZY3vvupvAhDBJ߃lR3)څ ȯM`ؒhsqufOk^zuN/ o3O [-y-_;Fe4|tŹV+2v!knsv&j^aA+|4JF1єå t~of_[,#1ݧrwuMn'wWnuuw۽d\$~s9iY=VQT]SdBJPZ7z`ͻc՗8XQ!܍;GSom|<%|wԆ--mS3.]ݷs Kw ^禖#/Hodږu$C4G1lfL^n&Sat珇J>vKPoID^elwn,޹/?L67y`a!X3obc[M5`%#7y+חcc͂Y|Nǯ#>:{UH,C6+ 6'Ǵs_gg~Unϱ, `kgwnSwq2}y&t1᪺S:[u#,?r<{oe3ԠO@B Y #_~9}iP%0XX(}*!~Uۜt]MieKp@{G'$G.5b"zc6%vo>HvOLR'X`v82kQOOdA~_@&-,?L5Ҳ54 @ n..߆O6K>v֦݇e` $i0fOOGWֳ[st}SJQUTץ[TsDQaaX8{<[w-wvu1}y&pym ,(C9ww\-_禜ڈŹV{O FȽCy`$k$AH=o">x0Tְu|u|c*?UV!&igLƧ5[d?W\au`_k5}d 9SUm3U\]qӈAOmw1&лqqd7;_}i?oSKcXTcsKR{oO0,pW%zcGVw^s7[yGA$? d$Fxwa^hRЈo(*SٕttͭmB/$m}bA`7`ȏN$E.6R{]aҞuS))G1 YIXO MQCs3AW)+aXޓ|·+,}Vm$%_{I4}@ A_ $!;X,nEM:šΔY@*@sk[lJ:wGg t n=oGH{zzJ>r II&'NOU'9iLuc1ujK >rJ_g1q%eݧƦچ5o1(x["Hb"r2+uM\\x.<>{4ė8^yWwpes^z5A_$!A%~k?ɍpE@ےYW%MD r oip1a5Nc}H `mFY]@1=DuU;e]n"BTe8pr::;̕>"B ^I0l_|...G1 CY]]bhfޮˑ"zy' (z^g1ieER+}\Qׯq%ˏh)+=c;9T{=5j먪 WڪE!>w^MFW@3wQZZ*//kߘ<:9G;u+KdJiQȗlcw۴/c;kB? xkFyBٵ@AAA@~ ]#~Mh% AA 4IBAaMAA@$AA6$ AA 4IBAaMAA@$AA6$ AA 4IBAaMAA@$AA6$ AA 4IBAaMAA@$AA6$ AA 4IBAaMAA@$AA6$ AA 4IBAaMAA@$AA6$dzxDk`KK ]pϪBx"zվQ=606{2q]?x/[lϮŷYH*Uh %?}Lľ~FL=sW. m1nk[[ͦcTu#薖Tuô/\MCMF1cڔ#GWTVC~b!Ntgbazqꏔ)cСjHzAաkiz-rrɉ vyy?|a7M?t8sά۷8;9qB4^ɉ ɉ #W>ہ ?Ϯ3.9vT+@k[۞ƏRT~vN݋e2߽ 7W]BHHߞ1}ô!a٧HdO=񓣇~ Z[(yx_̽<OJbI'N''a0&#$HK;͙ylll c+*5in^Ex8~+6Q M3>aWKJܽhں%xw0zή_ᇏU]Ƚ4v"EMv<- TuŘ]7 hmڲH6o^c'N|UH>r=rqvʪf6I{BLVE 5d–.ojj\M5 SF2̭tۉ/pgsMRi`1rOKW$S>M=H{kU0J?tv"J\qsҔt [www*::j<9<"LMKw| Mt7r8Hy['BKN+cf;}qY ;32\(jZCg_]אi67EaCazɻ}gl'u!#l ( _M;~━o>eD"De2vXPήo|- 8ezTuz A$S"8t,Gg2U6Ah_ۃ;iOJ[[{r^my "W]n| ۝\m񓧞>L&}KMMMl̚۷H$^x.&>vӪˎ>(""٫kbO6eorێro9YX[**(dgcG/[06LL0i;v&Y;nj8Qp'ͭ`7ŮuvxgsrBRvxp'O aߦJ]@L:qrNIKIMduJNN_^Jٲq=2"7o=*++kw};؉cMwunll"b?$, B,?~5!n` IDATBₚz }æ-Ӧ:old?1{O]|kWFnW-c×-{>.\]8tLWھ.(xqV?z/0lǏ4hs9xKbf;~}ޛz`*k7;Q(?*gs0 56ƣ޽D~&ad'O? };+_#3Ixw=vpgng'awhTyy|WTt{^ÇUCj9Y2҂dn.`25ÿ7db-YEYܘKJJ::;{U _N#B&OOy)(qqq!!!i!Cq 3e:::-WT&>6{LhT|CDDDP@r&Opb9tu|xW?!-%EQQ~%))oݾ vDԤ"?fQccZZ[VmEQ1/_lܼՄaleiaei=zŰari)l,%-%,,o[YY45'M_mшn[+͛y,z!V&/x~Yy2d_(`dee} ^Ttwwwvvvvv -Λ{2  8t14'lQp4=G1_FDVFf' ģH#GP.^2a_~XYB$HJH $! ,,>)3fM^]SD7չ?TJFZ]{Nh((PTt0\C !z"-%aاϟgzXT\\\\\jjj(jEUTT9cgȦfSƒEJGu1I{RRVR'#( _]] V"""gT]ƍ땸Cc5|zpY6oX'..~&mq)]\(EEm:kb^"$$TaELD1b8??4mVC9k wUᗮ\13e@:#@I ** WV11*4CSJR}o~CG)2g; $@ "ÿyƦs9Q'M"!?!!!XR]F 8ӵ~֭5?''&pRYYE( 2DX(!bbZZEe%EwFAAA*E%&O5LNdcDzOc4ՠmmmm;~s9t%$Cc!))Ԅ_3`;qRTtph|\@-M$"+)=Ja [fD<6h#/n|իW/9~7 X566]~ ^mm-qU "Xi;=#'OuuuӃ?^uru$^VQg0 cG"$e!C)gyxxtu^ &ðKC޿hpd%aa5 7rQ }" hjutB෱0\VDJK߽~d=GV&9RBb;&.X:RIIIg-m777ssskij.XVs}y+aWeE%RFrqݛEYYgؼjߡ9EgRB%|d]諃مaX9@V---w*1iݝ^^|J\'69bBd45oFܺ![h% ao֌i{.KLJCĨuvuIIe;I1m$wOoOm;deiÆ -]2שs0Oڳw{|ed-*=CK #CUURR'O~LV#Gkkk)*(l0~℉vv-Uk:Et_;گg̲4@YJ5w_֭O9tX?.P(^zaԤ)V!IX9kWB/Zlgǎ~6q+WڶCEEE/Ot~tttpw-ml~WƎmBѾDB-(,#?u-?;ק!DD׮?#7:RɵhVV.\on1qqq+4e?[^n1 -7GGvݽ'i՚B5I;wמpq%%K̽'=S 6==^䘙v=6w/jXhn1ѯ9ʸ~ҿ:mӢ#Jw?H8ׯQNڔeeRݵC<IffftἏ|ں}2Po^ώx& hҔLLMDkJֶhҔysw|&71n˚y iuqS]]R_~\.H ~| zzx J9 -o+c_u(I_O|jm7}ɕU{n3?Ι7wۖ-}qcqc^{w&|zR9i3nUqݚ֤'Wx}ӦÏE>^::6bUU.c/{vBV-go7Q  ?O&ko%x(,l(J!Μ|F~MٵKm>xRi>hxK&[KMطjuSZ4++Fv.O&;aiMLL4ڵ|b#Ŋ2q;ϞqSbNO3g]nZ'}F) ;;1/pEaddh/gW_w=w/ꌯ~oe»o(! !z?Oz &_2 I};8wآ%ޝ0Dj٭3᝷}rRp2sԘ_?v< o$3555XTC 6<05/T)mvn|s;99̜ndd͹L&1}juM[/]@;?R7o$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ {L4w+FcffܭB=V I4MAAZn@L5w)KJJ***!Z666n@! @mIIIIIIIIIIIIIIIIIIIIIIIIIII#IIIIIIIIIIIIIIIIIIIIIIIIIbO_۶lѹcxX{s~/7jĽ9]s:kvlT6Mߝ4uf=ݕs-^6κ7]obb<.ִo81!Ol熻vj BXj>B3^T*7oRRX7_151iVQqɔi ?߷Yg)J_o;ۖk_ɽʋ#UM x,VQPXƭq1] WzE6\cgk\<$< i]H'_}{tzB!m{0lVܚ+BgG?ofm]ZܭX$#d2##UuM~qԙ%.eK /_56R111B$86!q{r!WfΞ'][ !;yRѡ}Xەk^BK?xd.ī, #O&H?igtr%ufdpsyak_ӯ:k۹7Xme.s>NGEwqz7<X+jUN]" '}n`oy^q_QO'CX[!D]vmBbB&kߧgBqn;zUeOOJUeWUW{29%uպ~VQ^^_KF}pjMYK#ocMvN~ !DUu-;Nqvtݣ[k'fwpaqy";鏦,pGSO!>?|ysr1oo~ZTQYp/;[NN B8rmoܺsۮ</._=tF~K*õac[l^~6$O>Б }f#Rhcu.>6¥E+!+L!tvRUb;6<;.f耾?.XZV^!؛|hݦmF{+.&9%WKWv&GLq9'7:P[_ӀVdmOgd9Pȯ~BB1lP>*?wJV!l[vS<I?ܰ%"ǰ.$G~)^&bAmZX0i~>7ٕtC2R^𮩉ɳO=anf*/,:rζ]F5Ij+ J_Vrтyڬ{nchu[XJ?T*|v 'o߽/"ź><{v!mv+&Zy4)뙬Y;>+߯g(!C<7O|B OṒ&J5,Fw&hWRrڙ@+WKJ9qn3S+_=vk{%VۯWJӖT$"<0nia~ś ^jewj+Oʢ϶?yg'}BBxpfoztN 266-/hh,M]If9 lmNgd~󶌬sm]lݻ9'V2o_VVeM:A)Օ_ZhV$ݜ::rhewdZH3^nB̳ry}}5ȱ:W'Btպn.98$L,O\7EѠF[kdRTr!DiΎZm]szL:{ N=bkYg(LLٸ h4eJ鍐 = BmٹTzfH\.t)) ,h_1lW(vm{vjƀ&B)l[>zNkPȍJ5 Wh4,(+/x.133h)hM%&z/[cJ[aff"hʅ !LMCݪWuY.&^ IDAT~Viia`owo<"v6;}˽jkkkkk-ͅJ"$ɴRE1¿}xjJ96s~A}-ys]Euofldtːdia^WFpڅnܺ#PjvNA2LT l}3Cfd[XRpnrvivT~BuBYY\((mZZ;9JϬ헲Q~IQ p|%HXYU~款UT}СU+s3ӣ'N9rB!psBXZ2Q)w𐿏=u`I&I~[R5P!sR>6+ՔUUU_JB8>]xZ7wܼ𺰨ߞ9{^aҦO8!t!Zi`KrqvBL/jW߈eӶ]j+߇<\[g:;ڷvrhhoR*n2wJ!J }m+sHX55gugNet2. .^ZVQqN7@?_!J ÊK榨Ng̞?oʇچ A?w%%x5(0凎DoIpy\tRco\!7C4dd I=GDP(=E^";uWby{O9hoeiqɜjs36Ew07?z\.puBzJ:e^k#ylo{?+*+VɇRKJ+..) Z;: !p)"<.]4oj'O>^{X9WSVzC"@$kzنB b}[YZ.e囷d!>^uZa}<2}2-G*Q !:>.Lڄ~{>\ݞd_oWg_6$VVU{{ x,݅psq147@S8|ͥs)BL6b ۫[<@?;ե:)9^sdV['=6nڶȨcXFcu3Og6\3b@} mn.q΅רTJOAz !}|_v'9nbb?YT<* E[w%سmw^Z'֛޷ jjj'}9o|{!ޗr^lc$w_7nM{uhRF湴3Y.=?]uG N{2-F*U]JsJ!hܡҲ}rb ?ޟ֮X`zJ?+RON:p(]m> 0 GH $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $HPʄpa$ @! @! @l k.!DVVرc x;v(޽E&L`gg7zhN7w܋/?^tzNzF24$$9>#ʲpT1|IENDB`shoelaces-1.3.2+ds/docs/screenshots/shoelaces-frontend-2.png000066400000000000000000001136021444014657400240210ustar00rootroot00000000000000PNG  IHDR [)TKiTXtXML:com.adobe.xmp -CD IDATxw|elE"O8aŊ~8;qX8잍遢SAU@ B )1F!ʋdwʳ|iFNNH5 ?9!D@v̝xBDDDDDN\ """"" """""!)0HH """"" """""!)0HH """"" """""!wD~ua x}`YǻTe,z!8ޥ) 'M>[`jعؗΝkg|Z,]%%Ǿl""""Q`S`+N<>4i 4SBF,率'@iEmJ1Z sA vBQ14hm[f)4q 'hw 8TL4tKysHl?1t n*FdFcyTxXSlєABCɼ|X6o]S&0p UDDDDc78xC'k|5l" G\. N-=qL:ڵq()@r !*4i  sS?p_ÿY;,Ir:5@^|7عJyT$? qt{һ<,lLga`w|ߢQCDDDhK|bbh?m-ܙ bcfm@z5Э+ٕNl}:>03A~MrlhvӽJDDD8R`p)uլmҾ0fSS}aPW_ߙh&X ?HfЭSRcpUˢtx!'%5l+s}c@AN>4v['޴]am!: ¡SGa:طT4HJɅ eg8{ :-[@n(`glúuXn%lc]ἑƋMUe?9&]f֩e]DDDzRN>@45[|mtSB'x߮wsB0crvں|݄UG\:2i  Xز#jZP: :6 6 ͻK\x7R{6/ſ[3_yo'pK)^6/I9 1cʳGs.O;3 'À[]z.~nȏg^pnkEE'HIv;mb\q^Y#cfHa*ڥ ;6\\X.cAż/,䔰.0 6 >s3e!^﹑+Ңi7XRd}a=ĬR5q~.>& `~sN_ D6Cb,Ή $,@aeBnJ=?sFE# l3 \wy+WPa% h\m%s LƮCt0z% .c\)vE0qdQX\̠ߝAӆ صdڵmǩd/8=1]Kw:eչ>1=HmP`O&`N@au*8?b~y=Aʅ.R7U0gʐmZC޿ӹ*vGX|_|]H-a媚E6ӚE c nݞjfV3_GlmEm1rJh1l^o!,޴~&ydOxs7O**ލlzFpw&d\N/Ab1e <~F+HV n^nz-l΍.~}_VwsJs{GݠG־S_(Jp p]pL?v2rqyO*=wAL@Iǥls<. ҙ;ZS=;?E9b$'g|9Fۆ-ʂaf؇?|>%/ι;Ӭ\E#KpX[9.4pVnXRX\|.l75Wbn`X+c+.6S‚m,/r?IyqۅoP.=`\[6*>jSq`nSp_|Aaau..tPW!oayr;z\\Tm{,, TO 瞠ufe}su?~6{Ɇϧp˶pXF_7M3oL;^+$u<%^=3b}ua7ؿp&?~6}&s'0ɄM3LҾ3E7&|Q^$.: 8{`SǸ!]}Y];ᢡ`н}Ԅ<<8o3LZocva Mgw JpХ3S9}+XxJFs!f-tAW?uYW38"߂.\=vD0x{$IQe "=DqiF$eDH`5kYީO%Ermf}F2xk;3oqNTyE^۹n:EqIF$#2#ɵO7Q ktj A(ң,)9?G>cج 䱸%v GnsW}MDJ?7^IRz$vS|5aT~TAH.(ο9`Qw{$qeq)@h>yIrwr3ofM Wo5\;l0?Oo /qŠhfc{.CB *&vDA WAV0ulX]b~3"+"l7"΢q\ kb\b,̢f^"~(6ugmt$mbcB>`֋WHAVr՗o VtlL0۹hKu?=M#i߲֧p W3wJN|<[3a[ddlfK&sN;0tGb{rWv(nJ6O'i_}3}Pwp5WpŠٸioQQ1{ew߯_5b[2vгs>?=IL5}YIJ{tlKrf/-;v;Vs_a-nڴ1gtuNYyaGD)w.僔-pV{R|&wW4/Vm θ8s)Mw۷Y-m3-'GmrݡiS竨kW#yspΏ,KUҍ^ c_ tcdMP*0æ{|qrE&}K1?V6=㽮g{r)}?B&7<#&_o_SE"l>/y\v7rA~Ͳb';@hܿjZ {TIv,__yU)mD~ڲp*ڥ 1N*<_heԁ'|qZa$mSrCy7 ssI~WlWPHfƙUf?PVl$BjR&=|.`ފUlZ W&h*/v9E%%@33v爏X]ڠ uJ0clZ[8Ov*ik|^>,^VC.Се t e;Y;.f3kggud$uił*0ꀛy&G8MߠQT]:fikl-uI4kM/am@#}ȵbesn?sJK7 ;{peE&gɭiSZV_(f$oa5Uߗ_-y^AAmST]bea@TDnc17MF ~+g?^޽!<vP.¤LfsWP@]QmJe1?4sAĄ,gjMTp"'<0oٟϟw0n s3v֦,[rm>n>z#}weu\s1>15~T7`Ԇj,lYHRS!ZWluZg}MzN8Gg\6=<) .̨wh䆇Jxs_R&a6Nq5&̀(&STK ]ZFko ߆GxoXVxQՊ(DXtc5԰M&uF}" |d\m ۦY h;Kp<ި 5⢣+=|UW?wUj::)[nS:W4Ǭ%*mw͐A_qo[XLfaAAqy\\tv.9&*>,@>G#*jY*%|p  {ώ=vD=R:琞%u橷NB~s7Aw" $Oq4\6̓2}o cQ\!bD\b\kWOrNOX?5 ;=,+2Q``|~(æ'@bX ~?Cb δ1aLɢ""knf~ut7ni3fUFZҴRWp&nT|8k6֏ǟv'ٕzwά%}|6gA]ڴA\,9yN@٩ΑH۞Ihݼ;g֤F˶ܾM((.9S*t,}2{_pe˼T0*t;Ѯȡ(0H_o(Xz.o LN B."lv/q0$8 .Y7E교,څ[,6YEnSoiT ,-v2H0mzt g4 ܿ;@ZdyX?4`ڀ(օܼ#<7c$ u!s Mv CEXE.T0ht] Jd ]6my>7׏8'Mԯk nweY6y]\!rq M6sV⢱i'*@Sw&-XuqeFŶ什'%*dQm%.l]lFӟǵ3 <%eD/z}ȵ 6=6]­ {mv>'1ɻͼlؤ0 L]Ebsy9yߙ5l8gw|p^Q٠#i|q 0}B"=㵜#+o,T}7'5b^}۬HNƋѻKGvrkؙթ[w:p5d㡛ecGcķxmod4wYQTC|bp(v[]W_FdDc^yp)bYcG{v9ش--ux|ƍ[/Ogz˧Gto߆{5 `bL࣒H8Ymg!rl|n̔Ԡ4n \vo\yרsxW =VCnnsexՊ n8xW_;A۩Nw3$" M$lGYLM,&֤lܰmܼ ^o >nn:< qPũ!z1 pSWB D/n`PLAkBHx1:͋ia,m /[ne\att| VEeAu8lG ܾy_ϽB~a!|nǓ; ϳ}pTǝ>!;nn+d*a`,Jh+zӺy3~9 y{{251V I/{]ڜƎl4v|YE %gf-YsJnUڝucѣX> g __[Vy'xf|ԋfWv3&}g#q7UkUFzvj]^]m^9!N'W?4]` ?9nMqny]k.@u5M*.Ko3y!]ӣ?q_B=ǰ'p )p\7;+9ޮ0x IDATesw_;InJLZs* cx9MU~plz~z`Yɔ}nUjpGGYn6v R.VU&BW&͝>܇l^i&3#,jX9Q6^&[K \0XUlTY99€?/X?I@lKMł"sTR6bTQ٘.g!%)%.u$$J  ?Ңexa @<7o#& J3KxnD9/6S111 Z=w8gfҀ cyedFKq p1wZDڅXPhBVNXi' 4NL KwhŲN~lv!~̽^a߃ݡM8䔭qU4R=/a]弇f]ӻ;@l8M0>Vf97/̰q\oONVoLiM k|7ieOsZ#<ztFZ̓хضw3@9[4KRė0)O OAvZ%{Ю-E,?Ox8G(򴪮 M$,I"@HlY!,׀Yof:;B'uܟ࣫'"pG9a(0o~ uX=3Rs` W숄뮁_ZV˹"k9ON. ZDDDnQ`߼帙۲F2S71 ms>.< MFnJ&- r==072zA+{h1.٭EDDR`|l) mdDDDR IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`;>>xCDDDDDN0jaDDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$Rl=ܗ. _IhcZ%p`{w=4:1W%>AF>2=ǵ|+;:<9*]#:k=KwNϤ{(n4;N@J6>N uPMף7Ld8,,xIinpI]90ݖ}1wg8].{I˳+of]33N?˟yϰƷu#鮙2 F |u肱G˻a>=-+{K =b3у x3HmA2y|vtf d{~n_㡏R+~c=Y{ Q|au70tHf|=nOM_A!*ysc_wcLv&3^A\m xϥ&r3)ɤŤ&ӸϐqM #-"Lv(tOax;͚Y0 w&3>esI Z v&3}~/}ۤ״3Y$ȴKY,xA }eلQ:y=:~[wbҴiY1&O}~ǫGDDDDjGNN]Wo{}.=RW*~$Y?nWkw3l۶d_fs܅ؽ:&}^h۶?=nXa_=nzxmG^K7W*Ckgob?d5,-IS7}}^ʯlw'=mھG5 _5WOeHݐczc_|L;.q5 ,KI uK'VnX]ݻ7$;udV*Qh~c>~8jbOcd=/g7||xCJj{ x2i"Vgz!=:&QKө{Mr~wX>sq%3W@=άzӁ-kY]Sbn45Z\A\3\pqxhc:l:Ab}{gWy,/;|笪;4M=GR11^؁8,abz׎73yj3&1MI6;>5jPҁرxb+ ;A|; Z|kaFf~WDDDDDN4u80'%Te$r_O%G͋$T9JlBP ;xbI'04dpb|2Ë7 8}xX3^|${5({(0E^z{g|uxhƠ'r[ 'AAh$/ ˞dv5[$XtGp2wк˾iX;l*nߊpb@ u+|(#yeeP!pd3{kϚN-}w#/&q3kRCH˥gzY>g1 g - g[鸭 OH<9q[F7slM*,<ȻgO+ 3"3H_g59sc-LziZɞLV4w\8[&;=F\OYdRSY=mb=ı֒]MA";6ķc>\ɞTzΠ;X6jdҜT33H]ԷٰkVw-zWV@KxI_x椒Mp.XEDDDdaǻGě9^g67_x8 atK}˶ސVg䮇nf 3qKM ޛ-@f>6@˜[O-0u^O3z Ř;{7VsLwDՁy+xpqֈ|7 t޻^|I_ u嶿>eW~:{zT21zaP&L O{=^ϽGZ|= Mc_;UDDDDNu;0ȯ'77vIcAADDDDDBR`DDDDD$$ IADDDDDBR`DDDDD$$ IADDDDDBrԆ(w)DDDDD 3!:xM{mǻ$"""""W/ M؜[~8LDDDD$0hm,.&f{͛K,t$XpI*{<5kU(+Mnh-fl pmnA=dh:0Rή.|4Ԅ܌k y7iY)FͳHt1 wsRLƉ.ao,/ qÿOM1bڌ zp>}6Mm0EluqG?\} ƻx.ym\<~Ii 嫰Cgc(, 0zu4eOӝF 2y͛ ,f€&^`PADDD8 բpf`0 ad nL:vUƵ6y<կmd7 4[xcݼڠVOs12flڌl m"bŃk1:U۳>f\\z´T6lat1L`8fE mgI& bl]wskX""" ,>9$ެQKƀ`]`Ff-ϩ.xzn963[D޳ Hp4'gxuX L75X6R,d`{ v{AdaiY8t1aD?;[ vW;;R_qG 0Π1੭O}v7vtAk]3k˯E&zltIN0vAUטX1LF4.-ӖZOOk08t]2|pKu!c턅m: h dlJ4h]}4q`KqMVvVVn.8@ϊ`{]F\fx.*|f]|{Iۭ~z|a;ݭLot%T|~w5/<ww Ҿs]*xb 0{]*vkbe.̶0 /\sqvv1bm mVe$ j/0x#%Dy'#m_^MrF{2x*ag<.lYX`rSJiM&t/&-;=K V.pj Wٞ}ܼ`B~V;{DT8w^͒Lr`r+ .fLҮ QyBrvT.ج{`s6쩸Olw; (=/-6hkUmWbCg4+iX~oԠ4^8.Q6Yn>gH`.ٷt&m l\,-sAhUTTXo1~碋~q[- Čjrkͫ,Osr=L^<ah/40O{G_4ys%ׂ.~ϫ 1NU5Y!ܼ-pūg{Lzpݒq|P_o60]"o wی`emn/^fliKr;w0 nn1I-F+ĻVxklζ6/.-^ .E!nƎܬdLk  Ka9řz/lԑihL jM^|h_nI/6Arg9ޠÒms8g4س-@۠O<Ѡyͼ]s1+tbdyg̳ $g_o1#נ˩F߉A&VY6nH^|Yl' U6o-G\uЍ *b];7o<2m<4Xy~s.,M 06ŦE;C˂ȑ> E!. ȵYR"g*ϠmQ}ȂT_t1<f9tlOA ܲYZ“`mrkc-jSg3cB&\fMNig|A(؞kWhծ̄bb$Axi%ޙ'&{2m=.:kafDA@ʊesV]52[}~KVj֖}%~\54MWIA. cF.%$c:39s||>@bdže&VxMCZ}m[ȓ} s F&X2׺x\X]y5VWⰛM{s}5%ې`dn]-,c 9C`ѵ\ZZŭ} IDATkkǫ D5gj2 LibNNl`8Oؙa5s&#l?G7rC!Cl}oh 9 vtSbwDM8@17+9: LgXa0й>ugDisy|K}7;~Mɳ?9ZF`rw_ ?D,Xzvxxm5Ja ` S w 9۠u+^@& dB 4P1#M onba7G]85ӵQ1A;^VX,=Kmmd00[MF6 dSn_701vfH01'(-ՄPRa";X~'h%kuk*u@Oox,]ܺTcͦrl|SWs^|T1qeKn_zn Ęf d c7Wպl[IZc,`(Kw#zǮq4 ,qč)Q`@Ō2FMUl92p5&n3ŊU |~ b\~4~޾B,Y-Q'__sG\@_YS 0`FQr-A&sM/hCh`|7vq5u޻uF6搼30PqiŴ7*\u8yxEU@/Kj>˰\.Yovb=wvpt7 2};2DF77/q?*gP򦵺6 /.mcuֱ3çX"XzMr]nx" gx;߫t ۸ (quCUܺrŎ~ŠͦYQW B O7'naX= Unpi.s7xƘ0rrpAMMfdmF3Z癿%&7+Vx..\uϚAAg@EgfYT_'ԩWABDDuIcgl,v)Sw0i$&G3}(qwЈ1 cn];O' 2=]aQ%>u0㙮<Vj>c {ϴCi[_`|7-T.Uq;'~~fݡG9}5=JCj:oCG#sSXڔ(>Cy$Pój n Ll WqG Í,M=v ChiGѽƏ0r͝ |3}g{n{Mг[)3,vc20ܖvb 'l/NT)BY>sA7Dp{7=nv # Zbx7dn,8Rl2ItmD肻}6O:0۝h`&Gu.2`uٮs\030ArW#40nF/f1#G1Ízsu,1,mokz lw@=|[ }/ ldNa5]k⃑ldpo#E;У9`= ܬ8]7#} $F9];kg2pbs427xifWC7# zhkLHjPر s7.?nlHn4H>H0c 10~9!shAfqgO?]g||}ɧa#;"k &ۭo݄ywbzyuNhdBd~ =׮y瞀,J`dȸH[ٞml 4+cYv:Ӎ^ !嗞Ю\c$j>o?膨ƄԌq{_8.fS':\u1Mϒj6v:f0‰jOK3\1F39XŬP>'{N5S $ {ؙj30vncu2p9PElpwӷm"`gg[x72'޳`ް7UvIY LƓN}WsJ3,igrsMfAv6p+\YMfb07Wj~Fޥ ) X񞺯@b:ثa*z02n[,xzrqaFnSaj&NbT)Un,7ϬլRŴ,6W&]aUߠb-`s_緹IM613}swWqȜFdqQu1Unf1kLks.fy0O݌,wE7; w==澕. 72>Xŭji{14Mj:WwޗFyLLSߺHZf*&bdFl<>AzF~# t@$])7{IX"FFOWT֙.%40D5N}J=rT׻Xa|\7sOj6ٍ >7~S{Ciiax~/f䦶nfj_\Y ldhWd$qEasXqj9h`h}Hx*`Clhuv[zmux.bSgB=DD.CQQ;,,%Y]@54+wDD~Əd熏""?1yw6|IIc;A\WgXmvvIFQ`ZiVVVsWBDD0_ CSv: """""~)0O{4`,Ӿ:2 R -d:/&Ou 'i %EyeŁULvᏳbm75X'd׺Wy02o8Ӽuf0dG;a[ k6'oXn{%{0ҝ,|:`gZAu9ÀeY$L7tԭ[ON홳IQôvkU]e~g1z錍m#,z&S2D[<`'H{*" [۞`wXpgϐp0(8 ’zbz{%uu{sؼx>w!yL,e]adf$8yO0|?MZDCܻ%=/iMn"Gt,;hZ{}N]HSɯ[*S/%Cϫ;as}c<>˗Y&=Β=:]?1oהc6fihdn.-k(3x,Iw-$3w렐~I;E8r^Y ?}xu!iS=p}ݡ~E[Lxް+eTtyC]a>33_1Vn`VY;Xނa=6o`(-`M9q5IJ:! m<#INIYn#DDDG:W/2v' {ݯ"Ͳ\LvSD$<2j,q19#2tesH{H˘3de /ec&+˞bvC5>Jb̰ ׊I~ߓHKS݋f ^odm'iϽܠ|fsx"'ȴ\͒Wdd]|jA8>~KulZ!&v[tר;K0Q6?kD'b#| 9Xn0${>Y[b/K>GhcM Ď[Hw]^o32OC9IzK?g#ٽt)븒epDz-f>Y<uց9m'4FBtd$q5ɧ2C.Rg*gԙ0_ZL{r|2_|iww C=wI|o /vبw]˝sW&+KFwIfBb&': "",Zg`ÁLy*yE;p=]p4L2pz{o`hL{vlOZpeHdZ7pl=awN{‚WhDnu=}AÍa=(6!n =_#d9&CDNnNq8pt>| JyyYv` `cKL]~&5}bٕix2dw2x8+Hy}"uށѡ3w6{YĒaȩM&>g" 2?XL_ጝ"r6 ;[WO?!"""R +g1e|8l idyC-,Oc`b=03dF)`9},;b٭g: &63$6m}HQAWֽ8d?r7v#!#ݣd❤=/P_x^βg0ַР{ؽZœ.&/]A{HG%b8Co%iދ,4i63Sg|7byE+ dB,uxM~|)㏷1oT`BqKƙޯLni,G=Y;T8~pʡX/gwrc2n6ϼZmQQ4fBΥj!alGN'NaO.\FAge WuXE 8vqL:R|gpl'˷2Ы']dAZt< dPs7GyȏzvRQBxSFQ=E1e|J$ɜO߁;ɸm i+zZw|Q3ҕpٱ'$9ؼq?#+WOBɧ q5XptIW;HEo(B-DE\QXrIG9䅊Y r,6b;jU#޳p_Yv@/.#l gk"$ ꉕD!/΍<]͢"Y3]z%_n8,g#-yO~+_?8YSmN>I.#9u_wA ."""r?nӦMs㌜UpħqMJVB#*.8}\ɈNذg{^I  ==D~8ڜ[7q)ә+qe_|ޱ$(w)J0/x ANL~0 Da [Km&Jm eGOy$ '_[̍wex % K`w$Ŷt0>GT9L"ls}yؼ6;cHn^D w`_^>?#}/"/|G0,ɍS==;BƥLgB̚\ѝ9OGDX2A7qDY7 tseHK \!JHk缹eG0gňE{zI7MrSO}//xWXL6TGO0mu#ԞAieƁeQϓo8"Pqe>RfnX o^y%AQt eGN&?.Z#f wigx¯h] Y{7O =+͒9Q,?v/fdYcvn LEsHJ?D+ɷKADDDDDR`DDDDD/KADDDDDR`DDDDD/KADDDDD25w΅E8T8]z3al-^JD\NZJ"""""p`?^CytBC˪BqBUBcE-b0؏iА`KʚMbCénH""""bZZDDDDDS`DDDDD/KADDDDDR`DDDDD/kHw~84&yh s*s>[Ә :i=L]L۸fԍ=.EDDDDZIW0%+s֣'W/7[HXϙ8[ReҢlr9 &O|KU' x1x3_O$^*€=Ul;P@ye 1}Hr[> >xP^DoྻK˳go}y7czw;>}Sv=9C&+c0;sX!1`2ƐЖ͐<>7--z],Y8sӖ_DDD8FR.I>A`L<}^ Cgvy@]G?aPگ==WXMs\<]XKnn1 3綴-ȒE/pJ*YYIBeO E<$8*+rh?8wrp3 7ɨ/WX̍^>MO%}77_OԪC "ŶA2@9@&[P15g#֙N` mrW;=SN@7ONy]zۉG5Z]m_H-9؟?qOM΅i|WVzQNCke+Wb7r|?oF/H+v,é1 ]"^r}^P"h1t|I-|Gw۷K^cCi7|Z{yWDW㖡87yŜJ\۫ͻ,wmQ2&,ޗ"mx>+xm"^ѹQ͇9ҹU8ZuE2\7 M0nfE`XOFMM5rK]DGɿ+""/mڴiz4ّtޤT~ɚ])ۜON|.7^z ܐJJ/+?[Afn']I "~dL r W x+^*~-SIOdzm/nJ73z< hbgP?tiyLD.>&m/XVWc~t>5b=G?/承aԐxmR"ֹp1&?}lG,r;+.H7\k#07&'$}FE|D h n8QkVˀAĵ/XUGIUJ6fՖ 5qC;r kYe8rif_ڜ***Za$kޫ Rg=k3dxRzD޾ Ǎ|֬Kqzv>_ݯ/!}Q=q ϋ<'}$~ԅat1B)ݿ\{.W7:!!&qoNt|<7 BTH]KZ{mLCDEp2^c?'calDaah8aDkw$Fu3A`ژ!(f!IH` szG=tvXLo8H;tUCwkI;{v8 {BE(Mx `In&JPg""rqkU]<">kBpEﮁ>e:ѧk0kx|?^/#؛WIJ@& ׯ=G(,- pUՅ 7}6W2≏ѹӡ\r]OK :cJRHE>M0AtWb D|$|TpJ#yC?Gw9|tyn"S3\Ŝ8…@|stZM`$>86&8\+ &5NV|~2Ju.8jSWHli˷^{BI7 ]C 5/񷯽Hb|†* 5Apelx!6ԛKE~m*D`׭z YdeͫpB2GN{&t4j:ɿ+""Vjkc55 S~M|ݵa!2yN} [כ^2:^~+% u ua8mY[96VL2x$P}MD%: *ķa^'H'e}R?UoL7 a95RWz4]WDD.ro C=:ѦH:[T{$_+oxa\o\vA~zP0{WŊPXj'?ym<2Eˇw΁=@5|cJ׃Y<;E^y&:w"hcBNqFѦMoxOPr(ʳ M].IЉ1MʏY<*\;s;xay?(e cޤv5x9j|V/el"03M]u} 6w7TŠSgOĨh@֏轗XS!*{e:-"?w9]q㔫h[n`٪އ!>҆{gF%?`͋/U<4̳ Jōb{cV:Nġ6C]f""r13Z^_˥}iѶ-Qa~WDܵ}nW$OADDDDDR`DDDDD/KADDDDDR`DDDDD/ GsWCDŪp8Z̍.ȹ9Yh~bbCX;] ~v6 ,ȹ).)#4$d-60GꈗHpph!%eDoi+"rvNw>d"wXXXs8+]+* #""X-fBCh9Ԥj+"tmnvepv{$""""" """""~)0_ """"" """""~)0_ """"" """""~)0_ """"" """""~確{p/l\0v@@殎""wXXXsףɪ (M *?CX$ """"? r$9}U7ojH+bCu]fUVBh-""""ͣDDDDD/KADDDDDR`DDDDD/QyNINZ;Up_:f`f^BMDDDD䜴G3p> 0 |:7%ߠ䙏=/T:p;P<Za`4][s0Aa?̘c󯈈ūUP (y-31Ǩ>[$gN0Zp/qՏbxv Tc/H`@b s7\tXVܑ̦LNPg '99qCh_O\JM8_\8 >@'n*gEDDDD w~J;}^rQRT7azz3:/;g>'~UbScyp0lx!JB """"-@+ \+Sh#ϯ\-X;gDBwՌ$[8h>F宼euXqA!}`(1$!). %1n&lꤦvm;iw&6d3I'4uXc+2#;:+$ĨAX0>cQ mșfΐÄ[N2zSHb(H\ DD 8|DA$IW>Ð|8Ƈ'rLfFTE&·ǠmNĹ#V$lt;pߞ$Ip䐤/}uno 83i1pfBb~ {}L.'+3>@?g )K$m>O#Jbϧ8I$v +Wξ̑fN9M|8Lw8]b_yN~9N:&6)#er gzn.~ߐ.|>]z/`"ڟ$IpIgǻى8E7S_W$I>Ǐ;A$IR4$IHI$I $I"$I$E20H$Id`$I I$)A$IR60$M6Ej%I4>|[xa\%>E$I5 )}&Ob|&O!vRH$r Ӧ3'y$M|fw1g´]I$]CϤw9$I$]a?~0H$InIDAT$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I)xǻ$I@0H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E ƻ>?ݵ//UES f/skʬ.U"'x%ev\6{yLӱ'}Y+=pk,&kGO!gsWWOrף1?5=R|(OA̠ n{ؾ~X9޺x-EE}%ϹtxK8[˷$`zIH jeAF_ I 5'yLEqvkyWJ/儴7:vPhM+ï>WIy HSPx^ Cg1jK*$A&$'_HٽXŎ yt9*>H~M%6?@ԭ*& mƐ[Ni ;-5wƦ1*^hͺF\@u [Z8HϿAqj{ lR,Qp//y`ˏU7rumq?XJꇹ'wOfx]rV|j/:N ,`~//3XRG^~j|Eɏ~CzN5lm|dmizO<.sV?L|!Ii}`h׽wmzBby,Z|7#z` gb_rsPL\ ;įWSML%^R}2vkc;wdܷx.3VC]19J* 1jv6H4Al,Y| 90ykI ܹܹixB%_/jiy-  c\_8%gUb/=K3-6T7|r&ݍO@jv *+G [LR[M#w.^Dqҟ'=K״S=-ˑ,(<{r 0Pn%__Yɜo-Mwv#[Q]~9}lܹa]QAA[5`5L}+WۘQdžC J銯0bEwǾƝmu_(|ZW>z o$ u#)^xq'ie<[s/婭~{z0e&/$-mz ۉN},ř3h^P!][vQ3}l̎99 Hpz7EY5ZAW^[~"!M5WzXUEw66 a=3Yb{Kaذ]՛ذ?lC<.WT5Xj^rkwS>^yu[an{;S3⸴WoⱵ˹[g]X?b)+LoˁiZ:d_m2uY{Ύy{Y]Yۼ^z^9xmĒ 5T0缋}S1{h1v6YiiSʁ{m?ɭ=f(X\T ˠ ?)z -; ^h8KaJ)bO?rbp\`7h tR v/Zz;4,]ȁ'Im1Wd1sZ;NBfDz ;v2 񢙰$ԓEYinM=xy|T}.)-N|D0 b 8AѨI/%i8Njʄ/9珼U*9S#K'BNHA葶NA&ϞL.nÉo@(Nl[5OIyl1-s&yë;y[+]}'M@Hi30.H ]}=cD> g@n}EFMJl'ƭoPWy$kL_x#ӀN f*Fsr'S6\ֲEh-Me{Ft20Hלӳg38/i U*`YGb%92zwA8g,?)av”؅OԘpi7RuM*KoAgNY&@?aAM!OP?n[@N8t 6ѕ'Tf,o/TkK>Q&|RF̋a@eTN%!0鼕c)92+Jgm.vd:^ S^4{Ήij[:)侒L\;/[Eß+A {(+aị]y,)T4?MSO ^Ěy77Q RodJߑL$sB10bbL D|]y}:rkln|w2xٍCg> #_ -NANZzhmkgR|fJ;͇饕#n6x;Z-ǙX~'j֤` f-by"hٿU5q2YY&_fygc CdlU"Q2ʴ⛉W瑩9A aaI\¡aAp} K%t7cwu5"ѥ{v!Iqҳ$ & x&i>̩:Zig*T &B QWۉs/ҲH#&-vrEveS..6nP ˣ캩ijBG+#+8<8)7d@G'/Y,ho|w!6 ۚk$_p{v) gner&͟tioy%opWZ3DgkznK{hm;Igc9f ىA*yŋXR6h;]$R9x>jr`*3xG׈24JKYaȡ]J gK d0#ߔ`"RSIzwL˿%sIMǝ/e`9 ¡桿}364\_:+@XÆzn{ U sQ ;:xJۼ#AlJOsknڃA&tt}18xzTcAq*kߠQ+G<<-orޣ-X EzJ]Cszz-/C^{2ǔ'g.C"}> &i^VLj碌jjsOD~ QG*;z@1[{.ڽ6VQvbg1bqrHѼڶz{Smu8H[y=mQfRZ4l?LNmb_h>āƋ59qSlh`6e#na\8cXE}[}=4gvu7WɯCD_j K%ftW=2H!=3/gIi%oz3x)kUlݽaPWF2ڶ#1=K* hrrhkK5}RgpJmGQJfvoy?_ Ny ^\1!JN ׾KAIvʜǪj7/<+0=w.r)?mS2 X/y99x]|n\zLi'iꉟ71R nL.')WL;΄Y JI?]np=dF<#9Ffަs++gRU ?ҲS~/KU,~FMi&3=w6p%J}&%e,?) "6bx?f3|o߮,!-Uo7vخTx>{$EﷇA筇]/>\Y<#w1`β+0,=F{.6&l' u;غ]̰ 2a;įPE_8qpCYͼ!~/xi._+W#u| mhh!/}$<I$I]$I$E30H$Id`$I I$)A$IR$$IHI$I $I"$I$E20H$Id`$I I$)A$IR$$IHI$I $I"$I$E ǻ$I@$GIENDB`shoelaces-1.3.2+ds/docs/screenshots/shoelaces-overview.msc000066400000000000000000000017431444014657400237110ustar00rootroot00000000000000# This is the Shoelaces signalling chart. # # Find in this directory also a Makefile # with instructions how to convert it into a .png file. hscale=1.8; "Booting System","DHCP Server","TFTP Server", Shoelaces; "Booting System"->"DHCP Server":DHCP Request\nfrom BootROM; "DHCP Server"->"Booting System":DHCP response\npointing to iPXE executable; "Booting System"->"TFTP Server":TFTP Request\niPXE executable; "TFTP Server"->"Booting System":TFTP transmit\niPXE executable; "Booting System"->"DHCP Server":DHCP Request\nfrom iPXE; "DHCP Server"->"Booting System":DHCP response\npointing to Shoelaces start; "Booting System"->Shoelaces:HTTP get\n/start; Shoelaces->"Booting System":HTTP response\nHow to start polling instructions; box ..: " Polling loop" [line.corner=round] { "Booting System"->Shoelaces:HTTP get\n/poll/1/m-ac-a-dd-re-ss; Shoelaces->"Booting System":HTTP response\nNext instructions; }; "Booting System"->"Booting System":Executes\ninstructions; # l l shoelaces-1.3.2+ds/docs/screenshots/shoelaces-overview.png000066400000000000000000001444231444014657400237160ustar00rootroot00000000000000PNG  IHDRC bKGD IDATxy\7;aIƤRPAPYE@(R=DŢ X,T7kz@ Z*Z)n=j))19i%?{k&p1g@i1:2ZPn@1 fxp̽I0)6Q5%w*d*`277r>>>T+22;;;E.۶mcX٪|fܸq3LgggPX__߹V%rL;99q8cccQ^^.9mFvpq:Qnܸ奩9IȘ***BCCMMMlҥK p8G޲eKwWV*mii /_^nUuӧkjj=z4++Ν;UUUk,Yr++++++/]~-[TYYt3gPU%%%ͳ/?䓸8*ť(99kwMܽ{W |ᇄs޼y3==$55UWW_>iҤ삂]]]ooo\ٳg!!!G7oުUrrr6oޜ?zABSSd{@0yd=9UVV:s4khhZnݯZRRrrrs-\-_\E#9BaQyI;ȞNgϞ͞={ƌGuwwLd''=FZUUΝ;֮][\\hСB`~dP%鄐z@H /rqW hԪBHDDR577?|p֭znH=cfϟ/Zаܹs޷Ѻ<0 |d,$G嚷K=7F>}|ⅹ9$NNd٫]Fwy&c|yE瓠 5үzzzSNwz`Vɓ'_xZyhhhPSͫ !b={6]5vؑ#Gv7_O?mݺ^^^G>@$B> hjj?~Æ vm[[[IIɜ9s455&7mX,}ذa^^^*&`"x߿D±c0544\zuHHȞ={l&c3TUU===ͅ >|P P>|xF%9rRyI;bMFf0cǎ<ޞ0l06Ls!D$}ϧǡWyT:^O6`ƍohhx3oܸA]+)Bi-9GA%nݺz*a"SShz'%;pLMM^x!F7,P }}}UUUmmm__'N;=^M3JZZ!D 3St.oXMA-&|zN=& Գjjj|>:x ڵk<f=:))I2'AA0 D ѣG/oݺ8])ۡpJN"+8]QȓpIOeBSYYuǏ߼yoݺu~/=>SC FEwWp#'aPU@ߏ2dg~~~tүٹWh.Ŗq&pJN"+8]Qȓ0hodܔxw >0h`2 )n%!!@`R%:册2ZPnh@!册2ZKZZ?455fϞ/7۷% |822޽{2AqSSBΝ;_P_@z`@F iiiI^|yffŋWZ* }ttt``#GTUo~jkki&ف:88ݻWa3ZwXu}흝"m۶Xl:7s{&, {`L8Q(>y.,//9s&p8tU^^3fL^^7}` &H UUUgXFFF1116mjllIxD#dR[[[\"Y IV L䣏>qQ2wܛ7o궵/YVVVVVV^tI@w^)!ѣGݵollljj233q䖖PԔsܹuyyy S%&&8q"!!aرT1cty;2Fnoo/++ۻw9s d2G!@6dR^xAGMLLͺގL' #$$$--MƄ興u[[[IIҥKd2b?f:x{{{ 9Ó12!DMMm6l ^^^66662Zx)ՄÇK:::7BmooߵkWzz:ݸɓ'"HWWWr==z}ԩ͛7GGG-_|Ŋr^Jaa!Շ^^^EEEO<^2-ndϟ?lD512pϞ=}yD ?}y {ʼnDpd444m#6y333˿b0NNN_QVVv]LMM8/1TH666,bZ[[_0@B/\pݻ"g˖-O? 1bDCC@ ;y9g;;۷GFFXd77777(ccz ۶mKHH2eJ```xxx]]]||5kDGGѵ2F?~hhQLc۽ !"(55Ņf7 z!22ptuu̙#u[<.]:qĔ?9::Ϙ1d03fطo_dd/_8lذ &PKy#GdffJ5zcǎǧk׮ݽ{7]+cd>oiiv}555kk'NBf͚q'OH.2V@W^(z?r/!!7>u@(TTT-Zc.+U J foŋl++'N t,BF =xٳ|׹s;N;vljj*-ȫ!&&f7oX :`.\óз~pBdzJ@Gе.rss۽{c^<]ªO/^8f̘p痕ehh8ЁH5ZG_bddz~\ $%%u;uuu k׊D"%%%~~~:::,<&&ǝQQQzӧeaAAAaa!YPLhA.?^hԩSKKK*,,,,((>wss9>~իWK֦xyyZ`ܹ#5fNNdɁ:bb2n XU _?{{ε"b<==---Ç_pK}WP{ܹ>裠#G0LBȜ9s]FRfϞ}A:!nll/͛矿˗| BB FLLʕ+ϟ?pbccœ&Mp8<_Tk׮q8 ǏB͹\ IKKNصژM6566R:`L8Q(>y*پ}zffdjnn|3gHv yfYYp<ҁt2Zَ;>L9}teee||}ѣGܹZUUEٳАGZXX̛7oժU9997od" /_n:CCCJe/YVVVVVV^t]WUUiii[X,<<<BdQ8@m8p 885\xs`LGGG__b``0bP$eddxyy֮]kjjzUUUB֭[322Bp׮]>>>}}_Bjkk ~mffvMMMyv-VKK1LhTܜW\\A=̬s 4/\pÆ >>'Odmee3bĈχ|~~~Rjll<|pdd{bx!>^/_<33sūVJMMs>:::00ȑ#7?.jkki&D"%U?"##[ZZm6Mq988tمd:;; z+W?ɉR3gյRUU5o<}}}eddLW_ڲld}O4x<7oJQZZp,,,v{ d5Z7Νrɓ憆ASSd{@0yd--^RUUuСRRRƍ'!ׯ_wuur}1ϝ;W$>ѣGEEEmmmPO>]bneexbMM͈BٳgO;=zٳg֭suu駟LMM0-[sNKKˣGFGG9We 2 ~Ct=Kkdff&---B)''ܹs]D^^^tI\\@ $L:.11ĉeee{3g՘~AikkKMMuvv&eeeׯ_hڵkMMMϜ9C]ZvuuغukFFFvvĉ !?>+{2BɐBy!`%7117ꂃ02}`uLUUӓlkk+))Yt)#BL_vv6!DMMm6l ^^^666C1)SЛSN̼w˗&&&'Ox"XCCJg)ղ(;T -*o>|8]H=Fy :RsssMLL\Y (L?}}׮]taGGSN%$$l޼9::h+V*W[[!CxB___r7nܠ7\dZkk=*ȀMaa!͖ݧWQQѓ'Oz\Jkoo/ˉ㩨DFF.^{!TTT۷/668((ҢA|!՞3̚qjjjGP@<Gff#"",Gqqq"(<|#lc^^suuuiiGbڣ@gF }t…wD -[?˧~cgg6bĈ@w~ 299-**ظʕ+m۶UUU͟??44tԨQL&رcTGMMu555Q:/u6l6mڴiӢ={~z G˩Đ*Wt݊$p8]]]{{9sH&KN81%%%%%?x3f Ǐ億aÆM0d[ZZݿ_MMĉT!C/[Æ ۱cLJ~HUgΜIHH?֭[Gw {2Bbxcxs%$$JjiiٰaÎ;>cʕ999ReAJw@)`****޽{ra 6,,lƌHg䇌V!X[[pg"HJJ ~qe`P[[M6ܹ _>Cɾ>>>T_PFF>&ꫯlmmlIrrTI&q8M\CdjRgggcaak.*&&fӦMFFFN9v옕Ͷ)((|\]KQt&q&, !aaaӦM[dI]]?lذ[v׷G3gյ*왥c{{;}8L&3==Ǿtm``6=z-[! ,0ad3OOπug"44Ԕf/]Q(.]t3`ŁV <}tŊYYY֭OڳgN>]SSѣYYYwquure˖%%%UVV.]4::̙3%KpK.;!d޼y666_~'|]Jzu=TUU:t({ggo&++.5777HxY^~}ҤIeeeMMÇ_~}ڵǏEEEؗRVVoܹ+VxA噬233۹sgQQڵkg̘!K(>}z̙+WN,Ynݺud%_K"##۩M''~ެRSS7nԔKƏpB5kx<{֖*//'̘1˃/GљT`}!Ç%؀.W&̞=[j(155 fGGǸq$w`0Ξ=;uT:9;t-$K<<R]F)//67177nLO'3{&0(/.`2SL7NZSSs=BHkk˗LLL&O|.И8q"inn^]]-$u?ٳ骱cǎ9Ra{{]rpprW ٳg]tAq}_"_J[[[IIɜ9s455&7mbbbMW\\|yDzthooOIIqpp6lvvv&ܹsn`0̙CoөW 8pg:ts/bx𡅅ECCË/Ǥƍ.rjjjG]'OD"]]]Z===9Qt)77Ą嚙I+裏>}z?8--Mcw=}}׮]Kc;::DŽQ … Ϝ9ckk+G  qqqw޲e ˭www|y<Ţ7N:XŁV 444hhhP>$P g2[%ԼbX?,xt2+x={}}}7>>~&Md SQQ|{{k׮FGGӗ竪vpf?\ˈ3''gٲe\"ՠfS?өW 8@99r~}СÇSf輧TT`X^+`8::%?*(矋-8q"ZfѢEmmmf{zz^pbSWW?{lLL̪U=eX'O>tP(کiuu5}Zn߾-@L▖ɔرcRc|zȑ#t` *MMu555YYYYYY: 6L6mڴiQQQϞ=[~F\\\obmm-RSS]\\lqz}SL ^hQ}}ڵk̮d꼯: )UUUT$jjj?7mڴ~zYqqqEEdGɏ)nnnnnnQQQm۶BRRRΝ;'.\zdݾ}Sllׯgdd'$$Y&66&::ZMMM|w3sLG8p@(455?'OXZZ8q"??_r:ye`oL{==K.9::X,##;vH)**.w $;899Q?`0 {],9rdVVVyyy&LX`Ay_2.up-f/_VQQYvT+**<ѣ.w}֭aÆΚ5H,_zU]]}͚5t۷okhhDDDؗr5fGD3bYYY:tHYdMMMPPrԽ\˞NR'Vv&0(/.1bk͠ABBBowV\#T=z"11q ^ KXuC(~:::[n2dHXX@2Zߏ2dg~~k~*;vرc/: x]ܐrCF -(7d <rCF - B:W8qW\]VVVGGGH6VWWXvH$z7ARR@Ghˣ7?#GQ<JMM5007옙iddx{HMMMǏOLL ;w||%AZZի:hܹs%KH|||,--%KIu MOOߴiJH6vppػwfê7tvv =6f0'N O< gΜ9kiid<+++6=f̘>c ё~t%9;¦slٍ򊋋322 U#455 !SNKLL*888!!a͚5555jjjtϟ:j(&yرvoooBH$JMMuqqaƍ{'@ Fbbo>B/_lnn7}+V/TrIyw9r[3jǎ;uꔉɼyZ#|KK˴s޸qĉYfoܸyԀz@ d^_Aۛf:uj7ʢEvrfop/^dgg[YYQOJA - f>={:xU@_ܹsXrԩScǎMMM}@-Eaaaaa@G 111'Oy@ O`.\,@_~Coe…::: dz@GkZ[]^/pss۽{c^< @. J'$$,]Ċ;- ~~~~YYY;uKLL2d.kggA ҪwttL0aȑT_ N $%%~ʕJXaAAAaa!YA h^7]]]odff566>|822޽{IIIiiiVVV/.((رի%%%j``@o*k@z'&w 4pBOOOKKKBHhhmzzMtuuw{/ ~d_/H|@GVn?g2B6mڴ%KսÆ ۺu콼|̙|>ḺB={fiiN5+..f2;Jjkks8ѣGoٲ*_` $[zzzBbbb6mH-022"TTTlssK666J¥KlIrrr(HghNeeСCݻw8;;7YYYt9A³gϺ&M.((.++<|׮]KyqXX_TTTmYYosӧOXB_d ˭t!lΝEEEk׮-..1cd/Pv3g\2++K#1*PFXuZZZBaSSSNNιsl6UebbdɒٳgO>s_GGG3ftqqq:::@SS2uT;;'N%%%z{{رCEEe߾}t$|G|>￧j9d---d2G!ͭnnn ܹCg cΜ9tcǎݻwB#A-B511rfffR >裧O>}:00?Lv)]vI蠞Fa0 .>~&M.xf===/\`fffWX{恵={6&&fժUtdX'O>tP(SSSj:}6]b$▖|رcR|zȑ#Ç\c0-⊏*((^MMM֯_O7+../<-99-**ظ{  IDATm۶s -- .^r* !۷owwwwrr566} BHpppBBš5kbcckjjxE"Qjj 7nܻᄏgϞ3g=zR'66VOOҥK,hǎݝX?~Ayav!_k _P^]:ZPnh@!册D0 .5ZPnh@!ux7(\册2Z& ݳ!u:qD:r\;;a}}8d /hˣ7?#GQ<JMM5007옙iddx{uAZZի^]]1cP(lxhܹs%KH|||,--%KIu MOOߴiJoCD,]xxxxx@GVa2B^<&&fӦM###|ʕϟwrrp8l6|ҥ8TRgggcaak.j޼y,( u5777 !YYY\.8h憆굪*W*++UUU*Yѱrjp!***%%eܸq"fffAAAڕ[lv7|#~ٲe;w T| !d׿6mtK޻wiZjѢE\.~"TTTXXXlڴԩS+W<}ԩS叒H$aaaǏ6mڲe233;YP_Xuw566J$glV ,Z())i̙SLiP(ߝ:uc7D:::I&999%&&88877Ν;VVVݝ,#d}מ={˵h>xg̘Gw !B'Þ>}Ҳyfzi,!~S!`̛7ɓǏW@XjbbIw@$m۶mGr555cǎmjjx<EB߿&Uf]Νϟ߾}{JJ'|jժs3Cx< v֦:&&ʕ+iii]555;[8f={&_RWW; ;;{Ը˗/iP[[D/x!}>d@0_͟?ԨQT|r;;777w+6}9 E5dw̙˗vy ܻwD"i?Yee%>z֭[t-Œ*6d|zwlM%]NUVUTT8pdBK77k&$$N>]VV&`@@󔔔P7A7nHIMM={laaaΝ;zeO?tر?]eBHppp||+bccxlmmRiZZѣl#&L}iӦ ]vkkgffvcu%ՉSuWYFGG !kf.]Xre%Kׯ>_CBB Я_?ӧ:uJ&/[b֭[ ,P| ʕ+<f6,))>|8ŲٻwөgϞ3 LV]]\߅ !wOBb&''wxV Wo2f '>> !2ZPohEڵ;To:=ZPoh@!2ZPoh@!3CGGb̙2}[n޻w`$%%!!! ׯ7|~,.䔙e`ZrT*6^G ݰuVSSSTZYYyѠ'>|fwhssڂCˏU[[o߾;w(Huuu|MbbD"ٴiKMᇪښ^d֭[.\|4;g̘~M_^iiiKKKBCC322֮]8P/f^\DDoVVVccGmܸbeee,eĈ...3L777DRSSe cԨQɓ'taiii|>qww/..llll|}}Ąwygȑ{{{*sEEŜ9sY,i```}}}LLڵkkkke]^J@@@SS˗ rk ===(嚚zzz4߿[oE^vm̘1<:poII !($$d?7n( !gϾyfFFFQQQZZassU-Zr'`333BHUU|P(}mmm]]E=766J$g*XK5;}-[ U% utt!&MrrrJLLx$[ZZJJJYfQ d2͕CF /:}ܹS л= ntr`0BBBӕiL^`\TTE%&%~+V;;;[YY) !ZZZWH$>>>vvvN-JB B!!޽{6+//={.kaazGRSS҄Bܹs !O>miiټysFFݸɓ'RP##.(>vX||u뢣MMM,YtR%;nAF /ѣl6[:uɓ':;;˧Ŋэ'Mdgglٲ@mmmp6ߟb=x@|>eϞ=oPWWG5P3d턐;v<8((Hd[,X@[[[D"T* o,ҏU0mm7VUUQloosYXXX/*%%%%|offft=AΚ5O?`X)))̰qϘ1#<<ѣGVj|"888>>~ŊZZZt+**Ν:tP&KJiiiGf#Fx)B7DDDB8s^^ެY<QF>~ S| #11qԩ;v숈ppptR||H$0`ȑ#ƍۿUf̘aiiuV jժ~{ʕ۶mk󭭭޽ekk{cBOf͚'O 4H~q/8;;: .0\ՋB_f;@ '''s6UzACXG zyVVU @@߿?s̀>FXhٳXrЙcǎۧQ_w e☘OOϛ7o:»Tܹs/G=o<U@2Zү(:?<<|8 ;,`hh#[۷/""Ν;IIIt 8pj/q8𴴴AѻDL& ;^C_pgϞpvvT*L7<<<<<\ښ蘑vZ CCM6 }///'NH&tRg8!Ņ`B-[fll\PPpbccƧO3f xOW\p8VVV| !$33ҒN8ݻ &&Hjjjɓ'/ZѣG6lsC zQrr}!Ǐ///_jU.###n߾dBș3gLoWTTPBCCCBBrrr̙|umٲaaa/ayy]m۶F77 .dffWQr^lh)Xuؘ2h sss\*nٲLJ.Yrɓ'eVVV6lزe !D"l޼yĉѣGٳ)UccD">{l`` ͦkEfΜ9eʔ BݩSsT -7t%HD?e%<==ϟ?OX,___j{>>>Zw*ѺP #$$$==]n ҥK퟈ڹs@ w3dLWϟSwsi7nܠ||{տ]BHSSٳG p\ >O?~|ƌ}Q|" ߜ'тQ ` !սt}:{۷'&&}'[lz#AhAlP({URYYY\\Y?Q !˗/?~ss  OXzɓ'OА-^e V8pAKK/tss[vmBBeee# &>~ܹZZZ^^^6l033{e\|yӦM=]HݯMJJ ?#PwpUUUY C&:7W||<@ a-7dސzCF -7dސzCF -7dސzCF ݖ 3gd6mnݺ%{ FRR|?2hР~}7r233[[[{{F4U[JʣGM8l6[Nӣmllbbbkkk BBB:f}EDDܹsMZ o2d%Klݺu…˗/OKKS1::zƌ{t8VhhcFFڵk544t.JY,VgjgDDDfee566*yƍY,VVVRF!L&M"ԴZlqAA+ÉKKKM9{qq1}HEEŜ9sY,i```}}=Չ'l@ HII4S IDATcƌp8</ ͛m(..vssp8VVV7or.CpzL@@ٳg/_I׋bA]]|BOOwkrMMM==Ub822255uĈRr5www[[۬,.?PٳRiFFN:LuӥK~666 .Y`!̙3SL7n\NNNCCC\\իW0/^i&kk뜜!C)Qq2Z1TJWUUEYXX(sccD">{l```uR-[|||Hd``PXXC4iSbb[ZZJJJYfQ BHsssZZ!w-))IHH?ʕ+N!ϟ?766ƍ.˕jjjRd2R.u6bx[,X$RixxgKKKKJJ^>$6}9 զ]JJ *++ Ooݻwl6[(1WVV{yyu+6#**{Ν;Hһw=zpĉׯWѣGg111NNNaaab0//=dJJGddkjj._LٸqcEEܹsCCCd2sss[ZZ|}}uttw9r$33Zzɓ'O<922!!!A[[[$u#5_UE"""!9//o֬Y)#**jԨQ?xB0??ԩ=åKE"QmmFI}󭭭޽ekk{cR/^ڵk HNN~ &>~ܹZZZ^^^6l_ݥ 1d2cxs?566^:99j,[,;;bYh@-CG8q"22Ν;@=ɰ>aaaSNE: qDFOEIII=axxxxx=vvvT˛UA*:em,K}~ GGG6-RRR>}z̘1ܼy꧸͍XYYm޼nvZ`0LMMu8!$77Ɔf8p߿ v8≴!tү_?7nU@ӦMݽBCCleTTTmmm~f̘p ~ze3g1255 o?z:;C~fw @{ӧK.mll.\`Bș3gL2nܸ8wwWG,/^xӦM999C #ZuΝW>(8hΜ9fJKK{H$jlll:[=zCRRRBBB:LfΜtoF>T]v6++fee...m ///_~+W.\@ՖxzzZZZnڴdbR4##cUUUNs:%*FFF1j׮]BdXBȷ~KDDDd2WW׷~ږdZZZ5ktttx"ݏüy+VxkYe*((Pn]} .`P_z;Ud?ޝ4iRuu;w.]LHϟmmQFѻʇ2ŋ3gΤ |ݝw}w 6|7>>>Xɓ'S ޞ U@EEEfѡjLLZKKKjjˀl!~#Hnܹt?4Chii988^zeee.%)*ESS_:ӓFϟyS'O:jii555)Fg?yD*)sw'BqppDsȑ#WZUSSCU|&9ŢBU<ӧO[ZZ6o̖qF[y"O> ;~+Wwѣ?!;6a„u<855ù+٬P) @]`m:ō !&&&TV]]-߸ YY,Ç ]+?;OOϽ{J$(9]JJ RMDšv腯W hՉN\\\]]#GdffRV^=yɓ'GFF644$$$hkkDV*=f1BcƏ<+W+ Xݚĉ̙3-,,$ɩS;}tKK.CU{,<<\__`t6_~666yyy#G|w:TO~fs8{{5k_Jx_5$$d311>}Sڟꠠ >rGvMsʕf baôy<ޘ1c>~ uxbtu ۂZ Wo2LI+>>٥e˖eggYUUUYYY%&&.YDձ@ CXu=I"|G6l Su\:CF =ISSݻ ,ů\7 2Z(f:(͂wzCF -7dސzCF -7dސt!==`ܺuK޽{ #))I"0:7|pvvvt.䔙),,LJJnTR8N^^{ 2D$Q\.ZGWmݺԴv߾}w쳰0==?nT-KИ={6hѢAɗSPmmmM uttXvF/ :dI$ذl;;ӵӦMݽ*Yvmmm-UL=Z׋bz*//k_UTT4gΜYf=~X$566:;;S׮]swwrYYY?˪UZ[[wYZZJx}/RBa(H겳Ϟ=f7sppWۏ1D:::I&999%&&-RB!޽{=={˵p!ɓ'RPȈxiKK͛322x@OpvvϘ;ԿCPox .@@m0 Pxoߦls,,,Հb555 n^{$!!aϯYr1)))|2!dƍ[[[T6zh6-HZ=Zu2nܸ}Y&))Ԕ1K.YZZD)S,]jOf77)SnЅ_~E!ܣ¢E-ZԦT&o\]]k;_j͛sΥk۶m۶mcJ5j\.WձܣP'$**}vvĉuuuTϟgeeF||sΟ?@@ ͛7 >>^ձ-XubU@QL'.` FBm۶x>:|g}vÇ:> h.LUҧ-@ϫb26III/9Pt}Ɂ=tKhzޡC 0zhm@gLfxx:c UǢ:thڴiHTbzPK.9;;: u{=ܹsnEEŜ9sY,i```}}}LLڵkkkk 055%lKK˨Ze˖r8;=Zv~RgϖJ:uTssUZ[[wYZZJ$TTTXXX뗗_ʕ+.\{ő#FJoVN@:4ydjI@KKKII_|1k,xL&ܜ>pԩSN_nooOJ-[Ї U=ohii988^zeeemiiIMMuqq0`vss#otMMMoo^@]!I}rر &[~+>䓰Ǐ_rٳ&~>m':tˋ%&&&۷o'ر#66vAAA^xqtt4{W3ÿzL&;z( ;;E-?`X_e2Ycc|*̷̈́{=槟~>}:]RQQ1wСC2ܖ5R4--ml6{Ĉ&Lؾ}iANNή]}'8= -@9tȑ# 󭭭޽ekk{cBOf͚'O 4޽{۶mrwwommo<<<ؾޝ!@>|x޼y%</찱ƶm۶mFYi .;x!1nRuo"< -7dސzCF -7dސzCF -7d&JOOg0m޽{ #))I"0^9:99effh?MUp8ḻ+**̙cllbLMM:q℣#)))c>}z̘1ܼyMnnnj TWhU__/ݺ^\SSSOOZX:bTz5www[[۬,.?BfϞ-J322XUUuԩfO.]믿_p΂ !gΜ2eʸqrrrݯ^jffFxM6Y[[DGG2OCxeK(^獍.;;ٳl6ÖRt˖->>>I utt]''ă|f͢洴4777BȻ[RR0|MM͕+W>}Ҳy挌 Akk+cǎǯ[.::tɒ%K.[9+3!ϟ?766ƍ.˕jjjR0h2hz|$pl߾RVVcǎQbQ[[ڽ>ug2]UWWS)o:4 @q uЇloosYXXX6-RRRX,VYY|{8ܜf ¼gϞQU^^^ O~PCmG зxxxxxxDFF<˄7VTT̝;744tСL&377ח>VGG'..z#G233uWU5a„'Oϝ;WKKkÆ P0P^%L&Su oxիW'''ӟ5]B˖-nX: msĉ;w:'M:, 2l׮]wVu,LXuzǂ TZBFb?vqq밖`x%!!A!8\2Z300())-D}ѣG !EtYYY9sfK.Qu8JA*j 0k IDATO #,,ƍSu,jmbddk׮'N: ƭ[ ݻ`0zo^{(ƈ/OK{lAFݸqcWVCCÇn_}FKg2ھH[[;))Vu )T/^.ݶ׳g }2ھY!tӧnjpx<^@@͛7˗/3 .P9O۷o3'N-&&fڵ `v9Ps166fX\VVjfff---jkk鮖-[fll\PPplvgɣ:q℣#)))ʜ1?g(..vssp8VVV7ookccf8e]Wƾ;#G;00---1c>6lI'2P-| P__/6R>s̔)Sƍ~U333ggg>_XXA),,p8ԁcǎm3ܪUZ[[wYZZJ(MgϖJ:uTsssg=WTTXXX뗗_ʕ+tNő#FڵkW{ҥKk ,X[QL,/^xӦM999C #͙3g֬Yiii?DYA~emΞT*S0nIIMLMMo߾MuZgR\*@uTR>_joPZZZiӼe2Ykk[otRMMzL+Vxm Dknnf0_~=˻r !ڍ%(}Է~KDDDS+Ț5kttto٥x"]0o ;~+WΞ=Kijj3'Ḿ>!ݚb\.W~WKK ɓ'RP{&<;gO,(]hg|&Y]]-_X]]M%p{{{Bꎬۯ_?wwH۫_Yً/ ԣTJX,nllw߿O֭X>xG:ֹmf?{L^555ݻQY}I fBa^^TVV{yyQ ̙3tF{ʕjkkw-ŒK@KIIaXmzd|>._Sdlٿ?wށD`%ׯ_}vOOisn<-fff=zDܻwD"i{ꬶ`/CF =f'O>x`vv㵵E"ŋk 􊊊,9Jiii/^jRf JEE{zzӧϞ=ﷴv30ao޼)H]v)og:u;rH\\Aɉk׮>}z߾}3f066~m(8J+V<|488XKKOkkk]]]wq̙m۶-\>/Th +u믿޽{Ƚ@&:ujl6߸qC=ZPL6RTTٸϞ= g0&&&JD? ƌsa=WWW|.GkTX###ebGO? B LDw ͻ#?lذ~9w0:gҾ+L?|peccw^wd+Wx<6=lذob; 0khE矪x-7dސz{m3'OX!ʕ+ ٹmvBB_|w6Аw6/|~߉G~ɉRYY'\zBw766]v鮮SP_zA 6A_w?~Dž n:Uf4h(??)S۪ϟ9rdСMmٲeO>^{\.7 @Ձ!1~ Gdɒ{:`^?W{ezpUC \vxMV쯾JQ@[l6ɓ7krv˖-?n_.䔙eA3 jkk^IFY֭[=ibbbŊp/fȑk>|аZooooGP6mg/^‡i|~~k~]6c2nnn*9}1c8 yfYl2ccb777ceeyf666l6JKAx N8fAJJ#8 M2Z___%[kjjBΜ93e~ݽŋ'%%GEEEGGcHLLQ^?}tҥ<333;/o^ɻ&Lp̙j%I]]]vvٳgl6!dʕfff'O$[YYmذa˖-]*fee5W_۷ϏG1b*ț!nIIIBB^5G{Y...\.? پ};!ҥKt'<==ϟ?ѵtbiiYYYId/^9s&]eoo?deT23ӻ&MsNw#5c-!dϞ=ZXXP !b-oܸѹ\VSS!ɓ'R#kFFF ɬ/ѿCx.U2Fo'\^F}MVL0lP3˫b0Bto߾){8%gb,--{uYzɓ'OА-z0ϟ?fʕLRP^9r$33:u0aɓ'ΝpBkk̬7nܾ}JKK֬Ydjj̪un~~}O&''=8/nu L{CUUUVVVK,Q-[f-@ϊ\pv5Gh_ Du>;;{ĉaaa :ڮ:W@SSݻ ,)k/`هꬶҳ&'''''l/YG%5xm:Z 5h:Z x2:Z 5ht-hu}v h2@IOOg0nݒ/wHJJH$ >\A?:99effD z[e}]:ZPG{C D.˭ﬖU[n555ݷo_DDĝ;wz<,,,LOO{[e:$0anJhhh̞=]hѠAK)&:::fdd]VCCx,--{6khd2{wԕ$$$)6AAPT@Q6AQQ*S~ۈ/)PEnu`+Zi("jE (qw_@@B{=99 ٹŋvHNN:t(˵=v옗/}5//oƌ㹸dffR!!!7nbq_,:ZyFjkkӚޛbikktϞ=;&&<<|ٳ~~~\.}5kӕÇ;wNSS2y#Gnذ!%%EWWWGGdB::ڮzϟF Ƽybccd׮]Ç[ZZRMMMϟ_bBLoBBB fzVE2Z@ostt>Eyqώؘ盙uXo@H$ o8p uPYYܼsθ8T*퍍^h3r8gϞ7Q訩-]tٲe(:Zu.`0ǎ[nݺR\.=##Q8Ncc:Zh@_XvmnnZZZbbYD"_QQQǏ?p@zzzrrrxx8666$&&ڵkԎ}ܼWuHLL˛>}l"677:ujhhb͜9sׯwvv:u]?BCmPG g˗/o(e2YΥ ļy͛GܹsgUkk~޽{ݟ b̘1||c1hQWWbŊ'Ndee>|xҤIZZZ-Rt\ГZ[[Xz h:ZxGXG}AAA/^ zޓ'Oӧv ѫu*Ru:ZxGpǏ+: ;.]\b1PeԫuJ|_䡎TUUUUHH;w˛:ZFlqEJ@[[{…zzzQooo%}LKm(^RAI h8~ݻw'''}<=ܼӪHh@U o… Æ St,ovMItw׮]ma?ڮa?ZeWRRd2f 6hii,O> ;v,c0UfW/;vɓ*G؏@?~\__ر}6ÇBa'MTm0ŋ߽{w֬Y`?ڮ@?~|ƌբ,ƍ+++#|ϟW`TK"p8EGE~]C-R#ZJ$#FrQQQm7L>4B2OmՍ7Ə,,,~'BȮ]|I=zh&&&\.|ŊռYf Bgeey7CG:t(6l؏?ZW۠Czz 1c@ x...PTT4|Hpb_mmm'&KgI/Ѫ3Z(_~E]]reeehh?.[LSSO?9sfԩIIIk֬qqqy󦉉kQϟ??444++kӦMMMM-zճ^BHQQܹsBaAA͛oܸq%BHNNyttX,?`?~޼yӧO~yhhhKK _PUUU``;$InnMBBOHH|Q:|9s$I\\ܠAJJJ~N@ej-///E&֬YfEG&z?gzwiҥKE"Qss3u4x`f/]T&_^SS~aSYEGGB ~N={d2 8BHiii7| BH^^L&000k_5N\]]*JӫWBM֝Q!==n4i T*MMM {{{HhWSSӧbBɜ8q"}:yRj/l?b266vuu9V__<j!PRJաyǎFr΄K$/.X@SSM 5Ne2>w\̌:jBX,;}Ο??{l:x&K=3n?Ͷ_nΝ;1_u]C-JOOimmm:a%BBȓ'O!UUU"H~HTQQ񺳼n@ _zptuuO !P,Z_~qፍUUURíy^kWTTH$aίv8;!D(yΝ\9۶m{ūFHMM޴iÍvy; v unnnnjhhРN\T~R*}Yz<:|pPPPpp0uzu@ XǏ8p8Ժ:m訩-]tٲe݌pϞ=}͝;UJv ()Lv?}|ȑAB\ѣG[ZZřnnno0KOo珗C p\]]9RWW6t؟`899} rݼQQQThdd mw.**Z`A@@!CLfrrrss׫_+zVE2Z(Ǐ=Z,7jiiAAA۷o_d }ԩS ,`nnn[n|gJԦn>mڴݻwXE*?~[:88deeEDDJ$> 鐇?n:##UV笝_{{j}}ѣGwX@ֱ=b666)))&L"~Wh2FEFF?KO{.\_-V:|pJg_P^xv IDATHEz{{1-2w^?oxcZdh3G5<P۷oْzVE2Z|$?~]~YG"-h3v uh:Z u]C-@:ڮ?CmPG Пk`0|Ǐ Ɩ-[o֖Gk.T ZG꽡7@OxGO2<<"Jϝ;G_"ЯbquuubbҥK l҇_{1d6gtt˼y^uI5!$ `Ĉqqq7nTSS|jDpz` ho1Lgg纺/^j*H!yyy3f<%33_TT4|Hpb_mmP#\qTT\iiiƍx:::ӧOsN0233y<Ν;3i':ZyF:ZxUUUiMMM/MTPPb;ZUUc;;;Dbcc._>rȠALMM\ѣG[ZZKřnnnbnn{3Zʈ?~^xquBȶmۊ,X0d&,G*MM5kP{ϻv֭[X__vZ !:ɤ[whu񇃃foo^]]?zh/:66ѣGl6&%%e„ k~Ǡ\}}۷/Y}ԩ l77[[wuI; ^ed:Iаnݺ۷o^ZjÇBwoPG666[n@ejdQG[VVhѢiӦ*:ԫu**{L&;t萍X@Ym߾%oa?ڮ)~?tE[zu?Zh1myyQjjj:`08ײvZEeFor177Ǵ**o^NNΫb' a[PjxR-hh)gΜ9x`7@jdJ]GKa0-}…  @:ZhUc?ځ:t_555Ut, 66` 8n,,,d0vzϝ;e˖lذAKK&{$l6mה)Sܾ}?ҳgvv'0`a`Ghu]S:444l+:U7TWWԋ/vZo"Hzv 5횲vA!;vC^^ތ3sqq̤뭭4&qj`0bq#~ժU"(33ٙYXX?9.**?H$p8bϯDPNNN</,,>=z~~~m9k,P񬬬6oU:HKK7nљ>};wKo(x7a?ڮ)~LMMGGGQ$77&!!'$$xyy]|yԨQΫW޲e˳g-ZXQQ!JW\IU^ԩSTbaau7^PG5<N,]466LgϦDEp8dkkpwg"b:}{ȑ#uuum^\.ѣřnnno(xk.{iiiQQQǏ?p@zzzrrrxxxxx8uuǎgϞ=|-[ KBD"v澙"شg.Y.D_gl|jG^''}9sf˖-֭+((III9|ĉ544Ƌwhߒ+Wls{{lssS>xrƍ/I'&&BfΜx;;;O:mֱf͚3g۷SRR&L@]DVVVɩ_xȑ#;888deeΘ1#::~O:а`e˖Y[[gee[wԫu L{e˖}m6"##^PjxRwoVVVTTԱczi|yFO?): Slmm{o|od})22B/Q,P___(Rz@q nꞥ"-!cƌz|ϣGzuhb GKKoff֫H-zv߾}K,r]7w\WW>NuҪ333RQQSTTT*}g!}ٕ+W.Lv!UVd(BHhhh:vwwWx 8GGGϜ9ăcqo500ؼyL&knn!%${A T2ͩcuuuMMM:::L&X,MMMuuury<ZZZԱ@ ` > fooG755_d555R˗ O>Ң64H$D)b=q옕/ە+Wʞl!ekkkkk+w^v-!!ݻ#FprrrvvvppPWWWTJƮXMf]]B9wܵk׾ ̮w~ܻwƍ׮]b&4ihjjB$ɥKO兲=LEV뭭4&I𚗗7c @\\\233_7k,P񬬬6oLGG ٸqcuu5`0bˉϟ/8X,󫭭xgĉ[nqƭ[6ol``_xQjRJMW&<{lѢEqƕ%$$;vl^^^999Ԁ999cǎ믿ǏwFDD|~AAAAAիWhΜ9w܉;|LL̀z.+AAA7o޴[dɈ#KE*EiOMJ9r-[¼o߮o>Oxx޹s稯|0777>>_lz^D3vX.kggDEEE ,2dLNNnnn{׏1͛7O:5>>>((HRR%WRRRRRW_}nnnuuD>;;;222<l0==,"0`arh{$lWQQ}v++˗/geeEGGx=z~~~i^^ެYB!dzڼyoSu6n83};wЗlQ?/>ӳSgʕ+zjSNQɮ֭[xQ˗ׯ_x3gGGGoo#G*:4P} h544̏bnn^\\La֭r(y%ŋW\IؘN?566vuupݧEJj_*..z˗\rÇ|! >/fTooM6 >hǎ% .J*nUUU"HQ$UTTЧ=(BH^^KHH{nܸq+WN8Q(;ȑ#QQQW\پ}Yc C߷o_XXܹs?miio@b?~Q &YZZ*XZZ* Z˗/nݺyfVVV>|wyÇ߿olllcc3lذ1cƴIe4[[ۨ|*p8SN;vx{\]]9::::=zt԰ř|[.%K;{{{:u*22rl6m֭]o(BL&;tPXXXyyy#444H$Ɨ/_655KҚںJJa)BP( 8pРA7nH$200@+L&St /^uRi\.`ZZZjjjZZZ|>_KKK[[[ P|>JauuuB!;%22 two3wP(߱cǚ5kD^Z8IDATI{K ؽ `ٟ[<<< AF_XZZ2ZPnh@!册߳ J h@!册2ZPnh@!khhHNNoiiio.\PZZ*ІD"ILLjf=UqsoD}vbbbbbӧ\={@rolm{yy,=Uq+w dXDrڵ? f߽{MaÆM6M#;6LQRRs'N 4>=~X,nlldiiiu̘1fff,`B*++n޼y]--- }}};;gѳӁz膆'O0LWWի/_tww744zzzm~^/yfkkD"9qℱqmmT*QSSkGMMĉb3==]9::_k544!W^Ҳ%dggSwX*d2T}b``P]]ݦ- G~̙3 !qCCCMM@ qFnn. ƍ#P>v옧>!ؘ>ܹsnTn4iiiiIIIҥCSL pXXXdeeQ#_ȑ#,K$w̓*8p`mmm'=$++L&T$B<<<ѣGAqq "v'b&YWWWSSMU 2>}jbbB=p8>455UWW'XXX<}TWWWGGG(B{=AemI=,ͼ!Y'OjkkSSS !---T& !}}o---zҒ.RjhhollrZZZݛ?ٳgo߾mcc2ZԨIO*u  gϞ]TTtSSӑ#G0"H455N*8;ѣҙ3g2TTKjN+?ByKn3onn.!-??lddF6440L:~*6}ڄwF~94ss644XXXBJJJթ̬;->njjjL-))!ܿf[YY1c/O<. ***jiiiii),,|Ռ4DL˗/jjjBTj``PXX@y%5]SST*Mw~:ε_ryoldsMM @ꠍ.37 ?>|Hhii766B=zD=ӥm'7h?RSS322JJJ...ȑ#uuu߿?~|5bgYYYTmqq1'ސ!C=GYtil6]t{ .|///1=== @[[ɓ\&M?vL&T*t{y%~ڮOnmme2ǏoS @ ئ|w?Y7ܬS;;~`8}tYYYccCƌ3tPBu(PCCCjjw:=ztL&> X,Tz &P|=?/G eZm222˥RCor'@!o_IENDB`shoelaces-1.3.2+ds/docs/shoelaces.8.scd000066400000000000000000000064061444014657400176430ustar00rootroot00000000000000shoelaces(8) # NAME shoelaces - automated server bootstrapping # SYNOPSIS *shoelaces* [options...] # OPTIONS *-base-url* Optional parameter. Specifies the base address that will be used when generating URLs. If it's not specified, the value of "-bind-addr" will be used. *-bind-addr* The address where Shoelaces will listen for requests. Defaults to "localhost:8081". *-config* Specifies a config file. All the following options can be specified in the config. *-data-dir* Specifies a directory with mappings, configs, templates, etc. *-debug* Enables debug mode. *-env-dir* Specifies a directory with environment overrides. Refer to the README of the project for more information about environment overrides. *-mappings-file* Specifies a mappings YAML file. Defaults to "mappings.yaml". Refer to the README of the project for more information about mappings. *-static-dir* Specifies a custom web directory with static files. Defaults to "web". *-template-extension* Shoelaces template extension. Defaults to ".slc". # DESCRIPTION Shoelaces serves over HTTP iPXE boot scripts, cloud-init configuration, and any other configuration files to baremetal or virtual machines booting using iPXE. It also does a few other things to make easier managing server deployments: - Has a simple but nice UI to show the current configuration, and history of servers that booted. - Uses Go templates to handle complex configurations. - Allows specifying the boot entry point for a given server based on its IP address or DNS PTR record. - Supports the notion of environments for Development and Production environment configurations, while trying to minimize template duplication. - Puts unknown servers into iPXE script boot retry loop, while at the same time showing them in the UI allowing the user to select a specific boot configuration. Shoelaces is better when used along a DHCP server. Refer to the *CONFIGURATION* section for examples on how to configure a DHCP server for hooking it with Shoelaces. # CONFIGURATION Shoelaces searches for a config file whenever the *-config* flag is specified. Here is example config file: ``` bind-addr=localhost:8081 data-dir=/etc/shoelaces/data-dir/ template-extension=.slc mappings-file=mappings.yaml debug=true ``` *dhcpd*(8) can be hooked with Shoelaces by adding the following snippet in *dhcpd.conf*(5): ``` # dhcp.conf next-server ; if exists user-class and option user-class = "iPXE" { filename "http:///start"; } else { filename "undionly.kpxe"; } ``` Similarly, *dnsmasq*(8) can be configured for working with Shoelaces with the following snippet: ``` dhcp-match=set:ipxe,175 # iPXE sends a 175 option. dhcp-boot=tag:!ipxe,undionly.kpxe dhcp-boot=http:///start ``` A TFTP server such as *tftpd*(8) must be configured to serve the iPXE executable, *undionly.kpxe*. # SEE ALSO *dhcpd*(8) *dhcpd.conf*(5) *dnsmasq*(8) *tftpd*(8) # AUTHORS Maintained by ThousandEyes Inc. . Up-to-date sources can be found at https://github.com/thousandeyes/shoelaces. Bugs reports and patches can be submitted via GitHub's interface or contacting the maintainers directly via email. shoelaces-1.3.2+ds/go.mod000066400000000000000000000007671444014657400152160ustar00rootroot00000000000000module github.com/thousandeyes/shoelaces go 1.19 require ( github.com/go-kit/kit v0.12.0 github.com/gorilla/mux v1.8.0 github.com/justinas/alice v1.2.0 github.com/namsral/flag v1.7.4-pre gopkg.in/yaml.v2 v2.4.0 ) require ( github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect ) shoelaces-1.3.2+ds/go.sum000066400000000000000000000040611444014657400152320ustar00rootroot00000000000000github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/namsral/flag v1.7.4-pre h1:b2ScHhoCUkbsq0d2C15Mv+VU8bl8hAXV8arnWiOHNZs= github.com/namsral/flag v1.7.4-pre/go.mod h1:OXldTctbM6SWH1K899kPZcf65KxJiD7MsceFUpB5yDo= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= shoelaces-1.3.2+ds/internal/000077500000000000000000000000001444014657400157125ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/environment/000077500000000000000000000000001444014657400202565ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/environment/environment.go000066400000000000000000000116541444014657400231600ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package environment import ( "fmt" "html/template" "io/ioutil" "net" "os" "path" "path/filepath" "regexp" "sync" "github.com/thousandeyes/shoelaces/internal/event" "github.com/thousandeyes/shoelaces/internal/log" "github.com/thousandeyes/shoelaces/internal/mappings" "github.com/thousandeyes/shoelaces/internal/server" "github.com/thousandeyes/shoelaces/internal/templates" ) // Environment struct holds the shoelaces instance global data. type Environment struct { ConfigFile string HostnameMaps []mappings.HostnameMap NetworkMaps []mappings.NetworkMap ServerStates *server.States EventLog *event.Log ParamsBlacklist []string Templates *templates.ShoelacesTemplates // Dynamic slc templates StaticTemplates *template.Template // Static Templates Environments []string // Valid config environments Logger log.Logger BindAddr string BaseURL string DataDir string StaticDir string EnvDir string TemplateExtension string MappingsFile string Debug bool } // New returns an initialized environment structure func New() *Environment { env := defaultEnvironment() env.setFlags() env.validateFlags() if env.Debug { env.Logger = log.AllowDebug(env.Logger) } if env.BaseURL == "" { env.BaseURL = env.BindAddr } env.Environments = env.initEnvOverrides() env.EventLog = &event.Log{} env.Logger.Info("component", "environment", "msg", "Override found", "environment", env.Environments) mappingsPath := path.Join(env.DataDir, env.MappingsFile) if err := env.initMappings(mappingsPath); err != nil { panic(err) } env.initStaticTemplates() env.Templates.ParseTemplates(env.Logger, env.DataDir, env.EnvDir, env.Environments, env.TemplateExtension) server.StartStateCleaner(env.Logger, env.ServerStates) return env } func defaultEnvironment() *Environment { env := &Environment{} env.NetworkMaps = make([]mappings.NetworkMap, 0) env.HostnameMaps = make([]mappings.HostnameMap, 0) env.ServerStates = &server.States{sync.RWMutex{}, make(map[string]*server.State)} env.ParamsBlacklist = []string{"baseURL"} env.Templates = templates.New() env.Environments = make([]string, 0) env.Logger = log.MakeLogger(os.Stdout) return env } func (env *Environment) initStaticTemplates() { staticTemplates := []string{ path.Join(env.StaticDir, "templates/html/header.html"), path.Join(env.StaticDir, "templates/html/index.html"), path.Join(env.StaticDir, "templates/html/events.html"), path.Join(env.StaticDir, "templates/html/mappings.html"), path.Join(env.StaticDir, "templates/html/footer.html"), } fmt.Println(env.StaticDir) for _, t := range staticTemplates { if _, err := os.Stat(t); err != nil { env.Logger.Error("component", "environment", "msg", "Template does not exists!", "environment", t) os.Exit(1) } } env.StaticTemplates = template.Must(template.ParseFiles(staticTemplates...)) } func (env *Environment) initEnvOverrides() []string { var environments = make([]string, 0) envPath := filepath.Join(env.DataDir, env.EnvDir) files, err := ioutil.ReadDir(envPath) if err == nil { for _, f := range files { if f.IsDir() { environments = append(environments, f.Name()) } } } return environments } func (env *Environment) initMappings(mappingsPath string) error { configMappings := mappings.ParseYamlMappings(env.Logger, mappingsPath) for _, configNetMap := range configMappings.NetworkMaps { _, ipnet, err := net.ParseCIDR(configNetMap.Network) if err != nil { return err } netMap := mappings.NetworkMap{Network: ipnet, Script: initScript(configNetMap.Script)} env.NetworkMaps = append(env.NetworkMaps, netMap) } for _, configHostMap := range configMappings.HostnameMaps { regex, err := regexp.Compile(configHostMap.Hostname) if err != nil { return err } hostMap := mappings.HostnameMap{Hostname: regex, Script: initScript(configHostMap.Script)} env.HostnameMaps = append(env.HostnameMaps, hostMap) } return nil } func initScript(configScript mappings.YamlScript) *mappings.Script { mappingScript := &mappings.Script{ Name: configScript.Name, Environment: configScript.Environment, Params: make(map[string]interface{}), } for key := range configScript.Params { mappingScript.Params[key] = configScript.Params[key] } return mappingScript } shoelaces-1.3.2+ds/internal/environment/environment_test.go000066400000000000000000000032701444014657400242120ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package environment import ( "testing" "github.com/thousandeyes/shoelaces/internal/mappings" ) func TestDefaultEnvironment(t *testing.T) { env := defaultEnvironment() if env.BaseURL != "" { t.Error("BaseURL should be empty string if instantiated directly.") } if len(env.HostnameMaps) != 0 { t.Error("Hostname mappings should be empty") } if len(env.NetworkMaps) != 0 { t.Error("Network mappings should be empty") } if len(env.ParamsBlacklist) != 1 && env.ParamsBlacklist[0] != "baseURL" { t.Error("ParamsBlacklist should have only baseURL") } } func TestInitScript(t *testing.T) { params := make(map[string]string) params["one"] = "one_value" configScript := mappings.YamlScript{Name: "testscript", Params: params} mappingScript := initScript(configScript) if mappingScript.Name != "testscript" { t.Errorf("Expected: %s\nGot: %s\n", "testscript", mappingScript.Name) } val, ok := mappingScript.Params["one"] if !ok { t.Error("Missing param") } else { v, ok := val.(string) if !ok { t.Error("Bad value type") } else { if v != "one_value" { t.Error("Bad value") } } } } shoelaces-1.3.2+ds/internal/environment/flags.go000066400000000000000000000037341444014657400217100ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package environment import ( "fmt" "os" "github.com/namsral/flag" ) func (env *Environment) setFlags() { flag.StringVar(&env.ConfigFile, "config", "", "My config file") flag.StringVar(&env.BindAddr, "bind-addr", "localhost:8081", "The address where I'm going to listen") flag.StringVar(&env.BaseURL, "base-url", "", "The base shoelaces URL. If it's not defined, it will default to bind-addr.") flag.StringVar(&env.DataDir, "data-dir", "", "Directory with mappings, configs, templates, etc.") flag.StringVar(&env.StaticDir, "static-dir", "web", "A custom web directory with static files") flag.StringVar(&env.EnvDir, "env-dir", "env_overrides", "Directory with overrides") flag.StringVar(&env.TemplateExtension, "template-extension", ".slc", "Shoelaces template extension") flag.StringVar(&env.MappingsFile, "mappings-file", "mappings.yaml", "My mappings YAML file") flag.BoolVar(&env.Debug, "debug", false, "Debug mode") flag.Parse() } func (env *Environment) validateFlags() { error := false if env.DataDir == "" { fmt.Println("[*] You must specify the data-dir parameter") error = true } if env.StaticDir == "" { fmt.Println("[*] You must specify the data-dir parameter") error = true } if error { fmt.Println("\nAvailable parameters:") flag.PrintDefaults() fmt.Println("\nParameters can be specified as environment variables, arguments or in a config file.") os.Exit(1) } } shoelaces-1.3.2+ds/internal/event/000077500000000000000000000000001444014657400170335ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/event/event.go000066400000000000000000000062431444014657400205100ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package event import ( "encoding/json" "time" "github.com/thousandeyes/shoelaces/internal/server" ) // Type holds the different typs of events type Type int const ( // HostPoll is the event generated when a host poll Shoelaces for a script HostPoll Type = 0 // UserSelection is the event generated when a user selects a script and hits "Boot!" UserSelection Type = 1 // HostBoot is the event generated when a host finally boots HostBoot Type = 2 // HostTimeout is the event generated when a host polls and after some // minutes without activity, timeouts. HostTimeout Type = 3 // PtrMatchBoot is triggered when a PTR is matched to an IP PtrMatchBoot = "DNS Match" // SubnetMatchBoot is triggered when an IP matches a subnet mapping SubnetMatchBoot = "Subnet Match" // ManualBoot is triggered when the user selects manual boot ManualBoot = "Manual" ) // Event holds information related to the interactions of hosts when they boot. // It's used exclusively in the Shoelaces web frontend. type Event struct { Type Type `json:"eventType"` Date time.Time `json:"date"` Server server.Server `json:"server"` BootType string `json:"bootType"` Script string `json:"script"` Message string `json:"message"` Params map[string]interface{} `json:"params"` } // Log holds the events log type Log struct { Events map[string][]Event } // New creates a new Event object func New(eventType Type, srv server.Server, bootType, script string, params map[string]interface{}) Event { var event Event event.Type = eventType event.Date = time.Now() event.Server = srv event.BootType = bootType event.Script = script event.Params = params event.setMessage() return event } func (e *Event) setMessage() { switch e.Type { case HostPoll: e.Message = "Host " + e.Server.Hostname + " polled for a script." case UserSelection: e.Message = "A user selected " + e.Script + " for the host " + e.Server.Hostname + "." case HostBoot: params, _ := json.Marshal(e.Params) e.Message = "Host " + e.Server.Hostname + " booted using " + e.BootType + " method with the following parameters: " + string(params) case HostTimeout: e.Message = "Host " + e.Server.Hostname + " timed out." } } // AddEvent adds an Event into the event log func (el *Log) AddEvent(eventType Type, srv server.Server, bootType string, script string, params map[string]interface{}) { if el.Events == nil { el.Events = make(map[string][]Event) } el.Events[srv.Mac] = append(el.Events[srv.Mac], New(eventType, srv, bootType, script, params)) } shoelaces-1.3.2+ds/internal/event/event_test.go000066400000000000000000000046071444014657400215510ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package event import ( "encoding/json" "testing" "time" "github.com/thousandeyes/shoelaces/internal/server" ) const expectedEvent = `{"eventType":0,"date":"1970-01-01T00:00:00Z","server":{"Mac":"","IP":"","Hostname":"test_host"},"bootType":"Manual","script":"freebsd.ipxe","message":"","params":{"baseURL":"localhost:8080","cloudconfig":"virtual","hostname":"","version":"12345"}}` func TestNew(t *testing.T) { event := New(HostPoll, server.Server{Mac: "", IP: "", Hostname: "test_host"}, PtrMatchBoot, "msdos.ipxe", map[string]interface{}{"test": "testParam"}) if event.Type != HostPoll { t.Errorf("Expected: \"%d\"\nGot: \"%d\"", HostPoll, event.Type) } if event.Server.Hostname != "test_host" { t.Errorf("Expected: \"test_host\"\nGot: \"%s\"", event.Server.Hostname) } if event.BootType != PtrMatchBoot { t.Errorf("Expected: \"%s\"\nGot: \"%s\"", PtrMatchBoot, event.Server.Hostname) } if event.Script != "msdos.ipxe" { t.Errorf("Expected: \"msdos.ipxe\"\nGot: \"%s\"", event.Server.Hostname) } if len(event.Params) != 1 { t.Error("Expected one parameter") } if event.Params["test"] != "testParam" { t.Error("Expected parameter test: testParam") } now := time.Now() if event.Date.After(now) { t.Errorf("Expected %s to be after %s", event.Date, now) } } func TestEventMarshalJSON(t *testing.T) { event := Event{ Type: HostPoll, Date: time.Unix(0, 0).UTC(), Server: server.Server{Mac: "", IP: "", Hostname: "test_host"}, BootType: ManualBoot, Script: "freebsd.ipxe", Message: "", Params: map[string]interface{}{ "baseURL": "localhost:8080", "cloudconfig": "virtual", "hostname": "", "version": "12345", }, } marshaled, _ := json.Marshal(event) if string(marshaled) != expectedEvent { t.Errorf("Expected %s\nGot: %s\n", expectedEvent, marshaled) } } shoelaces-1.3.2+ds/internal/handlers/000077500000000000000000000000001444014657400175125ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/handlers/common.go000066400000000000000000000044311444014657400213330ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "html/template" "net/http" "github.com/thousandeyes/shoelaces/internal/environment" "github.com/thousandeyes/shoelaces/internal/ipxe" "github.com/thousandeyes/shoelaces/internal/mappings" ) // DefaultTemplateRenderer holds information for rendering a template based // on its name. It implements the http.Handler interface. type DefaultTemplateRenderer struct { templateName string } // RenderDefaultTemplate renders a template by the given name func RenderDefaultTemplate(name string) *DefaultTemplateRenderer { return &DefaultTemplateRenderer{templateName: name} } func (t *DefaultTemplateRenderer) ServeHTTP(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) tpl := env.StaticTemplates // XXX: Probably not ideal as it's doing the directory listing on every request ipxeScripts := ipxe.ScriptList(env) tplVars := struct { BaseURL string HostnameMaps *[]mappings.HostnameMap NetworkMaps *[]mappings.NetworkMap Scripts *[]ipxe.Script }{ env.BaseURL, &env.HostnameMaps, &env.NetworkMaps, &ipxeScripts, } renderTemplate(w, tpl, "header", tplVars) renderTemplate(w, tpl, t.templateName, tplVars) renderTemplate(w, tpl, "footer", tplVars) } func renderTemplate(w http.ResponseWriter, tpl *template.Template, tmpl string, d interface{}) { err := tpl.ExecuteTemplate(w, tmpl, d) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func envFromRequest(r *http.Request) *environment.Environment { return r.Context().Value(ShoelacesEnvCtxID).(*environment.Environment) } func envNameFromRequest(r *http.Request) string { e := r.Context().Value(ShoelacesEnvNameCtxID) if e != nil { return e.(string) } return "" } shoelaces-1.3.2+ds/internal/handlers/events.go000066400000000000000000000021321444014657400213430ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "encoding/json" "net/http" "os" ) // ListEvents returns a JSON list of the logged events. func ListEvents(w http.ResponseWriter, r *http.Request) { // Get Environment and convert the EventLog to JSON env := envFromRequest(r) eventList, err := json.Marshal(env.EventLog.Events) if err != nil { env.Logger.Error("component", "handler", "err", err) os.Exit(1) } //Write the EventLog and send the HTTP response w.Header().Set("Content-Type", "application/json") w.Write(eventList) } shoelaces-1.3.2+ds/internal/handlers/ipxemenu.go000066400000000000000000000034671444014657400217050ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "bytes" "fmt" "net/http" "github.com/thousandeyes/shoelaces/internal/ipxe" ) const menuHeader = "#!ipxe\n" + "menu Choose target to boot\n" const menuFooter = "\n" + "choose target\n" + "echo -n Enter hostname or none:\n" + "read hostname\n" + "set baseurl %s\n" + "# Boot it as intended.\n" + "chain ${target}\n" // IPXEMenu serves the ipxe menu with list of all available scripts func IPXEMenu(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) scripts := ipxe.ScriptList(env) if len(scripts) == 0 { http.Error(w, "No Scripts Found", http.StatusInternalServerError) return } var bootItemsBuffer bytes.Buffer //Creates the top portion of the iPXE menu bootItemsBuffer.WriteString(menuHeader) for _, s := range scripts { //Formats the bootable scripts separated by newlines into a single string var desc string if len(s.Env) > 0 { desc = fmt.Sprintf("%s [%s]", s.Name, s.Env) } else { desc = string(s.Name) } bootItem := fmt.Sprintf("item %s%s %s\n", s.Path, s.Name, desc) bootItemsBuffer.WriteString(bootItem) } //Creates the bottom portion of the iPXE menu bootItemsBuffer.WriteString(fmt.Sprintf(menuFooter, env.BaseURL)) w.Write(bootItemsBuffer.Bytes()) } shoelaces-1.3.2+ds/internal/handlers/middleware.go000066400000000000000000000070071444014657400221620ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "context" "github.com/justinas/alice" "net/http" "regexp" "github.com/thousandeyes/shoelaces/internal/environment" ) // ShoelacesCtxID Shoelaces Specific Request Context ID. type ShoelacesCtxID int // ShoelacesEnvCtxID is the context id key for the shoelaces.Environment. const ShoelacesEnvCtxID ShoelacesCtxID = 0 // ShoelacesEnvNameCtxID is the context ID key for the chosen environment. const ShoelacesEnvNameCtxID ShoelacesCtxID = 1 var envRe = regexp.MustCompile(`^(:?/env\/([a-zA-Z0-9_-]+))?(\/.*)`) // environmentMiddleware Rewrites the URL in case it was an environment // specific and sets the environment in the context. func environmentMiddleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var reqEnv string m := envRe.FindStringSubmatch(r.URL.Path) if len(m) > 0 && m[2] != "" { r.URL.Path = m[3] reqEnv = m[2] } ctx := context.WithValue(r.Context(), ShoelacesEnvNameCtxID, reqEnv) h.ServeHTTP(w, r.WithContext(ctx)) }) } // loggingMiddleware adds an entry to the logger each time the HTTP service // receives a request. func loggingMiddleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { logger := envFromRequest(r).Logger logger.Info("component", "http", "type", "request", "src", r.RemoteAddr, "method", r.Method, "url", r.URL) h.ServeHTTP(w, r) }) } // SecureHeaders adds secure headers to the responses func secureHeadersMiddleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Add X-XSS-Protection header w.Header().Add("X-XSS-Protection", "1; mode=block") // Add X-Content-Type-Options header w.Header().Add("X-Content-Type-Options", "nosniff") // Prevent page from being displayed in an iframe w.Header().Add("X-Frame-Options", "DENY") // Prevent page from being displayed in an iframe w.Header().Add("Content-Security-Policy", "script-src 'self'") h.ServeHTTP(w, r) }) } // disableCacheMiddleware sets a header for disabling HTTP caching func disableCacheMiddleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Add("Cache-Control", "no-cache, no-store, must-revalidate") h.ServeHTTP(w, r) }) } // MiddlewareChain receives a Shoelaces environment and returns a chains of // middlewares to apply to every request. func MiddlewareChain(env *environment.Environment) alice.Chain { // contextMiddleware sets the environment key in the request Context. contextMiddleware := func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := context.WithValue(r.Context(), ShoelacesEnvCtxID, env) h.ServeHTTP(w, r.WithContext(ctx)) }) } return alice.New( secureHeadersMiddleware, disableCacheMiddleware, environmentMiddleware, contextMiddleware, loggingMiddleware) } shoelaces-1.3.2+ds/internal/handlers/polling.go000066400000000000000000000113441444014657400215100ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "encoding/json" "fmt" "net" "net/http" "os" "github.com/gorilla/mux" "github.com/thousandeyes/shoelaces/internal/log" "github.com/thousandeyes/shoelaces/internal/polling" "github.com/thousandeyes/shoelaces/internal/server" "github.com/thousandeyes/shoelaces/internal/utils" ) // StartPollingHandler is called by iPXE boot agents. It returns the poll script. func StartPollingHandler(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) script := polling.GenStartScript(env.Logger, env.BaseURL) w.Write([]byte(script)) } // PollHandler is called by iPXE boot agents. It returns the boot script // specified on the configuration or, if the host is unknown, it makes it // retry for a while until the user specifies alternative IPXE boot script. func PollHandler(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) ip, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } vars := mux.Vars(r) // iPXE MAC addresses come with dashes instead of colons mac := utils.MacDashToColon(vars["mac"]) host := r.FormValue("host") err = validateMACAndIP(env.Logger, mac, ip) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if host == "" { host = resolveHostname(env.Logger, ip) } server := server.New(mac, ip, host) script, err := polling.Poll( env.Logger, env.ServerStates, env.HostnameMaps, env.NetworkMaps, env.EventLog, env.Templates, env.BaseURL, server) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write([]byte(script)) } // ServerListHandler provides a list of the servers that tried to boot // but did not match the hostname regex or network mappings. func ServerListHandler(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) servers, err := json.Marshal(polling.ListServers(env.ServerStates)) if err != nil { env.Logger.Error("component", "handler", "err", err) os.Exit(1) } w.Header().Set("Content-Type", "application/json") w.Write(servers) } // UpdateTargetHandler is a POST endpoint that receives parameters for // booting manually. func UpdateTargetHandler(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) ip, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if err := r.ParseForm(); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } mac, scriptName, environment, params := parsePostForm(r.PostForm) if mac == "" || scriptName == "" { http.Error(w, "MAC address and target must not be empty", http.StatusBadRequest) return } server := server.New(mac, ip, "") inputErr, err := polling.UpdateTarget( env.Logger, env.ServerStates, env.Templates, env.EventLog, env.BaseURL, server, scriptName, environment, params) if err != nil { if inputErr { http.Error(w, err.Error(), http.StatusBadRequest) } else { http.Error(w, err.Error(), http.StatusInternalServerError) } return } http.Redirect(w, r, "/", http.StatusFound) } func parsePostForm(form map[string][]string) (mac, scriptName, environment string, params map[string]interface{}) { params = make(map[string]interface{}) for k, v := range form { if k == "mac" { mac = utils.MacDashToColon(v[0]) } else if k == "target" { scriptName = v[0] } else if k == "environment" { environment = v[0] } else { params[k] = v[0] } } return } func validateMACAndIP(logger log.Logger, mac string, ip string) (err error) { if !utils.IsValidMAC(mac) { logger.Error("component", "polling", "msg", "Invalid MAC", "mac", mac) return fmt.Errorf("%s", "Invalid MAC") } if !utils.IsValidIP(ip) { logger.Error("component", "polling", "msg", "Invalid IP", "ip", ip) return fmt.Errorf("%s", "Invalid IP") } logger.Debug("component", "polling", "msg", "MAC and IP validated", "mac", mac, "ip", ip) return nil } func resolveHostname(logger log.Logger, ip string) string { host := utils.ResolveHostname(ip) if host == "" { logger.Info("component", "polling", "msg", "Can't resolve IP", "ip", ip) } return host } shoelaces-1.3.2+ds/internal/handlers/static.go000066400000000000000000000065041444014657400213350ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "fmt" "io/ioutil" "net/http" "os" "path" "path/filepath" "sort" ) // StaticConfigFileHandler handles static config files type StaticConfigFileHandler struct{} func (s *StaticConfigFileHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { env := envFromRequest(r) envName := envNameFromRequest(r) basePath := path.Join(env.DataDir, "static") if envName == "" { http.FileServer(http.Dir(basePath)).ServeHTTP(w, r) return } envPath := filepath.Join(env.DataDir, env.EnvDir, envName, "static") OverlayFileServer(envPath, basePath).ServeHTTP(w, r) } // StaticConfigFileServer returns a StaticConfigFileHandler instance implementing http.Handler func StaticConfigFileServer() *StaticConfigFileHandler { return &StaticConfigFileHandler{} } // OverlayFileServerHandler handles request for overlayer directories type OverlayFileServerHandler struct { upper string lower string } // OverlayFileServer serves static content from two overlayed directories func OverlayFileServer(upper, lower string) *OverlayFileServerHandler { return &OverlayFileServerHandler{ upper: upper, lower: lower, } } func (o *OverlayFileServerHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fp := filepath.Clean(r.URL.Path) upper := filepath.Clean(path.Join(o.upper, fp)) lower := filepath.Clean(path.Join(o.lower, fp)) // TODO: try to avoid stat()-ing both if not necessary infoUpper, errUpper := os.Stat(upper) infoLower, errLower := os.Stat(lower) // If both upper and lower files/dirs do not exist, return 404 if errUpper != nil && os.IsNotExist(errUpper) && errLower != nil && os.IsNotExist(errLower) { http.NotFound(w, r) return } isDir := false fileList := make(map[string]os.FileInfo) if errUpper == nil && infoUpper.IsDir() { files, _ := ioutil.ReadDir(upper) for _, f := range files { fileList[f.Name()] = f } isDir = true } if errLower == nil && infoLower.IsDir() { files, _ := ioutil.ReadDir(lower) for _, f := range files { if _, ok := fileList[f.Name()]; !ok { fileList[f.Name()] = f } } isDir = true } // Generate HTML directory index if isDir { fileListIndex := []string{} for i := range fileList { fileListIndex = append(fileListIndex, i) } sort.Strings(fileListIndex) w.Write([]byte("

\n"))
		for _, i := range fileListIndex {
			f := fileList[i]
			name := f.Name()
			if f.IsDir() {
				name = name + "/"
			}
			l := fmt.Sprintf("%s\n", name, name)
			w.Write([]byte(l))
		}
		w.Write([]byte("
\n")) return } // Serve the file from the upper layer if it exists. if errUpper == nil { http.ServeFile(w, r, upper) // If not serve it from the lower } else if errLower == nil { http.ServeFile(w, r, lower) } http.NotFound(w, r) } shoelaces-1.3.2+ds/internal/handlers/templates.go000066400000000000000000000050731444014657400220440ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package handlers import ( "encoding/json" "io" "net/http" "path/filepath" "github.com/thousandeyes/shoelaces/internal/utils" ) // TemplateHandler handles templated config files type TemplateHandler struct{} // TemplateHandler is the dynamic configuration provider endpoint. It // receives a key and maybe an environment. func (t *TemplateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { variablesMap := map[string]interface{}{} configName := filepath.Clean(r.URL.Path) if configName == "" { http.Error(w, "No template name provided", http.StatusNotFound) return } for key, val := range r.URL.Query() { variablesMap[key] = val[0] } env := envFromRequest(r) envName := envNameFromRequest(r) variablesMap["baseURL"] = utils.BaseURLforEnvName(env.BaseURL, envName) configString, err := env.Templates.RenderTemplate(env.Logger, configName, variablesMap, envName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } else { io.WriteString(w, configString) } } // TemplateHandler returns a TemplateHandler instance implementing http.Handler func TemplateServer() *TemplateHandler { return &TemplateHandler{} } // GetTemplateParams receives a script name and returns the parameters // required for completing that template. func GetTemplateParams(w http.ResponseWriter, r *http.Request) { var vars []string env := envFromRequest(r) filterBlacklist := func(s string) bool { return !utils.StringInSlice(s, env.ParamsBlacklist) } script := r.URL.Query().Get("script") if script == "" { http.Error(w, "Required script parameter", http.StatusInternalServerError) return } envName := r.URL.Query().Get("environment") if envName == "" { envName = "default" } vars = utils.Filter(env.Templates.ListVariables(script, envName), filterBlacklist) marshaled, err := json.Marshal(vars) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.Write(marshaled) } shoelaces-1.3.2+ds/internal/ipxe/000077500000000000000000000000001444014657400166575ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/ipxe/ipxescript.go000066400000000000000000000053421444014657400214040ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package ipxe import ( "io/ioutil" "path/filepath" "strings" "github.com/thousandeyes/shoelaces/internal/environment" "github.com/thousandeyes/shoelaces/internal/log" ) // ScriptName keeps the name of a script type ScriptName string // EnvName holds the name of an environment type EnvName string // ScriptPath holds the path of a script type ScriptPath string // Script holds information regarding an IPXE script. type Script struct { Name ScriptName Env EnvName Path ScriptPath } // ScriptList receives the global environment and return a list of IPXE // scripts. func ScriptList(env *environment.Environment) []Script { ipxeScripts := make([]Script, 0) // Collect scripts from the main config dir. ipxeScripts = appendScriptsFromDir(env.Logger, ipxeScripts, env.TemplateExtension, filepath.Join(env.DataDir, "ipxe"), "", "/configs/") // Collect scripts from the config environments if any if len(env.Environments) > 0 { for _, e := range env.Environments { ep := filepath.Join(env.DataDir, env.EnvDir, e, "ipxe") ipxeScripts = appendScriptsFromDir(env.Logger, ipxeScripts, env.TemplateExtension, ep, EnvName(e), ScriptPath("/env/"+e+"/configs/")) } } return ipxeScripts } func appendScriptsFromDir(logger log.Logger, scripts []Script, templateExtension string, dir string, e EnvName, p ScriptPath) []Script { for _, s := range scriptDirList(logger, templateExtension, dir) { scripts = append(scripts, Script{Name: s, Env: e, Path: p}) } return scripts } // scriptDirList returns the names of all available ipxe script templates func scriptDirList(logger log.Logger, templateExtension string, datadir string) []ScriptName { files, err := ioutil.ReadDir(datadir) if err != nil { logger.Info("component=ipxescript action=dir-list dir=%s err=\"%v\"", datadir, err.Error()) return nil } ipxeSuffix := ".ipxe" suffix := ipxeSuffix + templateExtension var pxeFiles []ScriptName for _, f := range files { // Skip over directories and non-template files. if f.IsDir() || !strings.HasSuffix(f.Name(), suffix) { continue } pxeFiles = append(pxeFiles, ScriptName(strings.TrimSuffix(f.Name(), templateExtension))) } return pxeFiles } shoelaces-1.3.2+ds/internal/log/000077500000000000000000000000001444014657400164735ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/log/log.go000066400000000000000000000034561444014657400176130ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package log import ( "io" "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" ) // Logger struct holds a log.Logger plus functions required for logging // with different levels. They functions are syntactic sugar to avoid // having to import "github.com/go-kit/kit/log/level" in every package that // has to cast a log. type Logger struct { Raw log.Logger Info func(...interface{}) error Debug func(...interface{}) error Error func(...interface{}) error } const callerLevel int = 6 // MakeLogger receives a io.Writer and return a Logger struct. func MakeLogger(w io.Writer) Logger { raw := log.NewLogfmtLogger(log.NewSyncWriter(w)) raw = log.With(raw, "ts", log.DefaultTimestampUTC, "caller", log.Caller(callerLevel)) filtered := level.NewFilter(raw, level.AllowInfo()) return Logger{ Raw: raw, Info: level.Info(filtered).Log, Debug: level.Debug(filtered).Log, Error: level.Error(filtered).Log, } } // AllowDebug receives a Logger and enables the debug logging level. func AllowDebug(l Logger) Logger { filtered := level.NewFilter(l.Raw, level.AllowDebug()) return Logger{ Raw: l.Raw, Info: level.Info(filtered).Log, Debug: level.Debug(filtered).Log, Error: level.Error(filtered).Log, } } shoelaces-1.3.2+ds/internal/mappings/000077500000000000000000000000001444014657400175305ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/mappings/mappings.go000066400000000000000000000043151444014657400217000ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mappings import ( "net" "regexp" "strings" ) // Script holds information related to a booting script. type Script struct { Name string Environment string Params map[string]interface{} } // NetworkMap struct contains an association between a CIDR network and a // Script. type NetworkMap struct { Network *net.IPNet Script *Script } // HostnameMap struct contains an association between a hostname regular // expression and a Script. type HostnameMap struct { Hostname *regexp.Regexp Script *Script } // FindScriptForHostname receives a HostnameMap and a string (that can be a // regular expression), and tries to find a match in that map. If it finds // a match, it returns the associated script. func FindScriptForHostname(maps []HostnameMap, hostname string) (script *Script, ok bool) { for _, m := range maps { if m.Hostname.MatchString(hostname) { return m.Script, true } } return nil, false } // FindScriptForNetwork receives a NetworkMap and an IP and tries to see if // that IP belongs to any of the configured networks. If it finds a match, // it returns the associated script. func FindScriptForNetwork(maps []NetworkMap, ip string) (script *Script, ok bool) { for _, m := range maps { if m.Network.Contains(net.ParseIP(ip)) { return m.Script, true } } return nil, false } func (s Script) String() string { var result = s.Name + " : { " elems := []string{} if s.Environment != "" { elems = append(elems, "environment: "+s.Environment) } for key, value := range s.Params { elems = append(elems, key+": "+value.(string)) } result += strings.Join(elems, ", ") + " }" return result } shoelaces-1.3.2+ds/internal/mappings/mappings_test.go000066400000000000000000000060411444014657400227350ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mappings import ( "net" "regexp" "testing" ) var ( mockScriptParams1 = map[string]interface{}{ "param11": "param1_value1", "param21": "param2_value1", } mockScriptParams2 = map[string]interface{}{ "param12": "param1_value2", "param22": "param2_value2", } mockScript1 = Script{Name: "mock_script1", Params: mockScriptParams1} mockScript2 = Script{Name: "mock_script2", Params: mockScriptParams2} mockRegex1, _ = regexp.Compile("mock_host1") mockRegex2, _ = regexp.Compile("mock_host2") mockHostNameMap1 = HostnameMap{ Hostname: mockRegex1, Script: &mockScript1, } mockHostNameMap2 = HostnameMap{ Hostname: mockRegex2, Script: &mockScript2, } _, mockNetwork1, _ = net.ParseCIDR("10.0.0.0/8") _, mockNetwork2, _ = net.ParseCIDR("192.168.0.0/16") mockNetworkMap1 = NetworkMap{ Network: mockNetwork1, Script: &mockScript1, } mockNetworkMap2 = NetworkMap{ Network: mockNetwork2, Script: &mockScript2, } ) func TestScript(t *testing.T) { expected1 := "mock_script1 : { param11: param1_value1, param21: param2_value1 }" expected2 := "mock_script1 : { param21: param2_value1, param11: param1_value1 }" mockScriptString := mockScript1.String() if mockScriptString != expected1 && mockScriptString != expected2 { t.Errorf("Expected: %s or %s\nGot: %s\n", expected1, expected2, mockScriptString) } } func TestFindScriptForHostname(t *testing.T) { maps := []HostnameMap{mockHostNameMap1, mockHostNameMap2} script, success := FindScriptForHostname(maps, "mock_host1") if !(script.Name == "mock_script1" && success) { t.Error("Hostname should have matched") } script, success = FindScriptForHostname(maps, "mock_host2") if !(script.Name == "mock_script2" && success) { t.Error("Hostname should have matched") } script, success = FindScriptForHostname(maps, "mock_host_bad") if !(script == nil && !success) { t.Error("Hostname should have not matched") } } func TestScriptForNetwork(t *testing.T) { maps := []NetworkMap{mockNetworkMap1, mockNetworkMap2} script, success := FindScriptForNetwork(maps, "10.0.0.1") if !(script.Name == "mock_script1" && success) { t.Error("IP should have matched the network map") } script, success = FindScriptForNetwork(maps, "192.168.0.1") if !(script.Name == "mock_script2" && success) { t.Error("IP should have matched the network map") } script, success = FindScriptForNetwork(maps, "8.8.8.8") if !(script == nil && !success) { t.Error("IP shouildn't have matched the network map") } } shoelaces-1.3.2+ds/internal/mappings/parse.go000066400000000000000000000043251444014657400211750ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mappings import ( "io/ioutil" "os" "gopkg.in/yaml.v2" "github.com/thousandeyes/shoelaces/internal/log" ) // Mappings struct contains YamlNetworkMaps and YamlHostnameMaps. type Mappings struct { NetworkMaps []YamlNetworkMap `yaml:"networkMaps"` HostnameMaps []YamlHostnameMap `yaml:"hostnameMaps"` } // YamlNetworkMap struct contains an association between a CIDR network and a // Script. It's different than mapping.NetworkMap in the sense that this // struct can be used to parse the JSON mapping file. type YamlNetworkMap struct { Network string Script YamlScript } // YamlHostnameMap struct contains an association between a hostname regular // expression and a Script. It's different than mapping.HostnameMap in the // sense that this struct can be used to parse the JSON mapping file. type YamlHostnameMap struct { Hostname string Script YamlScript } // YamlScript holds information regarding a script. Its name, its environment // and its parameters. type YamlScript struct { Name string Environment string Params map[string]string } // ParseYamlMappings parses the mappings yaml file into a Mappings struct. func ParseYamlMappings(logger log.Logger, mappingsFile string) *Mappings { var mappings Mappings logger.Info("component", "config", "msg", "Reading mappings", "source", mappingsFile) yamlFile, err := ioutil.ReadFile(mappingsFile) if err != nil { logger.Error(err) os.Exit(1) } mappings.NetworkMaps = make([]YamlNetworkMap, 0) mappings.HostnameMaps = make([]YamlHostnameMap, 0) err = yaml.Unmarshal(yamlFile, &mappings) if err != nil { logger.Error(err) os.Exit(1) } return &mappings } shoelaces-1.3.2+ds/internal/polling/000077500000000000000000000000001444014657400173565ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/polling/polling.go000066400000000000000000000241441444014657400213560ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package polling import ( "bytes" "errors" "fmt" "sort" "text/template" "time" "github.com/thousandeyes/shoelaces/internal/event" "github.com/thousandeyes/shoelaces/internal/log" "github.com/thousandeyes/shoelaces/internal/mappings" "github.com/thousandeyes/shoelaces/internal/server" "github.com/thousandeyes/shoelaces/internal/templates" "github.com/thousandeyes/shoelaces/internal/utils" ) // ManualAction represent an action taken when no automatic boot is available. type ManualAction int const ( startScript = "#!ipxe\n" + "echo Shoelaces starts polling\n" + "chain --autofree --replace \\\n" + " http://{{.baseURL}}/poll/1/${netX/mac:hexhyp}\n" + "#\n" + "#\n" + "# Do\n" + "# curl http://{{.baseURL}}/poll/1/06-66-de-ad-be-ef\n" + "# to get an idea about what the iPXE client will receive.\n" maxRetry = 10 retryScript = "#!ipxe\n" + "prompt --key 0x02 --timeout 7000 shoelaces: Press Ctrl-B for manual override... \\\n" + " && chain -ar http://{{.baseURL}}/ipxemenu \\\n" + " || chain -ar http://{{.baseURL}}/poll/1/{{.macAddress}}\n\n" + "# Note: the iPXE client will see the above code as an endless loop.\n" + "# However, Shoelaces server can break that loop to enable further booting.\n" timeoutScript = "#!ipxe\n" + "echo\n" + "echo Shoelaces reached the maximum number of retries\n" + "exit\n" // BootAction is used when a user selects a script for the polling // server. The server polls once again, so it gets the selected script // as answer. BootAction ManualAction = 0 // RetryAction is used when a server polling does not yet have a script // selected by the user, hence it has to retry. RetryAction ManualAction = 1 // TimeoutAction is used when a server polling is timing out. TimeoutAction ManualAction = 2 ) // ListServers provides a list of the servers that tried to boot // but did not match the hostname regex or network mappings. func ListServers(serverStates *server.States) server.Servers { ret := make([]server.Server, 0) serverStates.RLock() for _, s := range serverStates.Servers { if s.Target == server.InitTarget { ret = append(ret, s.Server) } } defer serverStates.RUnlock() sort.Sort(server.Servers(ret)) return ret } // UpdateTarget receives parameters for booting manually. When a host // didn't match any of the automatic methods for booting, it's going to be // put on hold. This method is called when something is finally chosen for // that host. func UpdateTarget(logger log.Logger, serverStates *server.States, templateRenderer *templates.ShoelacesTemplates, eventLog *event.Log, baseURL string, srv server.Server, scriptName string, envName string, params map[string]interface{}) (inputErr bool, err error) { if !utils.IsValidMAC(srv.Mac) { return true, errors.New("Invalid MAC") } // Test the template with user inputs setHostName(params, srv.Mac) params["baseURL"] = utils.BaseURLforEnvName(baseURL, envName) _, err = templateRenderer.RenderTemplate(logger, scriptName, params, envName) if err != nil { inputErr = true return } serverStates.Lock() defer serverStates.Unlock() servers := serverStates.Servers if servers[srv.Mac] == nil { return true, errors.New("MAC is not in the booting state") } hostname := servers[srv.Mac].Server.Hostname logger.Debug("component", "polling", "msg", "Setting server override", "server", srv.Mac, "target", scriptName, "environment", envName, "hostname", hostname, "params", params) eventLog.AddEvent(event.UserSelection, srv, "", scriptName, nil) servers[srv.Mac].Target = scriptName servers[srv.Mac].Environment = envName servers[srv.Mac].Params = params return false, nil } // Poll contains the main logic of Shoelaces. It uses several heuristics to find // the right script to return, as network maps, hostname maps and manual // selection. func Poll(logger log.Logger, serverStates *server.States, hostnameMaps []mappings.HostnameMap, networkMaps []mappings.NetworkMap, eventLog *event.Log, templateRenderer *templates.ShoelacesTemplates, baseURL string, srv server.Server) (scriptText string, err error) { script, found := attemptAutomaticBoot(logger, hostnameMaps, networkMaps, templateRenderer, eventLog, baseURL, srv) if found { return script, nil } return manualAction(logger, serverStates, templateRenderer, eventLog, baseURL, srv) } func attemptAutomaticBoot(logger log.Logger, hostnameMaps []mappings.HostnameMap, networkMaps []mappings.NetworkMap, templateRenderer *templates.ShoelacesTemplates, eventLog *event.Log, baseURL string, srv server.Server) (scriptText string, found bool) { // Find with reverse hostname matched with the hostname regexps if script, found := mappings.FindScriptForHostname(hostnameMaps, srv.Hostname); found { logger.Debug("component", "polling", "msg", "Host found", "where", "hostname-mapping", "host", srv.Hostname) eventLog.AddEvent(event.HostBoot, srv, event.PtrMatchBoot, script.Name, script.Params) script.Params["hostname"] = srv.Hostname return genBootScript(logger, templateRenderer, baseURL, script), found } logger.Debug("component", "polling", "msg", "Host not found", "where", "hostname-mapping", "host", srv.Hostname) // Find with IP belonging to a configured subnet if script, found := mappings.FindScriptForNetwork(networkMaps, srv.IP); found { logger.Debug("component", "polling", "msg", "Host found", "where", "network-mapping", "ip", srv.IP) setHostName(script.Params, srv.Mac) srv.Hostname = script.Params["hostname"].(string) eventLog.AddEvent(event.HostBoot, srv, event.SubnetMatchBoot, script.Name, script.Params) return genBootScript(logger, templateRenderer, baseURL, script), found } logger.Debug("component", "polling", "msg", "Host not found", "where", "network-mapping", "ip", srv.IP) return "", false } func manualAction(logger log.Logger, serverStates *server.States, templateRenderer *templates.ShoelacesTemplates, eventLog *event.Log, baseURL string, srv server.Server) (scriptText string, err error) { script, action := chooseManualAction(logger, serverStates, eventLog, srv) logger.Debug("component", "polling", "target-script-name", script, "action", action) switch action { case BootAction: setHostName(script.Params, srv.Mac) srv.Hostname = script.Params["hostname"].(string) eventLog.AddEvent(event.HostBoot, srv, event.ManualBoot, script.Name, script.Params) return genBootScript(logger, templateRenderer, baseURL, script), nil case RetryAction: return genRetryScript(logger, baseURL, srv.Mac), nil case TimeoutAction: return timeoutScript, nil default: logger.Info("component", "polling", "msg", "Unknown action") return "", fmt.Errorf("%s", "Unknown action") } } func chooseManualAction(logger log.Logger, serverStates *server.States, eventLog *event.Log, srv server.Server) (*mappings.Script, ManualAction) { serverStates.Lock() defer serverStates.Unlock() if m := serverStates.Servers[srv.Mac]; m != nil { if m.Target != server.InitTarget { serverStates.DeleteServer(srv.Mac) logger.Debug("component", "polling", "msg", "Server boot", "mac", srv.Mac) return &mappings.Script{ Name: m.Target, Environment: m.Environment, Params: m.Params}, BootAction } else if m.Retry <= maxRetry { m.Retry++ m.LastAccess = int(time.Now().UTC().Unix()) logger.Debug("component", "polling", "msg", "Retrying reboot", "mac", srv.Mac) return nil, RetryAction } else { serverStates.DeleteServer(srv.Mac) logger.Debug("component", "polling", "msg", "Timing out server", "mac", srv.Mac) return nil, TimeoutAction } } serverStates.AddServer(srv) logger.Debug("component", "polling", "msg", "New server", "mac", srv.Mac) eventLog.AddEvent(event.HostPoll, srv, "", "", nil) return nil, RetryAction } func setHostName(params map[string]interface{}, mac string) { if _, ok := params["hostname"]; !ok { hostname := utils.MacColonToDash(mac) if hnPrefix, ok := params["hostnamePrefix"]; ok { hnPrefixStr, isString := hnPrefix.(string) if !isString { hnPrefixStr = "" } params["hostname"] = hnPrefixStr + hostname } else { params["hostname"] = hostname } } } func GenStartScript(logger log.Logger, baseURL string) string { variablesMap := map[string]interface{}{} parsedTemplate := &bytes.Buffer{} tmpl, err := template.New("retry").Parse(startScript) if err != nil { logger.Info("component", "polling", "msg", "Error parsing start template") panic(err) } variablesMap["baseURL"] = baseURL err = tmpl.Execute(parsedTemplate, variablesMap) if err != nil { logger.Info("component", "polling", "msg", "Error executing start template") panic(err) } return parsedTemplate.String() } func genBootScript(logger log.Logger, templateRenderer *templates.ShoelacesTemplates, baseURL string, script *mappings.Script) string { script.Params["baseURL"] = utils.BaseURLforEnvName(baseURL, script.Environment) text, err := templateRenderer.RenderTemplate(logger, script.Name, script.Params, script.Environment) if err != nil { panic(err) } return text } func genRetryScript(logger log.Logger, baseURL string, mac string) string { variablesMap := map[string]interface{}{} parsedTemplate := &bytes.Buffer{} tmpl, err := template.New("retry").Parse(retryScript) if err != nil { logger.Info("component", "polling", "msg", "Error parsing retry template", "mac", mac) panic(err) } variablesMap["baseURL"] = baseURL variablesMap["macAddress"] = utils.MacColonToDash(mac) err = tmpl.Execute(parsedTemplate, variablesMap) if err != nil { logger.Info("component", "polling", "msg", "Error executing retry template", "mac", mac) panic(err) } return parsedTemplate.String() } shoelaces-1.3.2+ds/internal/router/000077500000000000000000000000001444014657400172325ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/router/router.go000066400000000000000000000055071444014657400211100ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package router import ( "net/http" "github.com/gorilla/mux" "github.com/thousandeyes/shoelaces/internal/environment" "github.com/thousandeyes/shoelaces/internal/handlers" ) // ShoelacesRouter sets up all routes and handlers for shoelaces func ShoelacesRouter(env *environment.Environment) http.Handler { r := mux.NewRouter() // Main UI page r.Handle("/", handlers.RenderDefaultTemplate("index")).Methods("GET") // Event Log History page r.Handle("/events", handlers.RenderDefaultTemplate("events")).Methods("GET") // Currently configured mappings page r.Handle("/mappings", handlers.RenderDefaultTemplate("mappings")).Methods("GET") // Static files used by the UI r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(env.StaticDir)))) // Manual boot parameters POST endpoint r.HandleFunc("/update/target", handlers.UpdateTargetHandler).Methods("POST") // Provides a list of the servers that tried to boot but did not match // the hostname regex or network mappings r.HandleFunc("/ajax/servers", handlers.ServerListHandler).Methods("GET") // Event Log History JSON endpoint r.HandleFunc("/ajax/events", handlers.ListEvents).Methods("GET") // Provides the list of possible parameters for a given template r.HandleFunc("/ajax/script/params", handlers.GetTemplateParams) // Static configuration files endpoint r.PathPrefix("/configs/static/").Handler(http.StripPrefix("/configs/static/", handlers.StaticConfigFileServer())) // Dynamic configuration endpoint r.PathPrefix("/configs/").Handler(http.StripPrefix("/configs/", handlers.TemplateServer())) // Starting point for iPXE boot agents, usualy defined by DHCP server. // Gets the iPXE boot agents into the polling loop. r.HandleFunc("/start", handlers.StartPollingHandler).Methods("GET") // Called by iPXE boot agents, returns boot script specified on the configuration // or if the host is unknown makes it retry for a while until the user specifies // alternative ipxe boot script r.HandleFunc("/poll/1/{mac}", handlers.PollHandler).Methods("GET") // Serves a generated iPXE boot script providing a selection // of all of the boot scripts available on the filesystem for that environment. r.HandleFunc("/ipxemenu", handlers.IPXEMenu).Methods("GET") return r } shoelaces-1.3.2+ds/internal/server/000077500000000000000000000000001444014657400172205ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/server/server.go000066400000000000000000000057451444014657400210700ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package server import ( "sync" "time" "github.com/thousandeyes/shoelaces/internal/log" ) const ( // InitTarget is an initial dummy target assigned to the servers InitTarget = "NOTARGET" ) // Server holds data that uniquely identifies a server type Server struct { Mac string IP string Hostname string } // Servers is an array of Server type Servers []Server // Len implementation for the sort Interface func (s Servers) Len() int { return len(s) } // Swap implementation for the sort interface func (s Servers) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // Less implementation for the Sort interface func (s Servers) Less(i, j int) bool { return s[i].Mac < s[j].Mac } // State holds information regarding a host that is attempting to boot. type State struct { Server Target string Environment string Params map[string]interface{} Retry int LastAccess int } // States holds a map between MAC addresses and // States. It provides a mutex for thread-safety. type States struct { sync.RWMutex Servers map[string]*State } // New returns a Server with is values initialized func New(mac string, ip string, hostname string) Server { return Server{ Mac: mac, IP: ip, Hostname: hostname, } } // AddServer adds a server to the States struct func (m *States) AddServer(server Server) { m.Servers[server.Mac] = &State{ Server: server, Target: InitTarget, Retry: 1, LastAccess: int(time.Now().UTC().Unix()), } } // DeleteServer deletes a server from the States struct func (m *States) DeleteServer(mac string) { delete(m.Servers, mac) } // StartStateCleaner spawns a goroutine that cleans MAC addresses that // have been inactive in Shoelaces for more than 3 minutes. func StartStateCleaner(logger log.Logger, serverStates *States) { const ( // 3 minutes expireAfterSec = 3 * 60 cleanInterval = time.Minute ) // Clean up the server states. Expire after 3 minutes go func() { for { time.Sleep(cleanInterval) servers := serverStates.Servers expire := int(time.Now().UTC().Unix()) - expireAfterSec logger.Debug("component", "polling", "msg", "Cleaning", "before", time.Unix(int64(expire), 0)) serverStates.Lock() for mac, state := range servers { if state.LastAccess <= expire { delete(servers, mac) logger.Debug("component", "polling", "msg", "Mac cleaned", "mac", mac) } } serverStates.Unlock() } }() } shoelaces-1.3.2+ds/internal/templates/000077500000000000000000000000001444014657400177105ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/templates/templates.go000066400000000000000000000167411444014657400222460ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package templates import ( "bufio" "bytes" "errors" "os" "path" "path/filepath" "regexp" "strings" "text/template" "github.com/thousandeyes/shoelaces/internal/log" "github.com/thousandeyes/shoelaces/internal/utils" ) const defaultEnvironment = "default" var varRegex = regexp.MustCompile(`{{\.(.*?)}}`) var configNameRegex = regexp.MustCompile(`{{define\s+"(.*?)".*}}`) // ShoelacesTemplates holds the core attributes for handling the dyanmic configurations // in Shoelaces. type ShoelacesTemplates struct { envTemplates map[string]shoelacesTemplateEnvironment dataDir string envDir string tplExt string } type shoelacesTemplateEnvironment struct { templateObj *template.Template templateVars map[string][]string } type shoelacesTemplateInfo struct { name string variables []string } // New creates and initializes a new ShoelacesTemplates instance a returns a pointer to // it. func New() *ShoelacesTemplates { e := make(map[string]shoelacesTemplateEnvironment) e[defaultEnvironment] = shoelacesTemplateEnvironment{ templateObj: template.New(""), templateVars: make(map[string][]string), } return &ShoelacesTemplates{envTemplates: e} } func (s *ShoelacesTemplates) parseTemplateInfo(logger log.Logger, path string) shoelacesTemplateInfo { fh, err := os.Open(path) if err != nil { logger.Error("component", "template", "err", err.Error()) os.Exit(1) } defer fh.Close() templateVars := make([]string, 0) scanner := bufio.NewScanner(fh) templateName := "" i := 0 for scanner.Scan() { // find variables result := varRegex.FindAllStringSubmatch(scanner.Text(), -1) if varRegex.MatchString(scanner.Text()) { for _, v := range result { // we only want the actual match, being second in the group if !utils.StringInSlice(v[1], templateVars) { templateVars = append(templateVars, v[1]) } } } // if first line get name of template if i == 0 { nameResult := configNameRegex.FindAllStringSubmatch(scanner.Text(), -1) templateName = nameResult[0][1] } i++ } return shoelacesTemplateInfo{name: templateName, variables: templateVars} } func (s *ShoelacesTemplates) checkAddEnvironment(logger log.Logger, environment string) { if _, ok := s.envTemplates[environment]; !ok { c, e := s.envTemplates[defaultEnvironment].templateObj.Clone() if e != nil { logger.Error("component", "template", "msg", "Template for environment already executed", "environment", environment) os.Exit(1) } s.envTemplates[environment] = shoelacesTemplateEnvironment{ templateObj: c, templateVars: make(map[string][]string), } } } func (s *ShoelacesTemplates) addTemplate(logger log.Logger, path string, environment string) error { s.checkAddEnvironment(logger, environment) i := s.parseTemplateInfo(logger, path) _, err := s.envTemplates[environment].templateObj.ParseFiles(path) if err != nil { return err } s.envTemplates[environment].templateVars[i.name] = i.variables return nil } func (s *ShoelacesTemplates) getEnvFromPath(path string) string { envPath := filepath.Join(s.dataDir, s.envDir) if strings.HasPrefix(path, envPath) { return strings.Split(strings.TrimPrefix(path, envPath), "/")[1] } return defaultEnvironment } // ParseTemplates travels the dataDir and loads in an internal structure // all the templates found. func (s *ShoelacesTemplates) ParseTemplates(logger log.Logger, dataDir string, envDir string, envs []string, tplExt string) { s.dataDir = dataDir s.envDir = envDir s.tplExt = tplExt logger.Debug("component", "template", "msg", "Template parsing started", "dir", dataDir) tplScannerDefault := func(p string, info os.FileInfo, err error) error { if strings.HasPrefix(p, path.Join(dataDir, envDir)) { return err } if strings.HasSuffix(p, tplExt) { logger.Info("component", "template", "msg", "Parsing file", "file", p) if err := s.addTemplate(logger, p, defaultEnvironment); err != nil { logger.Error("component", "template", "err", err.Error()) os.Exit(1) } } return err } tplScannerOverride := func(p string, info os.FileInfo, err error) error { if strings.HasSuffix(p, tplExt) { env := s.getEnvFromPath(p) logger.Info("component", "template", "msg", "Parsing ovveride", "environment", env, "file", p) if err := s.addTemplate(logger, p, env); err != nil { logger.Error("component", "template", "err", err.Error()) os.Exit(1) } } return err } if err := filepath.Walk(dataDir, tplScannerDefault); err != nil { panic(err) } logger.Info("component", "template", "msg", "Parsing override files", "dir", path.Join(dataDir, envDir)) if err := filepath.Walk(path.Join(dataDir, envDir), tplScannerOverride); err != nil { logger.Info("component", "template", "msg", "No overrides found") } logger.Debug("component", "template", "msg", "Parsing ended") } // RenderTemplate receives a name and a map of parameters, among other // arguments, and returns the rendered template. It's aware of the // environment, in case of any. func (s *ShoelacesTemplates) RenderTemplate(logger log.Logger, configName string, paramMap map[string]interface{}, envName string) (string, error) { if envName == "" { envName = defaultEnvironment } logger.Info("component", "template", "action", "template-request", "template", configName, "env", envName, "parameters", utils.MapToString(paramMap)) requiredVariables := s.envTemplates[envName].templateVars[configName] var b bytes.Buffer err := s.envTemplates[envName].templateObj.ExecuteTemplate(&b, configName, paramMap) // Fall back to default template in case this is non default environment // XXX: this is temporary and will be simplified to reduce the code duplication if err != nil && envName != defaultEnvironment { requiredVariables = s.envTemplates[defaultEnvironment].templateVars[configName] err = s.envTemplates[defaultEnvironment].templateObj.ExecuteTemplate(&b, configName, paramMap) } if err != nil { logger.Info("component", "template", "action", "render-template", "err", err.Error()) return "", err } r := b.String() if strings.Contains(r, "") { missingVariables := "" for _, requiredVariable := range requiredVariables { if !utils.KeyInMap(requiredVariable, paramMap) { if len(missingVariables) > 0 { missingVariables += ", " } missingVariables += requiredVariable } } logger.Info("component", "template", "msg", "Missing variables in request", "variables", missingVariables) return "", errors.New("Missing variables in request: " + missingVariables) } return r, nil } // ListVariables receives a template name and return the list of variables // that belong to it. It's mainly used by the web frontend to provide a // list of dynamic fields to complete before rendering a template. func (s *ShoelacesTemplates) ListVariables(templateName, envName string) []string { if e, ok := s.envTemplates[envName]; ok { if v, ok := e.templateVars[templateName]; ok { return v } } var empty []string return empty } shoelaces-1.3.2+ds/internal/utils/000077500000000000000000000000001444014657400170525ustar00rootroot00000000000000shoelaces-1.3.2+ds/internal/utils/util_test.go000066400000000000000000000023641444014657400214220ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package utils import ( "testing" ) func TestMacColonToDash(t *testing.T) { testNormMac := func(givenMac, expectedMac string) { if MacColonToDash(givenMac) != expectedMac { t.Errorf("Expected: %s\nGot: %s", expectedMac, givenMac) } } testNormMac("ff:ff:ff:ff:ff:ff", "ff-ff-ff-ff-ff-ff") testNormMac("ff-ff-ff-ff-ff-ff", "ff-ff-ff-ff-ff-ff") } func TestMacDashToColon(t *testing.T) { testNormMac := func(givenMac, expectedMac string) { if MacDashToColon(givenMac) != expectedMac { t.Errorf("Expected: %s\nGot: %s", expectedMac, givenMac) } } testNormMac("ff-ff-ff-ff-ff-ff", "ff:ff:ff:ff:ff:ff") testNormMac("ff.ff.ff.ff.ff.ff", "ff.ff.ff.ff.ff.ff") } shoelaces-1.3.2+ds/internal/utils/utils.go000066400000000000000000000054441444014657400205500ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package utils import ( "fmt" "net" "path/filepath" "strings" ) // Filter receives a slide of strings and a function that receives a string // and returns a bool, and returns a slide that has only the strings that // returned true when they were applied the received function. func Filter(files []string, fn func(string) bool) []string { var ret []string for _, f := range files { if fn(f) { ret = append(ret, f) } } return ret } // StringInSlice receives a string and a slice of strings and returns true if it exists // there. func StringInSlice(a string, list []string) bool { for _, b := range list { if b == a { return true } } return false } // KeyInMap checks wheter the received key exists in the received map. func KeyInMap(key string, mapInput map[string]interface{}) bool { _, found := mapInput[key] return found } // MapToString provides a string representation of a map of strings. func MapToString(mapInput map[string]interface{}) string { result := "" for k, v := range mapInput { if len(result) > 0 { result += ", " } result += fmt.Sprintf("%s:%v", k, v) } return result } // BaseURLforEnvName provides an environment-sensitive method for returning // the BaseURL of the application. func BaseURLforEnvName(baseURL, environment string) string { if environment != "" { return filepath.Join(baseURL, "env", environment) } return baseURL } // ResolveHostname receives an IP and returns the resolved PTR. It returns an // empty string in case the DNS lookup fails. func ResolveHostname(ip string) (host string) { hosts, err := net.LookupAddr(ip) if err != nil { return "" } return hosts[0] } // IsValidIP returns whether or not an IP is well-formed. func IsValidIP(ip string) bool { return net.ParseIP(ip) != nil } // IsValidMAC returns whether or not a MAC address is well-formed. func IsValidMAC(mac string) bool { _, err := net.ParseMAC(mac) return err == nil } // MacColonToDash receives a mac address and replace its colons by dashes func MacColonToDash(mac string) string { return strings.Replace(mac, ":", "-", -1) } // MacDashToColon receives a mac address and replace its dashes by colons func MacDashToColon(mac string) string { return strings.Replace(mac, "-", ":", -1) } shoelaces-1.3.2+ds/main.go000066400000000000000000000021351444014657400153520ustar00rootroot00000000000000// Copyright 2018 ThousandEyes Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "net/http" "os" "github.com/thousandeyes/shoelaces/internal/environment" "github.com/thousandeyes/shoelaces/internal/handlers" "github.com/thousandeyes/shoelaces/internal/router" ) func main() { env := environment.New() app := handlers.MiddlewareChain(env).Then(router.ShoelacesRouter(env)) env.Logger.Info("component", "main", "transport", "http", "addr", env.BindAddr, "msg", "listening") env.Logger.Error("component", "main", "err", http.ListenAndServe(env.BindAddr, app)) os.Exit(1) } shoelaces-1.3.2+ds/test/000077500000000000000000000000001444014657400150555ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/000077500000000000000000000000001444014657400171405ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/INTEGTEST.md000066400000000000000000000000001444014657400210160ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/expected-results/000077500000000000000000000000001444014657400224405ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/expected-results/configs-static-default.txt000066400000000000000000000001511444014657400275350ustar00rootroot00000000000000
bootstrap.sh
rc.local-bootstrap
shoelaces-1.3.2+ds/test/integ-test/expected-results/ipxemenu.txt000066400000000000000000000004121444014657400250300ustar00rootroot00000000000000#!ipxe menu Choose target to boot item /configs/coreos.ipxe coreos.ipxe item /env/production/configs/coreos.ipxe coreos.ipxe [production] choose target echo -n Enter hostname or none: read hostname set baseurl localhost:18888 # Boot it as intended. chain ${target} shoelaces-1.3.2+ds/test/integ-test/expected-results/poll-k8s1-1.txt000066400000000000000000000012061444014657400250700ustar00rootroot00000000000000#!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/1122.3.0 echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://localhost:18888/configs/coreos-baremetal.yaml?release=stable console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot shoelaces-1.3.2+ds/test/integ-test/expected-results/poll-k8s1-2.txt000066400000000000000000000012061444014657400250710ustar00rootroot00000000000000#!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/1122.3.0 echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://localhost:18888/configs/coreos-baremetal.yaml?release=stable console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot shoelaces-1.3.2+ds/test/integ-test/expected-results/poll-k8s1-3-stg.txt000066400000000000000000000012061444014657400256650ustar00rootroot00000000000000#!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/1122.3.0 echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://localhost:18888/configs/coreos-baremetal.yaml?release=stable console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot shoelaces-1.3.2+ds/test/integ-test/expected-results/poll-k8s1-4-stg.txt000066400000000000000000000012221444014657400256640ustar00rootroot00000000000000#!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/1298.6.0 echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://localhost:18888/env/staging/configs/coreos-baremetal.yaml?release=stable console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot shoelaces-1.3.2+ds/test/integ-test/expected-results/poll-unknown-set-from-ui.txt000066400000000000000000000012011444014657400300030ustar00rootroot00000000000000#!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/666.0 echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://localhost:18888/configs/coreos-virtual.yaml?release=stable console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot shoelaces-1.3.2+ds/test/integ-test/expected-results/poll-unknown.txt000066400000000000000000000005311444014657400256430ustar00rootroot00000000000000#!ipxe prompt --key 0x02 --timeout 7000 shoelaces: Press Ctrl-B for manual override... \ && chain -ar http://localhost:18888/ipxemenu \ || chain -ar http://localhost:18888/poll/1/06-66-de-ad-be-ef # Note: the iPXE client will see the above code as an endless loop. # However, Shoelaces server can break that loop to enable further booting. shoelaces-1.3.2+ds/test/integ-test/expected-results/poll.txt000066400000000000000000000005311444014657400241460ustar00rootroot00000000000000#!ipxe prompt --key 0x02 --timeout 7000 shoelaces: Press Ctrl-B for manual override... \ && chain -ar http://localhost:18888/ipxemenu \ || chain -ar http://localhost:18888/poll/1/ff-ff-ff-ff-ff-ff # Note: the iPXE client will see the above code as an endless loop. # However, Shoelaces server can break that loop to enable further booting. shoelaces-1.3.2+ds/test/integ-test/expected-results/rc.local-bootstrap000066400000000000000000000001141444014657400260670ustar00rootroot00000000000000#!/bin/sh /usr/local/sbin/bootstrap > /var/log/bootstrap.log 2>&1 & exit 0 shoelaces-1.3.2+ds/test/integ-test/expected-results/start.txt000066400000000000000000000003641444014657400243410ustar00rootroot00000000000000#!ipxe echo Shoelaces starts polling chain --autofree --replace \ http://localhost:18888/poll/1/${netX/mac:hexhyp} # # # Do # curl http://localhost:18888/poll/1/06-66-de-ad-be-ef # to get an idea about what the iPXE client will receive. shoelaces-1.3.2+ds/test/integ-test/expected-results/static.html000066400000000000000000000002231444014657400246120ustar00rootroot00000000000000
css/
fonts/
img/
js/
templates/
shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/000077500000000000000000000000001444014657400226515ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/000077500000000000000000000000001444014657400255235ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/production/000077500000000000000000000000001444014657400277115ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/production/ipxe/000077500000000000000000000000001444014657400306565ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/production/ipxe/coreos.ipxe.slc000066400000000000000000000013101444014657400336120ustar00rootroot00000000000000{{define "coreos.ipxe" -}} #!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/{{.version}} echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://{{.baseURL}}/configs/coreos-{{.cloudconfig}}.yaml?release=stable&hostname={{.hostname}} console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot {{end}} shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/staging/000077500000000000000000000000001444014657400271575ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/staging/preseed/000077500000000000000000000000001444014657400306065ustar00rootroot00000000000000example.preseed.slc000066400000000000000000000005631444014657400343170ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/env_overrides/staging/preseed{{define "example.preseed" -}} d-i partman-auto-raid/recipe string \ 1 4 0 ext3 /boot \ /dev/sda1#/dev/sdb1#/dev/sdc1#/dev/sdd1 \ . \ 10 4 0 lvm - \ /dev/sda5#/dev/sdb5#/dev/sdc5#/dev/sdd5 \ . d-i partman-auto/disk string /dev/sda /dev/sdb /dev/sdc /dev/sdd d-i grub-installer/bootdev string /dev/sda /dev/sdb /dev/sdc /dev/sdd {{end}} shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/ipxe/000077500000000000000000000000001444014657400236165ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/ipxe/coreos.ipxe.slc000066400000000000000000000012611444014657400265570ustar00rootroot00000000000000{{define "coreos.ipxe" -}} #!ipxe set coreos-url http://stable.release.core-os.net/amd64-usr/{{.version}} echo This will currently autologin into tty1 on the console. echo From there you can su to root and install CoreOS to disk using: echo coreos-install -d /dev/sda -C stable echo You will probably need to chroot into /dev/sda9 to configure accounts. echo More info @ http://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/ kernel ${coreos-url}/coreos_production_pxe.vmlinuz cloud-config-url=http://{{.baseURL}}/configs/coreos-{{.cloudconfig}}.yaml?release=stable console=tty1 coreos.autologin=tty1 initrd ${coreos-url}/coreos_production_pxe_image.cpio.gz boot {{end}} shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/mappings.yaml000066400000000000000000000015071444014657400253560ustar00rootroot00000000000000networkMaps: - network: 20.20.20.20/24 script: name: ubuntu-minimal.ipxe params: hostname: placeholder hostnameMaps: - hostname: '(etcd|k8s)\d-m\d' script: name: coreos.ipxe params: version: 1122.3.0 cloudconfig: virtual - hostname: '(etcd|k8s)\d-m\d' script: name: coreos.ipxe params: version: 1122.3.0 cloudconfig: virtual - hostname: 'k8s1-4' script: name: coreos.ipxe environment: staging params: version: 1298.6.0 cloudconfig: baremetal - hostname: 'k8s1-\d' script: name: coreos.ipxe params: version: 1122.3.0 cloudconfig: baremetal - hostname: 'k8s1-\d' script: name: coreos.ipxe params: version: 1122.3.0 cloudconfig: baremetal shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/static/000077500000000000000000000000001444014657400241405ustar00rootroot00000000000000shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/static/bootstrap.sh000066400000000000000000000003401444014657400265060ustar00rootroot00000000000000#!/bin/bash export DEBIAN_FRONTEND=noninteractive echo Example boostrap configuration apt-get install hello echo '#!/bin/sh exit 0' > /etc/rc.local # Don't want to run this accidentally. chmod 0 /usr/local/sbin/bootstrap shoelaces-1.3.2+ds/test/integ-test/integ-test-configs/static/rc.local-bootstrap000066400000000000000000000001141444014657400275670ustar00rootroot00000000000000#!/bin/sh /usr/local/sbin/bootstrap > /var/log/bootstrap.log 2>&1 & exit 0 shoelaces-1.3.2+ds/test/integ-test/integ_test.py000077500000000000000000000211101444014657400216550ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2018 ThousandEyes Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ Test shoelaces """ import os import signal import subprocess import sys import time import tempfile import string import pytest import requests import datetime import dateutil.parser from requests.exceptions import RequestException API_ADDR = 'localhost:18888' API_URL = "http://{}".format(API_ADDR) TEST_DIR = os.path.dirname(os.path.abspath(__file__)) BASE_DIR = os.path.dirname(os.path.dirname(TEST_DIR)) FIXTURE_DIR = os.path.join(TEST_DIR, 'expected-results') STATIC_DIR = os.path.join(BASE_DIR, "web") SHOELACES_BINARY = os.path.join(BASE_DIR, "shoelaces") @pytest.fixture(scope="session", autouse=True) def shoelaces_binary(): os.chdir(BASE_DIR) subprocess.check_call(["go", "build"]) os.chdir(TEST_DIR) @pytest.fixture(scope="session", autouse=True) def config_file(shoelaces_binary): """ Create a temporary config file """ temp_config_tpl = string.Template("bind-addr=$bind_addr\n" "data-dir=integ-test-configs\n" "static-dir=$static_dir\n" "template-extension=.slc\n" "mappings-file=mappings.yaml\n" "debug=true\n") temp_config = temp_config_tpl.substitute(bind_addr=API_ADDR, static_dir=STATIC_DIR) sys.stderr.write("Using:\n{}".format(temp_config)) temp_cfg_file = tempfile.NamedTemporaryFile(delete=False) temp_cfg_file.write(bytes(temp_config, 'ascii')) temp_cfg_file.flush() temp_cfg_file_name = temp_cfg_file.name temp_cfg_file.close() yield temp_cfg_file_name os.unlink(temp_cfg_file_name) @pytest.fixture(scope="session", autouse=True) def shoelaces_instance(config_file): """ Shoelaces test fixture. """ shoelaces_start_cmd = [SHOELACES_BINARY, "-config", config_file] shoelaces = subprocess.Popen(shoelaces_start_cmd, preexec_fn=os.setsid) sys.stderr.write("\nStarting Shoelaces...\n") yield shoelaces sys.stderr.write("\nShutting down Shoelaces...\n") os.killpg(os.getpgid(shoelaces.pid), signal.SIGTERM) sys.stderr.write("\nDone\n") def test_shoelaces_startup(shoelaces_instance): """ Test API liveness """ attempts = 0 while True: try: req = requests.get('{}/'.format(API_URL)) req.raise_for_status() sys.stderr.write('\n\nApi startup successful.\n') break except RequestException: attempts += 1 if attempts > 10: raise sys.stderr.write(".") time.sleep(1) @pytest.mark.parametrize(("path"), [("/"), ("/events"), ("/mappings")]) def test_response_success(shoelaces_instance, path): r = requests.get("{}{}".format(API_URL, path)) r.raise_for_status() REQUEST_RESPONSE_PAIRS = [("/static/", "static.html"), ("/configs/static/", "configs-static-default.txt"), ("/configs/static/rc.local-bootstrap", "rc.local-bootstrap"), ("/start", "start.txt"), ("/ipxemenu", "ipxemenu.txt")] @pytest.mark.parametrize(("request_path", "response_file"), REQUEST_RESPONSE_PAIRS) def test_request_response(shoelaces_instance, request_path, response_file): with open(os.path.join(FIXTURE_DIR, response_file)) as response_body: assert requests.get( API_URL + request_path).text == response_body.read() def gen_mac_server_pairs(): generated = [] for m in range(0x00, 0x100, 0x11): o = "{:02x}".format(m) generated.append({'IP': '127.0.0.1', 'Mac': "ff:ff:ff:ff:ff:{}".format(o), 'Hostname': 'localhost'}) yield (o, list(generated)) @pytest.mark.parametrize(("mac_last_octet", "servers"), gen_mac_server_pairs()) def test_servers(shoelaces_instance, mac_last_octet, servers): def sort_by_mac(srv): return srv['Mac'] poll_url = "{}/poll/1/ff-ff-ff-ff-ff-{}".format(API_URL, mac_last_octet) req = requests.get(poll_url) req = requests.get("{}/ajax/servers".format(API_URL)) assert sorted(req.json(), key=sort_by_mac) == sorted(servers, key=sort_by_mac) def test_unknown_server(shoelaces_instance): poll_url = "{}/poll/1/06-66-de-ad-be-ef".format(API_URL) # Request for unknown host will give result in retries/polling with open(os.path.join(FIXTURE_DIR, "poll-unknown.txt")) as poll: assert requests.get(poll_url).text == poll.read() # Setting the config for the new host should succeed. requests.post(API_URL + '/update/target', {"target": "coreos.ipxe", "mac": "06:66:de:ad:be:ef", "version": "666.0", "cloudconfig": "virtual"}).raise_for_status() # After setting we should be able to get the new config. with open(os.path.join(FIXTURE_DIR, "poll-unknown-set-from-ui.txt")) as poll: assert requests.get(poll_url).text == poll.read() # Once fetched the host is now again "unknown" with open(os.path.join(FIXTURE_DIR, "poll-unknown.txt")) as poll: assert requests.get(poll_url).text == poll.read() def test_events(shoelaces_instance): url = "{}/ajax/events".format(API_URL) req = requests.get(url) req.raise_for_status() res = req.json() # assert mac is in dictionary assert '06:66:de:ad:be:ef' in res # assert array with one element assert isinstance(res['06:66:de:ad:be:ef'], list) and len(res['06:66:de:ad:be:ef']) == 4 # assert we have a date field assert 'date' in res['06:66:de:ad:be:ef'][0] # assert our date actually parses assert dateutil.parser.parse(res['06:66:de:ad:be:ef'][0]['date']) del res['06:66:de:ad:be:ef'][0]['date'] # compare to the expected result sans the date as it would be different assert sorted(res['06:66:de:ad:be:ef'][0]) == sorted({'eventType': '0', 'message': '0', 'bootType': 'Manual', 'server': {'mac':'', 'ip': '', 'hostname': '06-66-de-ad-be-ef'}, 'params': {'baseURL': 'localhost:18888', 'cloudconfig': 'virtual', 'hostname': '06-66-de-ad-be-ef', 'version': '666.0'}, 'script': 'coreos.ipxe'}) POLL_PAIRS = [(None, "poll.txt"), ({"host": "k8s1-3"}, "poll-k8s1-3-stg.txt"), ({"host": "k8s1-4"}, "poll-k8s1-4-stg.txt"), ({"host": "k8s1-1"}, "poll-k8s1-1.txt"), ({"host": "k8s1-2"}, "poll-k8s1-2.txt")] @pytest.mark.parametrize(("params", "expected"), POLL_PAIRS) def test_poll(shoelaces_instance, params, expected): """ Test Poll handler """ poll_url = "{}/poll/1/ff-ff-ff-ff-ff-ff".format(API_URL) req = requests.get(poll_url, params=params) req.raise_for_status() with open(os.path.join(FIXTURE_DIR, expected), 'r') as poll: assert poll.read() == req.text TPL_VARS_PAIRS = [("coreos.ipxe", "", ["cloudconfig", "version"]), ("coreos.ipxe", "default", ["cloudconfig", "version"]), ("coreos.ipxe", "production", ["cloudconfig", "version", "hostname"])] @pytest.mark.parametrize(("script", "env", "vars"), TPL_VARS_PAIRS) def test_template_variables_list(shoelaces_instance, script, env, vars): url = "{}/ajax/script/params".format(API_URL) req = requests.get(url, params={"script": script, "environment": env}) req.raise_for_status() assert sorted(req.json()) == sorted(vars) if __name__ == "__main__": pytest.main(args=sys.argv[1:], plugins=None) shoelaces-1.3.2+ds/web/000077500000000000000000000000001444014657400146535ustar00rootroot00000000000000shoelaces-1.3.2+ds/web/css/000077500000000000000000000000001444014657400154435ustar00rootroot00000000000000shoelaces-1.3.2+ds/web/css/default.css000066400000000000000000000040761444014657400176100ustar00rootroot00000000000000/* Copyright 2018 ThousandEyes Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ html { position: relative; padding-top: 60px; } body { height: 100%; } footer { position: fixed; bottom: 0; width: 100%; background-color: #f5f5f5; } .info { font-size: small; font-style: italic; } div.figure { text-align: center; } div.figure p { margin-top: 6px; } div.figure a{ border: none; } .soft, .caption { font-style: italic; color: #555; } a { color: inherit; text-decoration: none; } #content a { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #a3becc; } div.about-section-image a { border: none; } a:hover { color:#bf0000; } .homelink { border: none; } body > .container { padding: 30px 15px 0; } .container .text-muted { margin: 20px 0; } code { font-size: 80%; } .vertical-align { display: flex; align-items: center; } .about-section-text-left p { text-align:right; } .comments { font-size:small; } .nav { font-size:small; } .navbar-brand { padding: 0px 0px 0px; } .header-title { letter-spacing: .1em; } .params-label { min-width: 100px; } .params-container { margin-top: 10px; } .btn-primary { color: #fff; background-color: #ef5e21; border-color: #ef5e21; } .btn-primary:hover { background-color: white; color: black; border-color: #ef5e21; } .main-container { margin-bottom: 80px; } .event-log .card-body { padding: 0; } .navbar { background-color: #002b3b; } .text-primary-custom { color: #002b3b; } shoelaces-1.3.2+ds/web/css/spinner.css000066400000000000000000000112011444014657400176260ustar00rootroot00000000000000/* Thankfully retrieved from: https://github.com/tobiasahlin/SpinKit/blob/master/css/spinners/8-circle.css The MIT License (MIT) Copyright (c) 2015 Tobias Ahlin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ .sk-circle { margin: 100px auto; width: 40px; height: 40px; position: relative; } .sk-circle .sk-child { width: 100%; height: 100%; position: absolute; left: 0; top: 0; } .sk-circle .sk-child:before { content: ''; display: block; margin: 0 auto; width: 15%; height: 15%; background-color: #ef5e21; border-radius: 100%; -webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out both; animation: sk-circleBounceDelay 1.2s infinite ease-in-out both; } .sk-circle .sk-circle2 { -webkit-transform: rotate(30deg); -ms-transform: rotate(30deg); transform: rotate(30deg); } .sk-circle .sk-circle3 { -webkit-transform: rotate(60deg); -ms-transform: rotate(60deg); transform: rotate(60deg); } .sk-circle .sk-circle4 { -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .sk-circle .sk-circle5 { -webkit-transform: rotate(120deg); -ms-transform: rotate(120deg); transform: rotate(120deg); } .sk-circle .sk-circle6 { -webkit-transform: rotate(150deg); -ms-transform: rotate(150deg); transform: rotate(150deg); } .sk-circle .sk-circle7 { -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .sk-circle .sk-circle8 { -webkit-transform: rotate(210deg); -ms-transform: rotate(210deg); transform: rotate(210deg); } .sk-circle .sk-circle9 { -webkit-transform: rotate(240deg); -ms-transform: rotate(240deg); transform: rotate(240deg); } .sk-circle .sk-circle10 { -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .sk-circle .sk-circle11 { -webkit-transform: rotate(300deg); -ms-transform: rotate(300deg); transform: rotate(300deg); } .sk-circle .sk-circle12 { -webkit-transform: rotate(330deg); -ms-transform: rotate(330deg); transform: rotate(330deg); } .sk-circle .sk-circle2:before { -webkit-animation-delay: -1.1s; animation-delay: -1.1s; } .sk-circle .sk-circle3:before { -webkit-animation-delay: -1s; animation-delay: -1s; } .sk-circle .sk-circle4:before { -webkit-animation-delay: -0.9s; animation-delay: -0.9s; } .sk-circle .sk-circle5:before { -webkit-animation-delay: -0.8s; animation-delay: -0.8s; } .sk-circle .sk-circle6:before { -webkit-animation-delay: -0.7s; animation-delay: -0.7s; } .sk-circle .sk-circle7:before { -webkit-animation-delay: -0.6s; animation-delay: -0.6s; } .sk-circle .sk-circle8:before { -webkit-animation-delay: -0.5s; animation-delay: -0.5s; } .sk-circle .sk-circle9:before { -webkit-animation-delay: -0.4s; animation-delay: -0.4s; } .sk-circle .sk-circle10:before { -webkit-animation-delay: -0.3s; animation-delay: -0.3s; } .sk-circle .sk-circle11:before { -webkit-animation-delay: -0.2s; animation-delay: -0.2s; } .sk-circle .sk-circle12:before { -webkit-animation-delay: -0.1s; animation-delay: -0.1s; } @-webkit-keyframes sk-circleBounceDelay { 0%, 80%, 100% { -webkit-transform: scale(0); transform: scale(0); } 40% { -webkit-transform: scale(1); transform: scale(1); } } @keyframes sk-circleBounceDelay { 0%, 80%, 100% { -webkit-transform: scale(0); transform: scale(0); } 40% { -webkit-transform: scale(1); transform: scale(1); } } shoelaces-1.3.2+ds/web/img/000077500000000000000000000000001444014657400154275ustar00rootroot00000000000000shoelaces-1.3.2+ds/web/img/favicon-32x32.png000066400000000000000000004757531444014657400203660ustar00rootroot00000000000000PNG  IHDR szz pHYs.#.#x?vwiTXtXML:com.adobe.xmp 0012D0A0C6A3250FCC6D5BBBB968F034 002504E969886669855B1AA9DD16BE4C 0052F64A37D14F19190F2DE36E2B06D9 0100F3F5356228861A9E2310BF020B71 0209A62704B5B63352B4E147740CF8E4 0233AA1C61D5FB15E9CD528C9574DC1E 02A9CB61BA4D01CAC197B57DF1817394 02E5D201D6B924DD5E60543FC14B0898 05112694CB5CC686D67E321F54C808F3 0517B98DC8C698B2CD76DB31066277A0 06591083E1503D463E6F4338A5C05197 07D56A570494E8C52865C1BA535C9AD0 0861650E0FF9BB74F63B1E6011738636 088792A54395E04E9A155FA8808C5950 089C8DC733E2979221F3B6BC2D5F8D90 08D0D7DA681F94C4BE0B4E0C926330F4 08FD03CEF0B6ACFC65DFA8DE948F81CF 095372FB13F537DB24DE34FA5A6E3007 099DB3EF7ED80E3E125B753C90091F8D 0A08E1E55910BAD55E740BF55043C8F1 0A389EB0819BCF3F505501CBF66AEAAC 0A3F1E20DABD1F2308AF2C2A60036E78 0C151C4EA97D41FC66B40D8260FA865A 0C27D44255F4D81393BFA7A78297A2BD 0C66C8B51690D1556ABAE8A8946ED57A 0CAE6A5BFBE86EDAA8B23475AC5D7091 0CB0346F9E0605F1FDC1F3907725B681 0D14F5405426DB8A76D920846F2870B0 0D1EDA570EA8DFE441C19470E5F4A248 0D32A465AB6AE4320028B3A59F5B2E40 0D4D15256EAB7E7E48424C13491833B5 0DDE4D6EE9044ECE03C589F57621D870 0DF793AD238D19BCF8580A832E878E2D 0E62C40463DABCF05EC2A7D288A08C9E 0E6789F2CC6D2DC2D602AF231114DC55 0ECD2C290DFB7B39488ED7B84130D26A 1058A167B457EE37432879D4B76A5627 10F900B609D13A641B41758076CBEB8D 1111DE664AE773B37F28AFCD4E3AC8C3 11459BD7DF7C7380CA9F9E53F41161C7 128BB761E721A6C21F5F01170951E34E 129DC4C7E057F5B893624D31ACAE4B9F 12B59C170EC996D8F8FDC43AEF631D68 12BE795547019F56B184F293A41D19D0 1316CFCFE58B5344C3F8AD18DA124B14 136AFDB6FE7EA26D2EB62AB5DEB32AD4 1378DD074060E6EB5EC06385169CFEF5 138D7171CF2B9CA239356EA41AA9EA56 13C0DCBC5E1668C66B87AC46CF0E90B1 140D942F274F29055584978D85568EB2 14CA1C8BA672098221D49D129514B540 14D5A6B0248D3CC145351A74A7A1CD20 15570A465BBE7A38C40AEE3F3233B46C 1627700E1BF13241114B801753006B4F 16F45AA2AF3367BCB885E74A16F16155 1711494B5D085CA83437529F630FAEC9 177769949C59CFDA83D3287664AC9360 17AACF945191861AA02C3FFE3A596205 18224575096D40A5DE56D6691939F462 18767071964702D61CA1CA7C398B2DF0 1907A50F9788D2CF0D1447601A55BAC0 1A006EECBDE10A4F866EF305071E0006 1A4443E0FE78E5755FEC4C45590409D1 1A694CB8EEF5AD12C928AC9751C51B93 1AA8AAD73A1B76A3ABDD14966940032C 1AFBC35B82C8BC4B8681DE733F534214 1B0B5AE52161586C924B38650F05E301 1B1F533A82CF3830BDFB8D15601EB17B 1B233672F39EE6E572A6A8C4527C40F7 1B30667311C3AF46908A993F7981BA6E 1CC348323C23811B10C4BB8E254DE1ED 1D849E744FFE4487D1D149FC9852DE41 1F00B58B40933A0E6173BF754F682FD7 1FE37BDCDC93C74C2DA5083009B3453D 200BDC72EFEEB0A3CF87D56AF4725EB1 208902292B8E0F1BA6098AD6A45ADAB6 20A6EFFA3680EDF1674FEEB99B7BA126 218E8CB4569042A5601C3422D6722844 21AB6DCAAAC086EBEE2975F398CC003A 21CF51A48E8BDEE49B29D102807D2FA4 220A801675DB06256BAE8A0F6AF4396B 231365EBE52123E62EDDD6A952AA7C96 236C7FE5D98A09991D7956AEED27038E 2435007FA4DB119750B6DAE42C304DD6 255A0F967D25E3A0DC5E0C9C97127B37 2698EE73A8C1AD57693E5217C3CDAF12 26CAFD3456C41A517EBDC9597C79FDC4 27624D217D92C81E3BE35531D36561CC 2772D9E82AD5493CAD313EE41018F0D1 279C643ADFB9402BF9835057EADAC38B 27B331BE42FE16CFC1651377926D762B 27B9EC0797B24F39A300C365D62E16F5 2902DB5D348D6B7067110110471E880A 29BD98EE2F575E34279CFC642535E74D 2A2C9C77C96FCE65888EE9B8AA855FE2 2A3C2B2E14D95543DB60EDFF4425F86E 2A5D8DDDB86CE08DF2C725879E6B643A 2B19AA2C4469CA1CC52DB12F49174157 2B7D17D1F65E1C9258C9A47800A67226 2C4CA610A9A49E63DCBA2F6EC05193F9 2C9FDE8C6A775E1D75F244D84C6E21D9 2D167B1DE0C02BCE8A243E3FF26D637E 2D6FEC8BF532BDC6764393204BED1697 2D7941B6FE249F7F33F6F6FAF288B896 2DB2E4D0EDE8262ABA30BD11FA7A410E 2E5E625D41787229A42EA78743DFED92 2FD37278F5EEBE7232AE5A68D9A9466D 301CC8D7D426A93CB5BB33AAE6508349 3057CB48C137860AFE6BFC622443C825 30B71F03B16FCD418E22E35C468F6899 30F195B254AE4EA3732AAED75E48F021 3103CCBE96499D5B698D8FF4ECC586AE 313C47AD2C1E844D4395B59ED381C6A0 31D8D6A3C8EBEBA070E3DC4A99BA509F 330B47F5F02C1ACF8A2F0E70853F0FAA 3353FADB47A3F0DE60E4500049A4DB28 33654127B5965AC82ED0B39244F7E7E5 33E8AC6B616570F9BD9B19BAE78BB91C 3485C4A2738D47BF8075D1F7A7C48EAB 36059700EC4C42C7349DE0EAA192C29E 362D264C6FB6A85A46499E410D2F4652 36C1FC4D45442B57738D72CA4B11F849 37789D9A4AA841961A41E88D21D91D85 3921FCED3F2181F72D9D71C7036C7B12 39C9448D471EDB006D1CBC25CE47E7CC 39CC469DCB1D74D76686438B0F66AAC2 39F49227D5377EF32E2748D973C185B5 3A16C5BC5ACEBE82D01017AA3B8984CE 3AA26C3C5FDC5FA1EEBA954B0958A31C 3AD93AE2DBC04CBB8325C03A97D07725 3AE541503B8FEF908C36AC0119BF25F7 3B98D53B911C0224E046AAC7D19C6D02 3BB37C4D06FBA65F6F25FED470DE7CB5 3C2A64634C9788BFF38FED5ACB063533 3C981753C3C5EE3A4D5AA909EC9026C5 3CC3A7175C7CAE64EA6557385E4B0624 3CF6886BB569D09259AD3DC8679AC153 3D009502AA6E6CA7D1FC57D037A7116B 3E67E92287A5D342E39337A03A077AE0 3E75B73ABB8F2B3D2B694FEC21303AB5 3F0AB62422B769922413ADBD52B88D68 3FBFA2D46590CE97E8F9ED1811A8CDE6 3FFC1F55DFBB39B744DCC0CC27667459 405A7FFCA4446EA744B67BABABB96F08 40922F1B0D07A1D88DA6FA721900B122 41675838011DBFD099584C462BE27ECD 42209BC19B9590A813417E96539A6F24 4341A52AAED5E8D9220953BCA7A8CB7E 43C7509DF05B08F1B899B89894694853 43D2FFD9EC32FC78F81D7D0C453FFE29 43EE0D07E76CD93BD470E9B98CDE836A 44599ABAD2B09175B6DE2FEE120705F1 4471ECA91DFAEEFE0F31FE03F1E4A233 457ED299FDBD891424DB75A301932995 45B28DF8F723C86DA8547E2747556FA0 46E7A9B138C68EEE8E1D0A4B46238A9A 476CBE98CF4E8E70205EAF0D12B11BB5 480EBA80A725D954D3D170D72B527C59 480EE9EBAC4E0B9E2BECC71BC320794C 4860C683F0D58EAD43C84888A9C64D3E 48E5D03365041790E4632094C2E015B3 4A50EA3EF610D17D39286D287998F001 4A65C9CA6BB63D60A17D271D8C5B69AF 4A78D85EB777DCC82A3A699A7BA3B4DF 4AE3EE0E518164E77EEDD8E83B026EF5 4AE59A3A3E7784FB81DFADB670D6D6A4 4B638E95E29736B6531D6B9496FE410D 4B70A78C9DE38AD7C05CC967CFB7510B 4BCE264CFCDCA3F632FECC53BC340D54 4C1E13A85DA9A42B6CECFF71069DA7F6 4D74AF71B2435ABDDE117DCBE79A1AFB 4DA7AA862160E1C2FC98C6C6A2283059 4DAEAE812197DFAFA0F71A5E58A7DCC3 4DB4ADAA46B35374B6EB9E919A913D49 4DCE59C98623251BFCBB4CDC874E14EF 4DDCA1B4E2E2580243D444BC4B7B9D43 4DECD3C733779F33EC6BD8AB661ECC57 4E355444F357BD8023884C75796E2C0E 4FAAE26D9BA0E5B222CB74FAF9678DA2 4FD4915243B839CB28F3E20C75874906 510F1E4CB55CE76FCCBE8051F2EE6595 5151304549D50A07A105E98AB1885596 524CC22F773ECD507D7D1A031D79BA50 528B0E775823664A44BCC436F83C98BF 52A5C6A68EDB331D0E103ECBAE7B5A92 53C6FC48125E167F084717E6CEBAA22A 54FFFCDA487C7EAA9E6808A40F332115 55BAFFCE52AE6B79E6D1E7AD095728B4 56072C6E296D5F3256EBF6E7BCFF5D5D 56A9AB5AB7A23C9EB4D96B5E51863E99 56D895A9981CE1444015F366AFF6CF5C 56F0D71F4F82D7E96173653947ABA4EA 5713AF98E4BCA98757AD7439029E88BE 5764212A5B69B7B6103E0BFCF5C676FA 58046186791F155B28CE0F11DC920A03 58C1E7C4823DD6C915CF20C9C502C893 58CA81117E9F10B04BBD87C1E1D68A85 58CB5AB29A91F4C449FF3631D69A91F8 591F69486C9095AE3A9F938C55C2F274 599897F163A6A8193CC7B76CEF667E16 5A08851D7FAFFA644C5AD5B29AAECC0A 5A0BE2A76766D89C8C29F95267C5C855 5A1A9B8D3029FF1202D745E50EE5B5A3 5AB5D98399A39C693D1C79B725DF2757 5AB6AD31DD7C870505B056FCE7D09FEF 5B14B3C23AA5052E24338EE0CECE8517 5B7F8E3107220C59129B01B365E4CBED 5B8E4672075131A36CBD61CE4CA6587E 5BD4BBC4192CD4C5EF9C1AEF4A356CFE 5C788468D3D1C6EEBC6B108DD9CCD431 5C789CE96B60FFCFE967C36C8F56C3C7 5D2A0A62B34C87E8241FB81ED193CDA6 5D2DBA64371CAB2BE92E3E5341615281 5DCF1CFBBB86FD66B60B3577D181195E 5DE9C8FFDA5E30F335A4356EB72BAD13 5E497F7FA9766FF567F63AD3F8E1F4B1 5E67230E23CCBDB556EDEE9D22C3756B 5E79DC17DA603AC9D3FD53427E5ACA89 5EA6B4979DC16071C89511471A700A45 5F1F61DBBD74916E9406CF036B328105 5F958352412555C03715CD2D528BA924 5FA522D3AF907D79B856101FB45ECC38 5FD15A38568ED1460872C86AA8F65E53 60010D40BB15DF35CC3D5DB78A03A99D 6036F2AF2D9E3190324BA1F90A1DB34E 608CC999F99574943983F2EFFA0C3A3D 60E4CF564E7807D91CD98D71BF18885C 6132F2EB68420498B759E73A4598BE9A 613F3F9E5CA100913173AF72F7A73F4D 617F858534A3CDFE8C2BB0956B6DBE97 61EC17A94173219E077F2AD408E26A2D 61e142be-6d47-3880-3779-d7ef0000008f 6235CDAE43663C7F8719352DAA35095F 62CE25C4FC5A4DBBF9531EAF1DD86429 62D14B5A8DD56A92B0F445C7E05CCF16 633CE17D5461435A1AEC3E0FC40B9A31 633E0C7A909EB50693198014AF9D9065 6367E48AA80BA9C4A95B7196C02071FF 643D87CDEAA7FDDE94CB8310D4197838 64BB5148B2063384CF86665E053A0A04 655B97BD9674AD61ED3D7BA75CE4D205 65B62A2F5C4A5B1E271E7ED03A30B19A 65C5E3DD360260EDAF12F3F38CBB1896 669AC8D40E0A5DE526F3D14F708C1772 671FD3714586E1820C91915600FBBAAF 6778D10A24BDC1A6F4E5D0CBA3A3DF2F 67BB5F0B8D54C6C52A7BFFE7D5F6B39E 685B21401D8404D9F6DD2F73187F30F3 69097BC089B21E207769618F0B7B51FB 697C03C1FDE24BAD783C142A6BF02685 698D9CBB1EF760354B97CE1674900626 69DA6987153E753598E85ECFFF0931F4 6A3484C9A90969840B3F66CC910301B5 6B262A47CBBBE417B4E243BEA0CF99F6 6BD17DFEAB4DFDF77E54612425E3FBBB 6BF0028FDCC3341DCD4139E641113CBC 6D12F6FFF3F572F4D343ED7B949277D4 6D53D91C2C46D082091925E2F0EEF337 6D8E7FDF5804DE1BA6C22D1530A46D54 6DECCBD45122CCA3BC390E3FEB9C87AD 6E04FFE5C3ED24E65E8B93F3155D864C 6EC1F1FA40E72479E8CCE83E2831D0B5 6F7DC9A2553A77E6D18DDAC68B1DA132 6b918842-4fa2-3e2c-a239-f678000000a5 7041C058D9B4DE1F1E26F1955797522E 70E1AE2C2ABB055C2C3F7C470A1916E5 70F7632DB7E95C24E5E09556EAEDF92A 719A9B63EB8260FDE52340CC30872F42 7238E94397C7B7EB28197DD939252A0C 726D84E06F32850FBE04D25E7D3AD4F4 72851A3B0ED9FDE61D53DE9DF3F7F23B 7295090CF62C2A5D282AC1AF76C41DFB 72E6DFB7533A047E042D2EC2E157C587 7322EB410CD441AEB8C187BE13CD105D 73BCD6EC645F7F55B59F522C88FC4AAF 73D0C1A0E7AF08837D4BF563BA004502 73EFB2755A426DAAB585ABA44B88643F 745565BC4A5E615B12914DE84DD5350E 74D64E666091381C2C0E19A8A0BAC5D4 753385CF12F2848B13C6764F9A3A408A 759397D31DD5FD7A68581EFEEBF6F7A8 7645CA035F1DDC15633ACBA49B4F9F1A 76A0A062C40A3A43801C0A9F8BBF0069 770E29D224E3558608B1BC64F6FDC8B1 784E782223A6F3CF31BF769D81EFA49B 78B9380C92549D5CC4D2264DF1ADB70F 78E653CA5DDCB3B9E8D128162743870B 79970965C1CC40CE35231681B63512A4 79D4BD22C3A631C083C3E8489A61A948 7A4D43B422331769ABCC5E176FE794C9 7B02BCDF61F7845787277A87DA535340 7B10FD858F8413F2DF967F28484455C3 7BDB8C1FE540F5032CF802FE6EB74216 7C365F9D1A111199F69859271854A064 7CB8B9B7162AD31FA143E445870A71D8 7CD032DC58BA11FC1EA81F077C01F532 7D80E7620CE82EDEC49314DD0CC4A416 7D883A5E409D7ACA049F964E84E96AB0 7E33573209229F24D1349455F95FAB0D 7E7780611D0DE794A15D9D2E2FD18467 7FA097C5C9262D7BA4A9D42DF50A0692 8028E722A22743E866441E9ED15B273B 80B498291B8BE24DF67F4558BDBE557B 80EF7A63257773F7DD2B53215F620214 81463609532FC946D663298520784B94 8256A861D851BB2533664176741DF9CE 82B1419E440CBD2F74F73C5055936693 82B678F56F2DA8A7DF241A7AEDC474F5 82CE2C967D0F7019B8A247EC5093A913 82D577B13DDD54259962A9705FAD8A89 83C533980397872D26DC38D09D94DE64 847D96974D4403C5053BF6330BA3C63A 84CED2FA37406F4495ED0B85A75AB5B6 85A49B9F46476A6FBAA556C205871A5E 85BCE4BC4B1D4373103921808F1E9DC9 8671662D37AA44F192DA33BF1F994DDF 868A364764D2A1A5E71B3F677226812F 8737335EC32C826FE36CB713373A42C7 87C07AC0875B162D78143B90EC106A7A 88791D90F1A04ABB775E37C42E1E98F2 88B987B151558782CB87FAE751DBB9AA 894AFB0194D42DABE0F148579C8158A9 89BBA0981DC2846667A30158C5EEB0F7 89BF7038C0EF1FDF56D704C695DE7158 8A27BA0B708F9E8EB23D512B2B0C8516 8A39C2951FEF0C2F6E18BBF9339C12C3 8C7757DA039633EB7FC72AB413FC017E 8DDFCAC520DEF7B77410AF4F0EA7155F 8E426FBC707260AF78F64D9571793B22 8EBB49F8534C4D483DA3F8BB90722BA6 8F2CD04DEFBE17609451FBD9DB0190C2 8F459333A488422BE8332F4545FF45D9 8FAC14A6C614F6BB63FF31E3EB05338A 904BB7CAE66D93EB7DC493416909D5F8 908EBADD1FAA60F9B9927BB26B264E5F 9285C73E683AC5755B431B91E8649004 92AF8F9DEA2927CA13F2EB193403DF43 93286616B27A8F31A35E898A4DB5B5EE 933A97987373643EF227587E8E700E3C 93525E82C39E989A0C3317DDA215E21C 93A4CF90A6FB6162EF115D4BFF31E19D 93A53A1F4A14B47B7C0A2B91FF7E113E 941659F05B16EF9C168BF112C79F9030 9420A08EB89EF68A2F0E353C2C5CA1EC 9471ABC2060544D9563861234FF5AC8D 9488E4DCD16F8CB477FD881BC410E727 9504AFDD27AD6884B6B352C6DB3D3ED9 95395A1D31C85D393B00C258FC60B9D9 9582079AA99CB0FF87B7A6C20E018B98 95A13BFCAE3C843B71FD4A75F5AD7E41 96629D2378B80D5FBA8A1D4F615C80D8 96997A39421970448F2C462B3FC2F308 96E5122C4A22A4B3F2840BEF500A07B1 97B88DFAE3563A14D061EE0673579168 97E013E7F0DED128D7D92B4EDA668437 98532DFA92D7D0DE08EE757E1328EA73 99DDA84AA3EB9017F729BDE6C7628729 9A06BA997EE13E3DEF846F8E081CDA9A 9A192B3813A4FC128CCDA985CD42F199 9A65929751CC650A471192882D908468 9A87E0CEC428CDF1212DFC2C57C6973B 9B72AAFF2694EC2652FDDC3437F2BACB 9CADCC80E078D869D97C6991D1358754 9D10F2C5591BCEF019477986ABB61776 9D5A756B875E0F30209FDFC6D3707531 9DACC3C7F2FCA61E96F2108305371B46 9DECC7E357DC278E40195848F20467D5 9DF36BCAB9CEEF7DBA5BC19F10301810 9E941A5759C83F5559A0F9D87B83C26D 9ED96EA859E9B6273CF424C30EBECBC4 9F00AC1595D18EFC989365D49FC1AE90 9F983F5FC36EE3C1FF9D320F858E0DA0 A06D63E918E907099F932A3619983CD0 A07543197A9A7311250D603743DB5424 A0A38BC1CF3C2DF85D59D477260471BF A105CABE35349D5A4753118298B02114 A2728D35B6D0600A8CBA7209A1B65F8B A2C46D744EF8E03E7A2161FFD8330019 A319ECFC8DC2DFFF2D734473127A4DD6 A35C0AE62B6798B5AE9272739C52A4C6 A39C00ACB3C093D74F058C169939E768 A3A4D68EFD4F255239DB64801D5A5B28 A3CC2A1A950CB014E57AD0093EEAA961 A4DD7111640ABCC5C56DA7D6641AB435 A4F43B50CBA9A3BF9F37F1E4B65792A8 A553C8A5DABC8343E95B649A69F8E160 A5D2379E56A1C39896C4CD1F6D476541 A61332E72EF367B2B3D9394EF0D42D88 A67B8DF2FAF4E7093CE0B29E9879B914 A760552541D6D9DC72C20809778AABCD A7703F48F3CBDE6BE26063F741A2D9A5 A7C26EC48E892CA9828FA9F2060D9485 AA2DF662DD7A647931238ADDA67F8E76 AC0C6D9B25B7FAE055F6856694339165 AC30DB23A5CA4F25640ACF7A221EFB1D AC5A74463A866E3D8B4B87761CE0FF2B AC6ECE4540FE0096C649AF997D1063FC ACFB92867B9F29038F33C5DA2A0DBC87 AD03558F3C00C7ECB25AD76934E44E83 AD2A5C3F384538B4A55613B845B95F3D ADCD49F1AB236E5DEB99CC24CBC0777E ADD81BDFECAFAA38D1A4D6689E1E491B AE453C8F543C6F6B4FEEC42E899AC0F7 AEE8706CC0FD1C5FF6A51EB680D0726D AF545D57B4FE308CF87BA1F3379B8143 AF58512308379594FDD56C97EFAA2348 AF6AD419C9E8155B41CEAB6B791C09C5 B00AF5EFDEBFB4BDB64F0A283F9C70D8 B043387B1A6CB4EEBCFA1B0D4E4B8EBB B07A637E52680FF1642537F8BA1F3DDB B0B7F2836C99E300B9B826B862385384 B0B9DC828C4F1F57C6F39DEF9F6DF9E0 B1743B15BD5722EB7E9760E3A5C427D3 B1C89BC467A25380EE671D73AE4C6617 B287010A17F4A4530E2E7D15460F338A B2A7E604616E6517B929590290029B73 B2CEE767D05C494013CB44CDC441B465 B2D8FB3B88560AD92F24A98D3805BD13 B31CB54D8028DAE946C5F74FD795BE98 B353F381EA9300A407C79053720759F8 B37843303D9938AECA8ACE67CDDFD8FD B495CC10CEBFCCCA4ED94D67BDC9B9D5 B4B19565B94061B14B075815B2654961 B54866B294E0ED96EC244024901479AF B58B677F24CC1FF4D56EB1A6B2621D9A B5956F517503D9C0E6F3B05FD7B91A08 B61DAB6B6BA6372D6113D5444D66465D B6571129B1BEBE6829FB8F4518992C1E B6FF2DD1EF84CDAF26158679769F72DA B7012257A07E051A13517D26AF7539AE B729E82B1DDF2D2D14E02118C2811DC9 B797E5D085305B2390CC774B52FFF3CC B7F4FAA537394686C358224ED51F0991 B8230D8BD4F8516B763203044671B8B9 B934D1A5024382D86A853E64FAF05F00 B96B7E21D182826057D3ACC866BD9EAC BA0BB33F11833356F424E67070AAA5CC BA126C7CF5B352CD50D2C25ACDDBD38D BA5B579FEF7BFB396EBF72FD583CCA8E BB3C261F569268EB017E77AA4D1D5B88 BB52A954E88DDBF1CA08F08EE164A105 BBEC237B284AC7D52AFC303AC3B45730 BC2B58C40E30BC02C1A7472F152148B8 BC45B8CD76EE4165F13E603C3CA72AD3 BC474CDA5E3B213C44E73E98FB421C53 BC4F7A078480CCEE6D2E890E5DD6760D BCE0D8AE4652A0A5EDF4A57CDD9E770E BD006F928644C4D2FA8047946F529DAF BD2D36C7BA4C03637B31A06EB82D0F45 BD8F6BB01E861E98EA83730FD6CADC50 BDC36AD405628F298138E3E8B17D582C BE0B0C3C033C210B5BF015F6E2E00AEC BE534DC98D1E0D85BA7C56E50A404B84 BE7507B12278411C47CE641D6474EE75 BF77F539F99B917AB096E1BFD2F623EE BF9CBA2CD1645C2D095C77F5235D3D55 BFEEC83ABDD54CA639FD8BEB03840592 C058F0785A11697D50DF7313ABB0AF22 C0B94ED1BFCB8AE85FE8ABA7B845DF77 C11233420758D2CC7E4352998848CAE9 C11861B29A9F396A061B44140D8F8380 C145D6F1AD5B28FCCCDCDFD5FF46C607 C1AA8F15E6AEC85EADFBD7DE268A622A C26B3B41A6FB869EFA74DE8FBDCD1B50 C302C1893D51F14F6B46DAC235A566BB C3C800F33700653A53F0D577511BA2F2 C3DD7AA1D3C31FDAE03C3CFFF454BCFF C3E517EBE954E90274875D2EFD87985F C4C232FFE47BFD293A3EF740F0310C6B C52C15C9C1129D17F6DD0A743A45759D C69B6DFFC42D4FBC7ADA9EAE3CFB4CF4 C6A3CB15A0560F4CB33FE124D37303D5 C6CFB446CA6188D34C0FC12E513ADCB7 C709799DF1CF546BB08E0D49C5951D8B C70E9DE98A902FB05CCEFFC1C0AF8643 C719179A03C9955703441FF120340EEA C73A7BA9D47AB0DD9962523945BE1824 C76A79A3636B8211BA3574E3F7225A8B C7887299FE40B3F8E671EA8E7DBC5116 C7BFF84328E23AAFDEE1A8E571A04948 C7DEE0A0CF79FF6A46E79A07E3BC385D C8F12A80FCCFDAED8AEDA5EE171113A9 C92EF329B82644BD9056FB6C4CD5C392 C9A3CF2348C8A4570F12432CFC2330D1 CA1A233258361BCCF73FA54D7AF09F2F CA66C6859857009625C5AC832098B90A CB13568B7A54ED404F61A0F65FC817F2 CB13B5E3092AF660B3D805F224BAE3CC CBED22322D7BEBF5886371F386FBE4A5 CD4CFF1442673AC72C77F45EAFC10601 CDA266FDD1826F3387D43BDF3C953300 CE710C026C83421973F653E2ED12405C CE9FB5BB208D319EC7C6FA6351104DAE CED28EBC8FC720FC8DB795DE78A3E654 CF00DD4D73615645EE0D1CDC75D6FE96 CF4066B92C6A4E8300FA11D45E10CE90 CF6E66CDF438297BAE2213BD13FE2B97 CFAC27C52A912C958577AB17171AEA6F D028E3FE0CE9123331DE002B51D8005F D0C20F72B13E13C2E82747520B25EC5A D18EF492BA4D46AE013F54F8C005E346 D1EED9FF49A753F66B8AE69F5A8F2857 D2657CF70E03502E43A28427AB4B5BCE D270B2DAB09333F5BBE5975C1056C3A3 D2DC9375C54E3F96E64EDC5C7F619096 D31C94D5EF7FE2741A1F23CFD94587D9 D3550A6F4D6CE1B77FB407CEB3871FB0 D3A74B947F009B0771E4DACC2B5B7E30 D46143072A2871B566AB860B089552D4 D4E1541C27C4F0D7CD18EB24A83B5323 D5173DE46248867C9F328F15A215E810 D55E346D7E9E619E340E8FE6907E6CAE D60EAF66F90E3D99B998D2665012EE23 D626C6B662A3FB86AB99A9C26DA23AD9 D6752A538D426C0134C6C4AA40B4A5F7 D7017F38931560F646D127A0C109824F D78BE20A115144961E8E72A61C50A7BB D8430F601D4DF874A785121B339C7C88 D87023AE921F9E1F03918D6328328A60 DA09D7DE66F8FB02AC6143C2812BA066 DA54FA771932DE8625E75671D6E7F5CE DA6B4756B7C49AC242D1AEDC1520854E DB0B48347557F441834277F938D0AF34 DB7F1832FF590F26ED08B85FBC5AA3FF DBCE1962FF85FA4AB566FD86CEC5CF73 DBD56DB5B3623E5B9F25EA5B76420F0C DC4913BB12291465CB20AA257E527C9A DC77D5563D13896022F487209A7E8E13 DCA554DE165F547FEEB7F87D53C18DD9 DD1274B985C46A485879BF2C5CABD051 DD556DEFAC1C30A6BA5BD1FF1A7F7E3E DD9C16523BE7A370CEAF67F8E08F639F DE555D69BFC983CCFC83397FFA4B8A3D DF227CDABE5BC1A5C9CE5AC86A7AC5C8 DFC17519A31CE5BA3A212B7A9FF7C07A DFCEE52EC2685345AFAF966BE76CC416 E01BEAB89B811CE8A3BFA4E11FFB7AB9 E0F7D6C3F965391FE11C7D3C071CF243 E145BD5CC8D871392FA2F723B3978507 E1DC75205275593795AF471E675BD516 E225F23D4BC991D7E82955D3946B5CF7 E2335263D33061C50250CBDC31ABC96D E2D8265301D5C115069A83EB00722691 E2E7432BAF28ED03ED2DC7CBC5F24E73 E32AFF5E22CAEED179917BC0242813B1 E3749A62ED2B9A3B432657ABD91C39B9 E3B628A0A0C3B6A1FFBA0124D1BB19F2 E4D4DF9E3F0C93F03290884B6565E89D E550EA09C202F953CD51A5FF20BEF7F2 E5532E6DD2322C6751AB62C1268AD97F E56D05D9602D946CBC1C629BB98C02E4 E605839C4048AF8D34D1C5DE013EBC6A E620FC8623C2F83BB939BFC319EEDA2A E686BF18294244CF873482F8AAFD9372 E773214A64E352BD417C00D97CAA0669 E7793023A28473B5A937FD5D43988478 E78590DDD478F24D0982B0B0CF1075BA E87F016850D9D51D5EAB97ED47E9594E E903FCAD352377E2623817B7E8F7451D E9508013DA28B7DF0D88CD8AA208D993 EA7738317E194DA42CE602C9E46EC691 EB1CB145F42C5EEF2081244C8405EF57 EB2DFB42E64386A99741DAE0F7EA1DBD EB7D8787F136D430C1A42CBEB5FA3AF8 EB8AA71B976DECE1343AD837816A0E54 EBF31FCC43EA366D5F55D32E904C9AF7 EC92416AB4EDA5649EE560A6FC2A8F1E ECD0226906414C96E37CA6D984CB29E3 ECE89787944F7B961A73EEBA2ACE7A48 ED142210991949868B0F577CC448179F ED475AF66E0EDF3CB61E0363A81A2F87 EDB810939A90AE5F3104882CCD5F1246 EE0C0BA51B8802572D4AC371E5D8F357 EED81FDD0C2DDA99590CAD2B3ED31E03 EF25E1059CF9A0213A8C0053A79555FB EFACBF7A3DA82D271CFB669EA3E68D65 EFB0C529B1DF5939DC476C5A82865BA4 EFE56ABFCA45FF3AD19463A89919A871 EFF0A640A614C3BDCBBD1D589C596007 EFF9A857607A41928D822262485436DF F04276B1C722A493A130475EFCE624AB F087CB18BAD6861EB752480FE09E62E6 F1866E645D6A93334ADFC99E85F0E7A0 F1C8583C4A0BB7BAAA41F7D20E237A12 F274B50A6CF50C22D2CAAED0946F2A6F F2A808BA1F355D3CB0DD31342A622150 F32E35C7E1933F01240804FBA6F2F05A F3770D218E31D950A594B3590F4FBEC5 F37E3E0717A032DD2993CB9735D0F00C F43F438D7BD554E68543FA98B0498F43 F45B5655FAC8AAF9BA2056802052383C F4BF11900F7B731CBFC5EE2FF841C1D9 F5636988C6D644712543CD4899D46213 F69D54E326BF317488BD43573DACE5B8 F6D84AAADACD0556499AF3CE7E61ED9D F73EAF3D4B9DE5B395B97363F26B5D81 F74375D93B027E6F8E576C21CF4DD263 F7CBDA2FF573CE0F33E125ADB65733B6 F7E1ECB22E28E4FC90F1F655802D9B30 F8C660AA850B3DBD37E1865FA869C00E F9B3148628C77B9CE82C7CC95738AD29 F9CDC884DABB27BF17C53B4A0561F987 FA540F3CF945835E8C9C87CB7EB51574 FB2243821BBCA8D01E570AAE9B2EFD4A FB325F00C6372B8EB21BEBEFFF715112 FB3464810324A18AAD14F1A3C7F760D0 FC6079CB07C906910755F46E04583CCB FC659D75AA6E62018FD7525B41ADD4CB FC99711CCCD22FB4A59D0EB454FCD251 FD135CEB8CFC7108421A6806C1FA167A FD748F64E0C1B3F1534171C6BCBE283B FE1D3C466DBCD1D59BFBC16FB533A3C9 FE5785413824BBB6716D2F39613BA03A FE60B4B9FE7A16DCD34937579FAC9244 FE886E832BA8A0169E00009467DAA6CC FF62A5200D6DF8A2BB1C7259B0279875 FF6AD90C5E87D8497BDC330B073F385A adobe:docid:indd:d9e95eeb-b763-11df-82eb-83f8ca83d6f5 adobe:docid:photoshop:01d4824c-8dcf-117a-8083-94ed5473f00c adobe:docid:photoshop:042fc5fb-09c5-1179-9bcd-a00fecd08d92 adobe:docid:photoshop:053954f6-a94c-1179-b35b-b3605fd5cb5d adobe:docid:photoshop:067f015c-6500-11dd-8c0e-da03867eaa6f adobe:docid:photoshop:08220b26-1588-1179-9b51-9466c3fda4ea adobe:docid:photoshop:086bff37-2400-11e5-b146-ea745c232c0f adobe:docid:photoshop:09a6bb63-dbf2-11db-a57f-be9c993a90fd adobe:docid:photoshop:0c75723a-d2a0-1178-85c3-87017d6dacf2 adobe:docid:photoshop:0d018998-8d9b-1178-9db2-b44d872b9f12 adobe:docid:photoshop:0d69849f-1468-11dd-b4d5-a76ee511c599 adobe:docid:photoshop:0dd8b889-1835-117a-a842-c660850923c4 adobe:docid:photoshop:0f9b4997-8237-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:0fba6c50-5a9c-1178-b7a7-933a0929e1bb adobe:docid:photoshop:0fc79f20-d232-11db-b1bb-aeba6ac5ef65 adobe:docid:photoshop:1095d5e7-5bc7-11d8-b5c4-ad94fedcbdf3 adobe:docid:photoshop:10fa0edc-4965-3244-b2b8-6f1e45d070a4 adobe:docid:photoshop:11647b14-44e5-117a-a75a-92e93514a429 adobe:docid:photoshop:1192c11b-d062-11e5-ad73-bf8209621925 adobe:docid:photoshop:11f79e0a-4a6c-117a-8304-d9601ffbae90 adobe:docid:photoshop:12dab6df-b4a2-11de-8f97-fde594bbf043 adobe:docid:photoshop:131cf6ae-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:14b00951-0134-1179-9bcd-a00fecd08d92 adobe:docid:photoshop:14ed5a98-4edb-1179-b0c7-f22577e59863 adobe:docid:photoshop:15923273-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:162f56b4-a07b-11db-9b6d-e4600e41f893 adobe:docid:photoshop:1634635d-b6aa-11d9-9d93-8f8f4ce80942 adobe:docid:photoshop:165362bc-44f4-117a-bf6a-f38822db85b5 adobe:docid:photoshop:17704aa1-cd43-1178-be6e-d03e1589dfbc adobe:docid:photoshop:179a5fc6-d465-11da-b675-db28fe4a73f8 adobe:docid:photoshop:17fd346c-175d-117a-a842-c660850923c4 adobe:docid:photoshop:180bfe9d-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:19b4fedf-309a-117b-834a-b3d9c0c50471 adobe:docid:photoshop:1ad9fcb1-112f-1179-a9f8-efa97d28bfa7 adobe:docid:photoshop:1b1e7074-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:1b9ba21e-eb53-117a-b944-cf267f726882 adobe:docid:photoshop:1bca738d-4d28-11df-ae11-88a6b11ac6d3 adobe:docid:photoshop:1dec74ed-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:1eff0a7c-bb0e-11db-af40-c3e7cd681b24 adobe:docid:photoshop:2102b00c-a94c-1179-b35b-b3605fd5cb5d adobe:docid:photoshop:21672e49-0a8b-11dd-baf7-d52def3e1b33 adobe:docid:photoshop:2176cf16-4d4f-11df-ae11-88a6b11ac6d3 adobe:docid:photoshop:25df04c2-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:261b1a17-9650-1179-a2da-8ded33f8f350 adobe:docid:photoshop:271c9b48-6aa9-11d9-b2a5-8bf484355b2f adobe:docid:photoshop:27fc658f-5459-1178-bd9b-c104f99cf137 adobe:docid:photoshop:29340be7-17f4-11dd-8148-fbe7f0bac890 adobe:docid:photoshop:29da690d-fb89-1178-892c-b67b077467b2 adobe:docid:photoshop:2a1d84d7-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:2bae712c-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:2d278ccf-964d-1179-a2da-8ded33f8f350 adobe:docid:photoshop:2e53065c-a7db-11db-a30c-aa3f32f49aef adobe:docid:photoshop:2fd4de6f-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:302e57ce-5c05-df44-8494-3a23fdcd600f adobe:docid:photoshop:30e3a653-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:318cd3ea-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:31d4622a-10f3-1179-9483-e80952dbaa6e adobe:docid:photoshop:341a881e-ee5a-1179-937e-b0615ea34578 adobe:docid:photoshop:355c8974-95dd-1179-a2da-8ded33f8f350 adobe:docid:photoshop:35fc83cb-fa12-1178-95f8-f0ee2b196bb9 adobe:docid:photoshop:39194445-a223-11e2-ae8f-ae6bbcd8f5a7 adobe:docid:photoshop:3986dd71-8144-11da-af47-f98ca342a16a adobe:docid:photoshop:3aff71b5-8237-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:3b4ad281-f1a5-11db-8922-d70353ace9b0 adobe:docid:photoshop:3baddcbd-a65e-1179-ad6e-beb12c7777b3 adobe:docid:photoshop:3c21c591-4b21-117a-8202-ff25c1b91bf6 adobe:docid:photoshop:3c78a10c-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:3c7d75f6-33b9-11dc-8d8b-a99e8a6d8f0a adobe:docid:photoshop:3ce1a9c0-e43f-117a-97df-ce41029d4baa adobe:docid:photoshop:3eb9d5d0-7612-11dc-9872-87d859ee3843 adobe:docid:photoshop:4185baba-5cec-11d8-b010-bf092868d857 adobe:docid:photoshop:4296683b-cf26-11db-b1b5-fcf0cb251532 adobe:docid:photoshop:45648e20-b15f-117a-8138-c0581fe4da37 adobe:docid:photoshop:495ddc01-8dcf-117a-8083-94ed5473f00c adobe:docid:photoshop:4a96218b-66b9-11de-a83a-bde54db9690a adobe:docid:photoshop:4eea59a2-c4fb-117a-a9bc-9f0f0c8d11d7 adobe:docid:photoshop:50a0e614-d0e5-bb49-bfee-f3e9d5310b91 adobe:docid:photoshop:519e797b-42a6-1179-92c8-8183d04d4956 adobe:docid:photoshop:5646546d-4292-1179-92c8-8183d04d4956 adobe:docid:photoshop:5766f8d3-83d5-da42-bf42-ba74d61df794 adobe:docid:photoshop:5799b84a-f22d-11dd-95e6-d94ef15f0b29 adobe:docid:photoshop:579ef843-1b32-1179-9f60-fe437996c2d3 adobe:docid:photoshop:5a13471b-5f94-117a-99d9-e6b71e7a5f21 adobe:docid:photoshop:5b3b22b6-c7ad-1178-842f-b9cb95ceef4b adobe:docid:photoshop:5b7308e6-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:5d55d682-fcb5-11df-8232-c2c89e4ac8d9 adobe:docid:photoshop:5f5b7de0-4a43-11df-bc05-e64777e8bef8 adobe:docid:photoshop:5fca0d8e-86e1-11de-b1dd-9d263488e40b adobe:docid:photoshop:60d53d84-f875-11db-831e-c5f511e4f2eb adobe:docid:photoshop:611447e6-f0c1-1179-9059-d096479ea041 adobe:docid:photoshop:624e22b8-23fd-11e5-a90e-b9a71df383c5 adobe:docid:photoshop:64a2ab55-35d8-1179-ab38-f924cc5f550b adobe:docid:photoshop:64ffe608-c328-f04f-a7a0-2830c3e0d021 adobe:docid:photoshop:65ef8124-d5a1-1179-83bb-ab70ad501449 adobe:docid:photoshop:680b500c-af7d-11db-9531-ccfb979a170c adobe:docid:photoshop:6b187a4d-21ac-11df-8763-f7b32115d1d8 adobe:docid:photoshop:6be25e82-20b0-11da-b0a6-be5394b4582c adobe:docid:photoshop:6cb303cd-2a47-117a-a6a1-e345c8d6d85c adobe:docid:photoshop:6cc72dd4-c122-11da-9ea0-b410217bc604 adobe:docid:photoshop:6ccb7fb7-277d-1179-8206-d7f4122e2367 adobe:docid:photoshop:6d6ed0d5-8236-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:710210d1-309a-117b-834a-b3d9c0c50471 adobe:docid:photoshop:73c2f658-8871-117a-96b8-816ed2b3b098 adobe:docid:photoshop:73ce0cdf-8b43-1178-b763-fa12b5c41f23 adobe:docid:photoshop:75028756-7094-1178-8861-f01c5d71f134 adobe:docid:photoshop:769833d5-9654-1179-a2da-8ded33f8f350 adobe:docid:photoshop:792c94d2-0b72-11dd-8a8e-b94e9ce47b14 adobe:docid:photoshop:7c9c7c0b-cc71-11db-8d6a-d00242f6a5af adobe:docid:photoshop:7e298480-59b7-1178-aa03-fdef65ba8702 adobe:docid:photoshop:81c74d91-ba73-1179-bafe-92e5152b643f adobe:docid:photoshop:84cdbc17-8dcb-117a-8083-94ed5473f00c adobe:docid:photoshop:856033d5-fa47-11dc-9057-ac5d3de3713a adobe:docid:photoshop:868029fd-2276-11dd-9239-c1a598344559 adobe:docid:photoshop:89e1624f-14f5-117a-8b25-e11d841e16ff adobe:docid:photoshop:8ea3d43d-1029-11da-8fbe-fac890cccc25 adobe:docid:photoshop:8ed6c2ba-c971-1178-9b22-b58fc16e6a9e adobe:docid:photoshop:8f71b61f-f561-1178-8d5d-e693f6abc683 adobe:docid:photoshop:8ff3d7f9-4b20-117a-8202-ff25c1b91bf6 adobe:docid:photoshop:8ff9d64c-4418-11da-b7e6-d902366ee3d9 adobe:docid:photoshop:9217626a-f3e9-1178-8d5d-e693f6abc683 adobe:docid:photoshop:923f0e52-3389-11dd-950c-a80d9ad4456c adobe:docid:photoshop:9292eb5e-6ce8-11df-8d9d-d0d5522d8976 adobe:docid:photoshop:950d7d29-e9c8-117a-b3a6-caff417dcd74 adobe:docid:photoshop:9826dfb1-8dc8-117a-8083-94ed5473f00c adobe:docid:photoshop:9855e9b7-1a77-11e0-a056-a14635721b97 adobe:docid:photoshop:9d09ed44-1a77-11e0-a056-a14635721b97 adobe:docid:photoshop:9d4f0aba-8236-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:9d9714c9-222c-1179-8483-f2b5a59bf528 adobe:docid:photoshop:9f463759-112f-1179-a9f8-efa97d28bfa7 adobe:docid:photoshop:a1dfbdf0-8226-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:a7c6b89b-d133-1179-8378-da34bd2183b7 adobe:docid:photoshop:a845b984-f0bc-1179-8c67-ebf54db54c68 adobe:docid:photoshop:a8f63b8c-cf8e-11d9-8f38-ea3e2d6c58a2 adobe:docid:photoshop:a9870188-8dcc-117a-8083-94ed5473f00c adobe:docid:photoshop:acc06f37-47e4-1179-a1a2-fa65db41d752 adobe:docid:photoshop:acee132a-f48b-1178-af5a-c2239e045fb6 adobe:docid:photoshop:badec3b0-8d9f-11dc-aa6d-fd72ed461365 adobe:docid:photoshop:bb885d59-f165-11dd-b2e7-b55f0ff3594b adobe:docid:photoshop:bcf84d43-1a75-11e0-a056-a14635721b97 adobe:docid:photoshop:c1422350-a306-11d7-ad63-9fa59f868483 adobe:docid:photoshop:c1b701b5-db72-11db-ab1f-df74d7423f7a adobe:docid:photoshop:c4df783a-4b7b-11dc-a30a-e5c2aae6ba21 adobe:docid:photoshop:c57e9e03-ec28-1179-96ce-f8ee7b00a5c3 adobe:docid:photoshop:c7e09394-12a1-117a-983f-c210d342100a adobe:docid:photoshop:ca8bbc9a-8236-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:cc5fe85c-3099-117b-834a-b3d9c0c50471 adobe:docid:photoshop:cc7b3d7e-f521-117a-97e5-dcf766ca3c0d adobe:docid:photoshop:ceaf622f-6ea7-1179-88fc-d69851277464 adobe:docid:photoshop:cf96f18d-a6f2-11dd-b2ac-cac96f638488 adobe:docid:photoshop:d0232e47-ceb4-1178-be6e-d03e1589dfbc adobe:docid:photoshop:d73aea2c-cc9d-1179-8378-da34bd2183b7 adobe:docid:photoshop:d80e687f-1cc6-117a-88df-ca324e587243 adobe:docid:photoshop:d842cab5-8226-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:d9b2e6a0-8ce7-11dd-be12-93c5fb96f243 adobe:docid:photoshop:db4c3739-d291-11de-9902-88725022e8f9 adobe:docid:photoshop:dd0d929c-07d6-11d9-bb77-bfa7c8df5462 adobe:docid:photoshop:dfb0a295-930c-117a-a6f0-bf860b766359 adobe:docid:photoshop:e033cd64-39e1-117a-9def-c47d234ffabc adobe:docid:photoshop:e37abe5b-8dcd-117a-8083-94ed5473f00c adobe:docid:photoshop:e4c364fc-2298-11dc-a3f1-affe78f3f1dd adobe:docid:photoshop:e7e7a68d-3ca7-11dd-a519-f4a69efb17d2 adobe:docid:photoshop:e9189110-d90a-1178-bd15-cec4a4794a8a adobe:docid:photoshop:ea305a0b-fb89-1178-892c-b67b077467b2 adobe:docid:photoshop:eb70db39-5691-1178-8760-845475bc9d7b adobe:docid:photoshop:ec894c1f-44e5-117a-a75a-92e93514a429 adobe:docid:photoshop:ee86b539-ba5d-11db-8dd9-fdce7565c567 adobe:docid:photoshop:f0cdd009-659d-1178-93b7-e226e04886bd adobe:docid:photoshop:f47a68d0-cb24-1179-8c91-f338b8aad741 adobe:docid:photoshop:f80bd6ca-fb88-1178-892c-b67b077467b2 adobe:docid:photoshop:f9b1d5f7-2cb5-1179-9ad6-fa9f523a245f adobe:docid:photoshop:fb97cb81-a652-f646-bb0a-4f290ad14dbb adobe:docid:photoshop:fbf51a48-129e-117a-983f-c210d342100a adobe:docid:photoshop:fd4fdc42-51fd-1179-bc51-b7f39427c097 adobe:docid:photoshop:fe14e807-8226-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:fe58821d-5776-11df-8604-e5ea32f60741 d1d0c1b7-7bfa-7d5b-3c93-1ae800000055 e63b6828-7a46-947f-93bf-35b600000071 uuid:00F94DE476FADE11AFBDDD91A537C5BD uuid:012B2C21C9B9DF119CA8F01C9B0C0333 uuid:02E56BB23746DE118E05E00A924D8CC5 uuid:030793878DD511DB866B8FDD4FC5F6E8 uuid:0459E8C3BF3FDE11BC95B3C2E798CC84 uuid:047C71B83946DE118E05E00A924D8CC5 uuid:049B6674521BDF118174D58534E02F48 uuid:06AE789055C1DC118FCCAFD862EC21B4 uuid:06CADE1FCD57DE119AA1DA9EA00F26D4 uuid:0713D437E27DDE11A717CFED235EBF18 uuid:07218203AADEE011BA4CB639D1A8BD5A uuid:0769202E525E11DC813CFF9D60E9E4E7 uuid:08CD4728BB26DF11BDEEDCA72E0E76E6 uuid:0A139D1E8A5CDC119A05BD94A54C7480 uuid:0A187F65AA46DE11A08FD40CFAB2353F uuid:0A78D988DD5811DC96D5E716A6F2BCF0 uuid:0B00D3552B46DE118E05E00A924D8CC5 uuid:0C3D92C4D425DE1191528DC10A240F5C uuid:0CB3F764639CDE1183DFC60C032A1A9A uuid:0CE6EE4B3046DE118E05E00A924D8CC5 uuid:0E387A182E46DE118E05E00A924D8CC5 uuid:0E6C4060E6ACDC11A31BE2F1875A55F1 uuid:0EC1D3E93146DE118E05E00A924D8CC5 uuid:0F6E42F71D46DE118E05E00A924D8CC5 uuid:0FB789A3B581DE11A2EC895A57B44A35 uuid:1054D978C0E1DF11AA8AB303BFA5E6F2 uuid:106F5789EEDEE011B872DF47B34C9F1C uuid:10D9DC303346DE118E05E00A924D8CC5 uuid:11056C5AF55AE0118DE98213B6FC8AC1 uuid:14BEAC59A02ADF11AECBC7578FA1C8B8 uuid:14C354FB2146DE118E05E00A924D8CC5 uuid:14EE60ED26DDDD11A117C45F206BABE6 uuid:15553F6A9213DB1180BDFBD3D4018BA1 uuid:15578F2F1E86DD11AF96B6D037A279B9 uuid:15C1037383AFDF119792D12E80BC077C uuid:16387A182E46DE118E05E00A924D8CC5 uuid:16F84B7E3246DE118E05E00A924D8CC5 uuid:1733C6F5FF8DDF118C48B1BDE6AABF0E uuid:18D0366CB8D7DE1186C4E1136190F3DF uuid:18F1E4744068E0119FDED406F7D85D6D uuid:19501508E2EF11DD8BECCB6B4552BEA7 uuid:1AC8CB43CD4CDE11B97DD4E9C228A19D uuid:1BAA89B7F951DF119FB4A1AA799452E6 uuid:1C68182A4875DE11A992FD2DC6E9830D uuid:1C79290ECC45DE118B23AD30BCA96A14 uuid:1CB80347CD8CDE11B89AE97826E8DF29 uuid:1CC0A469339DDD1192D3E25231FB5305 uuid:1CF25C713546DE118E05E00A924D8CC5 uuid:1D4243C97491DC11B124BBBDFFB33225 uuid:1D468B5A156711DE9D09B95D7469FFFE uuid:1D6D06A3DC8BDD11911EA1F37D8753ED uuid:1D8B523DC6EADE11ADC7E7A467B4F583 uuid:1D90BE4363FCDA11AA83B543DC89108D uuid:1DACF7EC0F7FDB118282FC544EB61910 uuid:1DC5EA073246DE118E05E00A924D8CC5 uuid:1E11C42A48FADE11AC12D4AAFE286F5F uuid:1E2D9BC292B811DCAC0BD7CFBA286A6B uuid:1E71DF13FDB5DE11B9299E5C971CB542 uuid:1EAA29038AC0E1118F29AE5C429EC6D3 uuid:1EE7DEC2481ADF11905AD1E5E7183152 uuid:1F5AF3B67229DF119FFAB26E240C71BB uuid:1F95AC394748E011BC12ECADEA413AA4 uuid:20323DAF3833DD11B84DB153FFCB2B25 uuid:207301A58CA7DF118484999423E4131A uuid:20755CD9A1BEDC11AD9FC86910038926 uuid:208C44507E13DF11882FD35504085383 uuid:20AD1BCA27D611DCB3DCF58CB1282188 uuid:20DD6643FAC6DB11A46EA4B49D2FDE5A uuid:226AE9E80D1CDF11ACEBF49C1510D7E2 uuid:226B9A3C4F5ADC11974DCB5CB1741D28 uuid:227BDC9B2FAADC119028943FDADC2D16 uuid:22B35C622246DE118E05E00A924D8CC5 uuid:22C16BAA5AF3DE11B11DCE9D526E88E8 uuid:268662FD552E11DBBFFDB36DCBD91ADF uuid:274576122FD1DE118F62D3B3027678AC uuid:27D3988D43DEDD118DB9EA210F03F4FF uuid:27F89F1127E2DD118645D3FA1066C7BA uuid:284D341C3746DE118E05E00A924D8CC5 uuid:287E0A511147DF1182CFA37314C5741C uuid:28B85E6492B811DCAC0BD7CFBA286A6B uuid:28D7BAFB5941DF119834F2062A2299DC uuid:290B84B52146DE118E05E00A924D8CC5 uuid:2A0921B9216DDD11A727A67773091824 uuid:2B1B9EB9E0A7DF118484999423E4131A uuid:2BB5F42D6A61DF119385A77469CEFB4A uuid:2C205C7E8234DD11A069BF111D61B76C uuid:2C2589466F13DD119981999D14D29795 uuid:2C4F78A7552E11DBBFFDB36DCBD91ADF uuid:2D49D4CEE050DC11A516F388F9DC85B5 uuid:2DBDD1BFCE1DDF119ABEC149331D314D uuid:2DBF74503C01DE119EDBA14779040E1A uuid:2F8B1048D214DE119F7CD744AFE539FE uuid:304D341C3746DE118E05E00A924D8CC5 uuid:3074DC40A7E4DD11856FC35EEE701F57 uuid:316F2F24AA37DE1185B29A009951A745 uuid:321509A7D910DF11B6259E6E49F0C069 uuid:328C2A23A1F3DE1188FCDC0D4534976A uuid:329EBF14943111DB9A19BF196009E84F uuid:32AD901C1540DF11BA22EB8390E427FA uuid:341082F743EADD11A0EAF6E3C3C6C660 uuid:34874C6274B4DF11A9BB90F255F0AFA1 uuid:35C28732F068E011BAE4A0F3F205CB0C uuid:369E727FB04FDE119777A241E1132B43 uuid:36CC338DBF03DE11AA85DC89D1FCF295 uuid:37AFEA6DB860DF11A63ECDFC2A710CBF uuid:382227419650DE11828EB79B7FF87B46 uuid:38EFEBD32C46DE118E05E00A924D8CC5 uuid:395B108AEC5FDE118F3EC99520DEB99E uuid:399642B01C46DE118E05E00A924D8CC5 uuid:39A85F352346DE118E05E00A924D8CC5 uuid:3A4677815E29DF11A0B087DF897F5C56 uuid:3A4F51BF7911DE11A781FBA8671F5E89 uuid:3A5020F1699EDE11B900A5C128F3E190 uuid:3ABA64685F64DF11AAC4DB43091F0E94 uuid:3BF230DABEACDD11889FAC5282935681 uuid:3C0D38C2AFDEE011B945C4A423A57949 uuid:3C3D324F854EE111A538AD64C05F60F2 uuid:3D5103E655A5DF118996AFF35D6A9C7A uuid:3D90B6044FC611DB95D9A98C0E2341EA uuid:3E5C8557AE51DC11A6E5B79CC593882D uuid:3ED246C8D77DDE11BF1BC86AD7862F57 uuid:3FAAB31DC7F3DE11BFB3BB61AE1A198B uuid:4005975a-5da0-4d02-9be8-d1b06d67a1ac uuid:4017B42DAECBDE1186239E156231D83C uuid:4062B740431FE0119F84DB1DBEC49892 uuid:40BA64685F64DF11AAC4DB43091F0E94 uuid:41A85F352346DE118E05E00A924D8CC5 uuid:42A5C6F1B041DF1190BE881BF8159F39 uuid:4309D5C780DEDE11AC699E8548A45E2E uuid:438D9E113046DE118E05E00A924D8CC5 uuid:457D02955055DF118B59D959D9FCD50B uuid:45B952D1A760DD11B3A3AB60E7CB2E32 uuid:4610D2BB5C3ADF11A1E0EE016E9F3D12 uuid:46B070169EABE011BB42E88B754C4AEE uuid:46E135E06305E011A766E5F2293E7D86 uuid:46E5046B7D79DD11B6DAD14729559D83 uuid:470A5501BE9DDE11A857E42B002C9929 uuid:4733F7484068E0119FDED406F7D85D6D uuid:47459a6b-c7a1-4760-9b31-03a412c42d2e uuid:47DE5278F52CDE119FB3CAAED746FE94 uuid:4814E5FE3F68E0119FDED406F7D85D6D uuid:488E7D216417DF11AB3096DB59BE8278 uuid:49E8A66A3BB5DE11809BA989B0D77432 uuid:4BD64E3D591ADF119A44816E426D14CC uuid:4D09B0846C29DF11843DE8ED84598CA3 uuid:4D47530DBFB1DE11838CB79BB029C533 uuid:4DB2B99C3246DE118E05E00A924D8CC5 uuid:4E28CD0BE5B0DE11ACB3A4B3E9D809A9 uuid:4EF1A0598169DE11B44DA6B533A93812 uuid:502ADD3C8B13DD118EA79BEFBD19D7B1 uuid:502D4D912B46DE118E05E00A924D8CC5 uuid:5041A4B205CAE1119280EF88F1AD6DCE uuid:5085FE1C5CF1DC1184999B2D473B40C5 uuid:50A5F355BC4BDF11A8A3F6410E93A61A uuid:50E84CF066E1DD11B9EAA8996A8875F3 uuid:51777E30ACD7DE11A1AE8A388BF11FDB uuid:51A11EEB85A7DD11A19786A77EB54A52 uuid:52A5D3054338DF1190DAEFCE2D940955 uuid:53E437D50797DE11B2DABAB77D7740BE uuid:553741FD253DDE11B79699D43EF0912B uuid:556D58241B1CDB1189D5B5EC4E3A9E38 uuid:5577922C3846DE118E05E00A924D8CC5 uuid:557E3B3CE135DF119278D380A54DDC5A uuid:55D6F1754F30E011AD3DAFFDB99E65D6 uuid:565C30D43A08DF11A61DB227EDDF59F8 uuid:574487634068E0119FDED406F7D85D6D uuid:57659E439232DF11A17C9479A9CEE277 uuid:578299FCC3D0DE119465B96E3C2E2EAA uuid:5842F809ABEEE011ABB4E3369A661A4E uuid:58B81ADF0E84E011BD87EEE6520C6C5A uuid:58E283D07B07DF11A38E90866D1E8B9A uuid:5975A572B4AFDE1191F9D38249749CE2 uuid:5A79E0672746DE118E05E00A924D8CC5 uuid:5B0CD778CF24DF1182C1B3E1B6A83EEB uuid:5B5A903A8F63E0119B87E6FF75E31714 uuid:5B6CC28AD15EDD11B9AE8B3F0765C8D0 uuid:5C7449A48B91DC11831FEBD781B6ECB9 uuid:5D0C528FBA46E01183C8E802910C25E8 uuid:5DA6CE83324911DEA1B296A980BFAFA4 uuid:5DA8DC4F4068E0119FDED406F7D85D6D uuid:5EBC258199EAE11189C2DA1478C8C9F2 uuid:5F50494D7C49DE11826FBB70EB840DDA uuid:6023AB90E5C2DE1182ACCFD916FE2252 uuid:602E96167548DF11B95593FEFB4F0A8F uuid:60AD1AEAF96CDF1185BBB7D7C9ACD7A0 uuid:60BCB4D66DD6DD11A47DE4DAE0EFF793 uuid:620AF59A6568DD11A7E4CCA02A14236A uuid:62125b08-dfcc-5f4c-8dc1-0da856e0f01d uuid:6367FD463646DE118E05E00A924D8CC5 uuid:63C475A288ED11DEB3FFF614CCD16C87 uuid:643CC20F0784DE118129C567E005B28E uuid:64DB642D4068E0119FDED406F7D85D6D uuid:65169CCB345EDF1194C8D9F78654422E uuid:653189661AF3E011BBDBAB44F74D79AB uuid:65A58184AD03DF11BA1CFE2E2459F90E uuid:66211d2a-e75a-6349-9313-114dc4ac619f uuid:66E770C8D883DD118567FD7DB7D1FB68 uuid:674D5E42B2DEE011B945C4A423A57949 uuid:68A5D5BB62AEDE11A47ED578D60FD7A0 uuid:68DDFCCD377FDD11958095E49FBC919E uuid:6922E29B5985DF11B4779C1A60E25466 uuid:693BEA6CB8A6DF11A082860CFDE3F28E uuid:6AD4462FB204DD11A4539B8A658B95AB uuid:6B26E6F714A3E011B8F2B39CADF8C7BD uuid:6B4D5E42B2DEE011B945C4A423A57949 uuid:6B7A055DBDC7E111A53C831232D3A23E uuid:6C0E21EBFADEE211A79B815621E1988D uuid:6C1CEE99FF0CDE118B60808686D1CDA6 uuid:6C707EB54C4EDF119BF69F5E7CC385D4 uuid:6C790A9D4BE3DE118E6DADF5320C3FFC uuid:6C875D7786AD11DBA35CA8F2CCD0B6EC uuid:6E43BDE8FAA0DD11A8C7800146D9F2FD uuid:6EDB09A4EF99DC119FDAE1E6C9E90D52 uuid:6F0C51E18A5FDF11B6C6A84C08FFDA77 uuid:6F5C782E2C9CDC11908C9ADAF87FE933 uuid:6F6B5088FBE2DD11A6C8F176CC65539D uuid:701F0AA1DC0FDD11B6B0DA6D17610842 uuid:71B724FCE7D1DC11AB7C8BDDCD744643 uuid:72AD3ED38871DE11907DD58D2A428021 uuid:735432F83446DE118E05E00A924D8CC5 uuid:742FDDCAF0BF11DB96ACAB58D2874C3B uuid:746583581EC811DEB82CD8B338B01D3B uuid:748FBBC54761DE1199DC9982344E391A uuid:749D6D724068E0119FDED406F7D85D6D uuid:75889B152262DE11A72AF16963CD89BB uuid:75BA6EE02846DE118E05E00A924D8CC5 uuid:75DCEEF5501BDF118174D58534E02F48 uuid:75E80B316579DF11A939CB8B2C636ED9 uuid:7680F61BA84CDE11B97DD4E9C228A19D uuid:770D862D4C8FDE119D83C7C6AEBAE849 uuid:7726580E30E0E011A0DFF1A921A77D14 uuid:785BF1A33D44E01196A9FDAA302A4A52 uuid:786CC4073C01E011B40E84D550759E70 uuid:787B3D0F0C07DF11BF3BE2D4EE658A9A uuid:78948929B329DD11B93AF0E4356E33C1 uuid:79D399B24B31DF11B87EB9B2F774C66B uuid:79FB58E1457EDD11B5E5F51B3ECD7F8D uuid:7A1A8CDA6753DE11AEE6B02826E52418 uuid:7A249F7BFEACDF11BC6E8D04CFB3FC6C uuid:7A53A07034E0E011B6EAB49C9ED7F21C uuid:7A7765743160DF11B7058CDA462E88D0 uuid:7AC55A0AFA7DDD11BDB4D1FB4F0D7360 uuid:7BD3EA794068E0119FDED406F7D85D6D uuid:7C0400B9C2E7DC118D17CCC8742E2E78 uuid:7C2C58D33BF4DF119099AEAF17DE7CB0 uuid:7C66DA44A194DF11953AEBEFD43548AA uuid:7D82A4D9F538DF1189AFCD2729466985 uuid:7DCCEB3E9D0DDF118A1BD62C0D068F40 uuid:7E53A07034E0E011B6EAB49C9ED7F21C uuid:7EBAC78415A3E011B8F2B39CADF8C7BD uuid:80DECBBD2846DE118E05E00A924D8CC5 uuid:82B09529C90ADF11823FC380DCAC210B uuid:8399DE7F5857DF118DBFEADEC8C6EE8D uuid:83C325A3A321DF1195F7D775DE55B86B uuid:8418B9F71B19DE11ACD1FD0D79D1C48C uuid:8426B111521BDF118174D58534E02F48 uuid:84BF1E98A360DE1194C18245487266E3 uuid:85657AA00A3BDE118C7B80D673026507 uuid:85CD4D720061DF11A70ED672DFB72836 uuid:862A63584068E0119FDED406F7D85D6D uuid:8631318ED591DE118BB0E5D058A15FA6 uuid:863D29600E91E011B7E2BA43D2041D1F uuid:86931125389ADF119BE6A44B39062E37 uuid:86CECBFFD057DD1195779C82C766E2BF uuid:871A6276F573E011AE93F71A5E985A91 uuid:875146C793EDDE1183CCC07478F94319 uuid:88218060511BDF118174D58534E02F48 uuid:88682ECF5FDFDE11B366D9EF74DE4B3E uuid:888EFC12BBA4DC11A788F61F464F954C uuid:88CE3D8F2439DD11A66DB600D9CF90B7 uuid:896C0FCBDA32DF11A473B21C49D1757E uuid:898E836CC506E011973AA3E34433134C uuid:8998E2FC5D81DE11AB10E18A368CBC72 uuid:89BB70853646DE118E05E00A924D8CC5 uuid:8A11E9BE7386DE11B4B7BF4FEEB6C4AC uuid:8A4E276E4068E0119FDED406F7D85D6D uuid:8A8991253246DE118E05E00A924D8CC5 uuid:8AB3B33B3292DC11928CDAE88FF0982B uuid:8C632C6BE825DA11BB67F40C32FA7FCF uuid:8C8B4F317E1ADF11BABCD74472CEE0AE uuid:8CB31ECD3546DE118E05E00A924D8CC5 uuid:8D62E5C5F946DF11A1ACBC2CD660C212 uuid:8D7AA070E811DE118FA6A4E77BBB6065 uuid:8E3257BC3446DE118E05E00A924D8CC5 uuid:8E4A02013946DE118E05E00A924D8CC5 uuid:8EE9A34EA4F2DD118D41CFC42384EA08 uuid:90A480022946DE118E05E00A924D8CC5 uuid:90ADF7D5398A11DF86119436A17CB227 uuid:91BB70853646DE118E05E00A924D8CC5 uuid:91C6B9DD7D1ADF11BABCD74472CEE0AE uuid:91EE4D01FDA9DD118555BD7879927BCB uuid:91F0CEF1AE15DE11A231A30135997DBF uuid:920948E8D2A3DF11949EEA82414C67FD uuid:92A915031500DF11BB2DEF8A127C4B09 uuid:9328FB1C2246DE118E05E00A924D8CC5 uuid:93312F3A9EABE011BB42E88B754C4AEE uuid:9369042C2F46DE11BD9EE5A6639A625F uuid:93B74885F527DF11881EA6879E79C74F uuid:93E8AD8CBD32DC11BFE2E5D6CE581572 uuid:93EAD89D899BDF11AE2DCAA2C8CB51A4 uuid:93F0839448B2DE1191C3C665BC9BDA99 uuid:94B31ECD3546DE118E05E00A924D8CC5 uuid:952A33247B74DE11BBA19E5AEE919C47 uuid:9548C8CDA0C4E111885CFACB1816B759 uuid:9603F6864F22DF1191BA98E3D07EA6E2 uuid:96371900588FDE119D83C7C6AEBAE849 uuid:964D6FC3F9F3DC11B7B787F67A8DC675 uuid:970A6C5B4BD3E21182F587E84CA84904 uuid:97E23D2C4B12DF11ADBDB3D48DA81215 uuid:982703D5AFDEE011B945C4A423A57949 uuid:98286303A71FDD11ACEC89ACF33BCD0B uuid:98A480022946DE118E05E00A924D8CC5 uuid:99010F2A6CC6E111893780B4C7AFC53B uuid:999D0ED6592CE011875FEC74EAED3B90 uuid:99A724EF2246DE118E05E00A924D8CC5 uuid:99BC43C5789DDF118943EC7D2E89C0BA uuid:9A4E3BC73346DE118E05E00A924D8CC5 uuid:9A7015542E46DE118E05E00A924D8CC5 uuid:9A852FC218CADC119D59B5BD9DB71E82 uuid:9AE21B6B4F85DE119FE5D398F21A4413 uuid:9AE370AECA4CDE11B97DD4E9C228A19D uuid:9B8169013A6CDB11BEEFDD803C4CB37F uuid:9BE8EC49A14CDE11B97DD4E9C228A19D uuid:9BF5559A665FDF11973ECC6C97C6FBC5 uuid:9C427F29C23BDE118624AC3C981C00EB uuid:9C4C17673BB5DE11809BA989B0D77432 uuid:9C7A205CD18EDF11A2A3EC46B0BAF7B4 uuid:9CAA42ED449EE1119B11A0465C2BB21F uuid:9CD5E901D812DE11AEE8B3F8B620A760 uuid:9DC3029D1D46DE118E05E00A924D8CC5 uuid:9E41B67C0FDFE011B872DF47B34C9F1C uuid:9ED58FA75D9BDC11A06AF98D3B9E72A9 uuid:9F71A1DF3646DE118E05E00A924D8CC5 uuid:9F806D3C2EBDDD11B5C4F8B50A58BC7A uuid:9FF76A7D9582DE11BB37BEE3126CDD63 uuid:9f5c4b97-3b6e-4ae1-959f-7c5d1aec2f6b uuid:A03CCF649B0EDF11A0D29729EA0AB6B0 uuid:A0D36E10BEDFE011AE6BCFD5A31C68AD uuid:A18701B4B2DEE011B945C4A423A57949 uuid:A270FE72B2DEE011B945C4A423A57949 uuid:A3A81857CEB6DF11A9D8F81D08128070 uuid:A3D4E0CE6EB2DE11A3E88ECC758FEEAA uuid:A3D6B47F18B2DD11919198E04079117F uuid:A497BB98164EDE11B97DD4E9C228A19D uuid:A52B2BE2D504DE118532A753628E9587 uuid:A52FE0D63946DE118E05E00A924D8CC5 uuid:A5A8AA5D6C24DF11A4ABD68E07A82832 uuid:A6243BD58D77DD11AD11D198EF8B0946 uuid:A66D327A3BBF11DC8215ADC1775D44BC uuid:A6B8A16E3BB5DE11809BA989B0D77432 uuid:A76F7547765FDF119F61C543DD152838 uuid:A8C3643B4068E0119FDED406F7D85D6D uuid:A9005AAE8A7FDF119CD6A0C6AE1D8074 uuid:A98FCD856D55DF11BA0E9527DA9EC859 uuid:AA4A851C4015DE11BF3DB3E00C8561B2 uuid:AA8E7E94A00EDF11B1CCD399BC96A2AC uuid:AB0C0C914333DF11A8E6A38A5488C1F3 uuid:AB548945339ADF119BE6A44B39062E37 uuid:ABC988A0D0C3DF1181D8F87795C0EBDC uuid:AC7E2C1F2747DE11AB48C7C86FE713E7 uuid:AD821971DBB1E01196138AFFE013C41F uuid:ADB8A6342EE0E0119500C872373672E0 uuid:AE363A6BEA4EDF1192DBF5680431570F uuid:AE5BE486BF77DC118A089E5735CF5EB9 uuid:AFE5E935C3DEE011BE5CDB1A796662A8 uuid:B00D84D55063DF1183BD84419D5831DE uuid:B118FD9C3446DE118E05E00A924D8CC5 uuid:B1A4640B7669DE1196BFC8AFC0A33111 uuid:B29926BF0864DE11A0E0B64900D2D6E4 uuid:B3D4585C2887DD119E3BBBA19C68A90F uuid:B48CC374F6E2DC1193D6E593F704EF94 uuid:B4EC9A2F511BDF118174D58534E02F48 uuid:B7F8325E92B711DCAC0BD7CFBA286A6B uuid:B7FA54C069D3DC119030EB72FE5773AE uuid:B850031313CDDD119358D3EBF934974E uuid:B854A2A773DFE011A3EAB924634D1234 uuid:B898B90B9F34DF11B05AD64FBE091CB8 uuid:B93D03A93346DE118E05E00A924D8CC5 uuid:B971000E3AE0E0118D54AF7EA314E301 uuid:B9CB04B7B3EA11DDA4D19CF0B52D258D uuid:BB1EF37481E8DC118DF8881DDBB15AA6 uuid:BB2A2B6A1D95DE119509E343DAAE56D4 uuid:BB977796CA86DE11B7F5E2F3C7B268AC uuid:BB99ECC03C4DDE11B97DD4E9C228A19D uuid:BBBD1CDA74B211DCADB9BB0FA94B2550 uuid:BBEDBA0D582BDF11A0FBCEFD438DC47E uuid:BDB9AD774068E0119FDED406F7D85D6D uuid:BDE7D3ADA44ADD11B942826B91B46D31 uuid:BE5566532CD511DAA7C7845CE1882A45 uuid:BE58D2C88D64DF118A2DED5F2E097091 uuid:C0AF6874BFFEDE11BA268E9760F6C405 uuid:C0B5F1C91213DE11A2B4922B25F7AFC9 uuid:C257517D1F40E01191FAE760C1DD11A6 uuid:C2B48C89AD4CDE11B97DD4E9C228A19D uuid:C4E9DB94260FDC11AB12D20A37566895 uuid:C7E7F377FF03DD119B39CDE1869E1E97 uuid:C86C30CAF7B5DF119A7FC51EFA65364E uuid:C8E2FDA62246DE118E05E00A924D8CC5 uuid:C9B6F2E7E44EDF11BAFDAC7CDC373421 uuid:C9E6670A7191DD11A3FAF2032831011E uuid:CA4E034E7E1ADF11BABCD74472CEE0AE uuid:CAB627967F53DD11AD30F63A5EA15C8F uuid:CC18FBD9041CDF11ACEBF49C1510D7E2 uuid:CD8BCACE98BCDE11AE26F9D1FD1B7E18 uuid:CE5A4F4F5DB8DF11A53AA0E9AB1C70AF uuid:CE850F17235911DDB8A999939B027CA1 uuid:CECC404C96BCDE11AE26F9D1FD1B7E18 uuid:D05D7C33AB33DE118637C36CB3E61300 uuid:D139A811B9BCE1118B19FE3FEACB1776 uuid:D451DE000104DD119B39CDE1869E1E97 uuid:D5A43BCE2446DE118E05E00A924D8CC5 uuid:D61A80E9E8F5DD119401ACC22D05F8D9 uuid:D62220B4D76BDE1185E2922F624AD9E5 uuid:D623E2FCCB44DF11A659990446779642 uuid:D656D3D3E432DE119E86FDEB6DD68594 uuid:D65BCF04EBA3DF11AEC8ECC4B4DD4F26 uuid:D6EF40FB5568DF11AE2DDE167B97FDBE uuid:D76A99DD2D46DE118E05E00A924D8CC5 uuid:D7EA3DE6D180DE119B78A1EBA7135A77 uuid:D883139A2F46DE118E05E00A924D8CC5 uuid:D8D88832C306DF11AF8AA587C3C1C2B2 uuid:D9C0F8FB9C90DE11AE0AC26550418DE9 uuid:DA0E56BC6EF4DC11AC2380CCB6841119 uuid:DA29F8D63833DD11B84DB153FFCB2B25 uuid:DACB42AC0D57DF119E6183A921B60F6D uuid:DC8074239110DF11856FF25F8996A646 uuid:DCAF95EF5418DC11991D9081DD0FA550 uuid:DCF2F321362811DCA14E914CEB339C56 uuid:DD3643D13746DE118E05E00A924D8CC5 uuid:DE2B51B51DDFE011B872DF47B34C9F1C uuid:DECD4BBE0497DE119509E343DAAE56D4 uuid:DECF2A805A66DF11B9B1ECE1676A37A8 uuid:DF3E6C248070DE1182A4E4822D1896D0 uuid:DFFAC8748B60DF11A5D6C5494D1F118F uuid:E167BAFFEED7DB11B9DAB4F00264E51B uuid:E17A1128166CDF11A85DDBD0BB17D8AD uuid:E1EFA889B9B2DE119ADAFFBED641D007 uuid:E37FE4776651DE11B0FF904ABD7E9C78 uuid:E3929869DD21DF11B9B2ECE08EF5C69A uuid:E4B7DEE9001FDF11B6BDAB31141CBAD0 uuid:E5D64E1F241311DDBF50C49E22072263 uuid:E687B8E3F9ECDF11B076F4C39C2F9754 uuid:E710B34B5B4EDD11AB3CE178BC4308B3 uuid:E726AB67A1D7DE11A1AE8A388BF11FDB uuid:E79A4A832DE0E0119500C872373672E0 uuid:E8711942FCD9DE11BEB2B63538B485CF uuid:E8E53D5DDD52DE11A63583E5225DA4A2 uuid:E9452F6F5948DF11905DF72F6E27228B uuid:EB01B3383110DF118ADBB50293FFA6F8 uuid:EB69B1888606DE11B380C9DFFF5EDB6B uuid:ECB78735274DDE11B01EEA9B67CC9BAE uuid:ED8D85735E42DD11A1DCD26843D97074 uuid:EE8CBA0F2D46DE118E05E00A924D8CC5 uuid:EF9A4A832DE0E0119500C872373672E0 uuid:EFE92B5982DFE0119780E3E617CFD216 uuid:EFED9F6D3BB5DE11809BA989B0D77432 uuid:F05F673E364EDE11B97DD4E9C228A19D uuid:F062A97EB0E4DB11BA0FAD538E703B21 uuid:F10C79062C46DE118E05E00A924D8CC5 uuid:F4414A038842DF119DE2BAF8DFB739C8 uuid:F4BCB835CD84DA11AEE3C92BF541D7B5 uuid:F5E54A230C69E011BAE4A0F3F205CB0C uuid:F626B67D8860DF11A9018B722DA7EE55 uuid:F68CBA0F2D46DE118E05E00A924D8CC5 uuid:F6D3A7D09955DD119A1384B593846576 uuid:F7092FDE564ADE1192A1FA09F9E14EEB uuid:F77407F55D54DF119202A9AAB05A8271 uuid:F8838F0B3646DE118E05E00A924D8CC5 uuid:F8C8948B2946DE118E05E00A924D8CC5 uuid:F97486C1E24FDF1183C7996710D099DC uuid:F9C28AB70279DE119AF4C11AE6D6D880 uuid:FB1609F90E82DC11823EA128E7E343BD uuid:FBA00D4B4068E0119FDED406F7D85D6D uuid:FC6284395CDFDE11B366D9EF74DE4B3E uuid:FD3CAB94E740DF11B86BCA79B8B8B185 uuid:FDFB2655A937DE1185B29A009951A745 uuid:FE4E366D55EBDE11B73DBE257B556A3A uuid:FF79D4767969DF11B0C7F2016358B619 uuid:FFE4355518A1DE11B97A955C1491AF1F uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b xmp.did:006B7D713E266811910997920F9A7541 xmp.did:00C055892E236811994CF266AE840D71 xmp.did:0110202EE396DF118C25A47F181081B4 xmp.did:0153B9CE159BE011A42DEC14C3EFCAEC xmp.did:01801174072068118083F8C3CE47E75D xmp.did:01801174072068118083FA9F955E2000 xmp.did:0180117407206811822A9F612A2031F0 xmp.did:0180117407206811822AB39B51EE88E3 xmp.did:0180117407206811822AB866C820C36B xmp.did:0180117407206811822AD60320B266D3 xmp.did:0180117407206811822AFEDD40772A0B xmp.did:018011740720681183D1ADE5B0809869 xmp.did:0180117407206811871F8EA3F2A2AE1D xmp.did:0180117407206811871FA7DDB6344DDF xmp.did:0180117407206811871FB00796AB80FF xmp.did:0180117407206811871FB065EFBB6B2F xmp.did:0180117407206811871FB222890A0E4A xmp.did:0180117407206811871FC852CC88A456 xmp.did:0180117407206811871FD658CCC190C4 xmp.did:0180117407206811871FDB7C73EC7AF4 xmp.did:0180117407206811871FDDF97733816A xmp.did:0180117407206811871FE8DD2340C0B0 xmp.did:0180117407206811871FF1961D211D67 xmp.did:0180117407206811871FFBB65EC420B1 xmp.did:0180117407206811871FFFE0F6FD6607 xmp.did:018011740720681188C6808AE1FD4ECD xmp.did:018011740720681188C684EAF6EB3EED xmp.did:018011740720681188C68CC6C803710E xmp.did:018011740720681188C6A2A17C791225 xmp.did:018011740720681188C6C612837B0247 xmp.did:018011740720681188C6C8FB64E3077F xmp.did:018011740720681188C6CD649893B632 xmp.did:018011740720681188C6DEB6A7380E02 xmp.did:018011740720681188C6FD88E3797378 xmp.did:01801174072068118A6D856087352BA7 xmp.did:01801174072068118A6D894AE997EB0E xmp.did:01801174072068118A6DF13459D8D59D xmp.did:01801174072068118CE8FAB7EAEEF1DA xmp.did:01801174072068118D47F87005A1FB05 xmp.did:01801174072068118DBBC14F0DD2168D xmp.did:01801174072068118DBBDB6A29937FAD xmp.did:01801174072068118DBBFE8AC30FEF37 xmp.did:01801174072068118F62C5774A079733 xmp.did:01801174072068118F62DBC328695FC3 xmp.did:01801174072068118F62EB2ADE46D273 xmp.did:0180117407206811902AD3FB78EFDDF9 xmp.did:018011740720681191098FD20CBDF1C4 xmp.did:01801174072068119109A63E4750EBCF xmp.did:01801174072068119109AC6131693E65 xmp.did:01801174072068119109AF3A50E294F5 xmp.did:01801174072068119109BD18F96FE5FE xmp.did:01801174072068119109D8AADCC33AE2 xmp.did:01801174072068119109DAEE9E19A282 xmp.did:01801174072068119109E8810C5BC784 xmp.did:01801174072068119109F159FF60CA6C xmp.did:01801174072068119109F305646EB57D xmp.did:01801174072068119109F541586A020D xmp.did:01801174072068119109F981883825E0 xmp.did:01801174072068119109FA297A7A5904 xmp.did:01801174072068119109FA9234D88D4E xmp.did:018011740720681192B08AE26BD827F7 xmp.did:018011740720681192B09184D5478EBC xmp.did:018011740720681192B097F0C9D8B91A xmp.did:018011740720681192B09C403CFF3A3B xmp.did:018011740720681192B0B9E1C2ED049A xmp.did:018011740720681192B0BAA904DE0F8D xmp.did:018011740720681192B0D93A7E1A012D xmp.did:018011740720681192B0F39C7BC094AF xmp.did:018011740720681192B0F77B00BE432A xmp.did:018011740720681192C7D0F81AAEB882 xmp.did:018011740720681192D8E7A64109317F xmp.did:0180117407206811956CDA996C733812 xmp.did:018011740720681197A5B386C33BAD50 xmp.did:018011740720681197A5DAF2583A0A4B xmp.did:0180117407206811994CEBF7BEB94108 xmp.did:01801174072068119A889F688513D349 xmp.did:0180117407206811A610925F68191C15 xmp.did:0180117407206811A7BAE496507CC015 xmp.did:0180117407206811A81C97AE71B8FB6D xmp.did:0180117407206811AB08876C20321FD7 xmp.did:0180117407206811AB08895392A55D1F xmp.did:0180117407206811AB0891B79122B22D xmp.did:0180117407206811AB08B40A0C00B04E xmp.did:0180117407206811AB08E8E8EE3F0289 xmp.did:0180117407206811AE569E92DE925BD5 xmp.did:0180117407206811AEC7ACE16F2ADB0F xmp.did:0180117407206811B08BC34CD0822428 xmp.did:0180117407206811B18DCF75FC771844 xmp.did:0180117407206811B1A481173F3B2091 xmp.did:0180117407206811B1A4C38293BFDEA8 xmp.did:0180117407206811B34BBA3E1B4D7703 xmp.did:0180117407206811BA06DE2D23900A1F xmp.did:0180117407206811BEEAF2CDF8DA2015 xmp.did:01C66F18E5C6E011BEF0A37AC8AFF6B8 xmp.did:01D3BC0A0398DF118E0DFBCC39F1D70C xmp.did:022dc868-1507-41c0-824e-41d674b1319b xmp.did:024F733C4CD9DF1181859156DDB527B7 xmp.did:0274AA50BBD9DF11BFD1959D5E34049B xmp.did:027CDBED1E37E2118E37E38874568DAA xmp.did:028011740720681180838D197B87AF60 xmp.did:0280117407206811822A89FBD66CBFBB xmp.did:0280117407206811822AA27048748FF2 xmp.did:0280117407206811822AC92D39C1A3FB xmp.did:0280117407206811822AD60320B266D3 xmp.did:0280117407206811822AEB04528113D6 xmp.did:0280117407206811822AFEDD40772A0B xmp.did:028011740720681188C6A298443F10AC xmp.did:028011740720681188C6C9584A0CE4D6 xmp.did:028011740720681188C6EA7AFA84B3CB xmp.did:028011740720681188C6FDE500FF8673 xmp.did:02801174072068118A6D9937AF694056 xmp.did:02801174072068118A87FFDBA1F29826 xmp.did:02801174072068118BAACF3C48947CCA xmp.did:02801174072068118E8B95801AA5B653 xmp.did:02801174072068118F62CC84EB2E7047 xmp.did:02801174072068118F62CEC5F85B70E9 xmp.did:02801174072068119109AC6131693E65 xmp.did:02801174072068119109C2F3FB4CA0CA xmp.did:02801174072068119109C65A70401340 xmp.did:02801174072068119109C94BE3FB6395 xmp.did:028011740720681192B0C3F69947135E xmp.did:028011740720681192B0DEBFF74CEF5E xmp.did:02801174072068119457F50BDC4298B1 xmp.did:0280117407206811994CDFAA02EEDD50 xmp.did:0280117407206811AC988E10CC0CC7E7 xmp.did:0280117407206811B840C1437888502E xmp.did:030428C019206811822AE759717D91E5 xmp.did:0353F14DDC94DF11ABF3CD52E6909B56 xmp.did:035E52685643E411ACBAC8B0A8AA20C7 xmp.did:0378c2c8-520d-46ae-b8b7-cee2bdf7d76e xmp.did:0380117407206811822AD4CF427E0C0F xmp.did:0380117407206811822AF51F8ED7C6BD xmp.did:0380117407206811822AFEDD40772A0B xmp.did:038011740720681185A8B6800FF3D966 xmp.did:0380117407206811871F81E8BB0F82E6 xmp.did:0380117407206811871FFAC63C818640 xmp.did:03801174072068118A6D9937AF694056 xmp.did:03801174072068118C148F91BAAD2FBA xmp.did:03801174072068118F62FA26B1D2377A xmp.did:03801174072068119109E219C1666972 xmp.did:038011740720681192B08C886B6D489C xmp.did:038011740720681194288658274AEA5E xmp.did:038011740720681197238F25F2FFB081 xmp.did:0380117407206811994C93DD028C14EE xmp.did:0380117407206811A237BBC8AE7066D6 xmp.did:0380117407206811A7D4DF8188E07E2E xmp.did:0380117407206811AEE4ECC20A5D0880 xmp.did:0380117407206811BD209C3F4437B116 xmp.did:04801174072068118083C706F6BEB857 xmp.did:0480117407206811871FF0EE6AD5790B xmp.did:048011740720681188C6BBFAF87E6B92 xmp.did:04801174072068118A6DEC27AEB5D46C xmp.did:0480117407206811910999E172ACEF41 xmp.did:048011740720681192B0D5FFEB04FCB9 xmp.did:048011740720681195FED5E9D317291E xmp.did:0480117407206811A6D9CABE601DD596 xmp.did:04BB01059CF711E08A9C913C073A663E xmp.did:0502f4ef-f38b-4a0a-a125-965ff68b1388 xmp.did:05256611-aecf-497b-9eff-1eccb88d83c8 xmp.did:058011740720681180838D77FED7457F xmp.did:058011740720681180B4DB6FCDC6F1A9 xmp.did:0580117407206811822AEA536F1C3DF3 xmp.did:0580117407206811871F834B9271D32D xmp.did:0580117407206811871F9617A759D4E6 xmp.did:0580117407206811891D9A76213AD321 xmp.did:05801174072068118A6DD609E27E3F7C xmp.did:05801174072068118F628C5BC7FF1E1F xmp.did:058011740720681192B09470F75BAE8F xmp.did:058011740720681192B0B03D2B78CFDD xmp.did:058011740720681192B0DDB9BBC21E83 xmp.did:058011740720681192B0FBBF273EF816 xmp.did:0580117407206811A440DAC4D3AECDA0 xmp.did:0580117407206811A7BAADB4251DCAF5 xmp.did:0640E5627B98E2119714D61484E4827B xmp.did:064318E581A6E01198E4BABA0C846270 xmp.did:06801174072068118083D55D211AA6F0 xmp.did:06801174072068118083F13AB35667FD xmp.did:0680117407206811822A9410014BA74F xmp.did:0680117407206811822AE1141364385C xmp.did:0680117407206811822AEB04528113D6 xmp.did:0680117407206811871FC852CC88A456 xmp.did:06801174072068118F62FD9B9E717B6E xmp.did:06801174072068119109B5757D1049F7 xmp.did:068011740720681192B09470F75BAE8F xmp.did:0680117407206811935398A7741CF40E xmp.did:0680117407206811A613B4EE39B4D58C xmp.did:0680117407206811B1A48ACCC66BA1E0 xmp.did:0680117407206811B2A5AE2BE598D25E xmp.did:069AC01433C211E0AA8582F7083052C8 xmp.did:06E84308D3AB11E386CCA958D368DB51 xmp.did:0716834A66DEE0119A01E27F4D86A62B xmp.did:075E52685643E411ACBAC8B0A8AA20C7 xmp.did:078011740720681188C696DC609994EC xmp.did:078011740720681188C6CAC5BEF2CC51 xmp.did:07801174072068118DBBE31A192FEEDC xmp.did:07801174072068118F6288F23A50D5DD xmp.did:07801174072068119109DDBC5677155C xmp.did:07801174072068119457905C16F6CCBC xmp.did:0780117407206811BEB789E23D201984 xmp.did:0783f72a-56b8-415d-8531-1eeb20414504 xmp.did:07C62F90DE63DF11B7199BA8D7682C1B xmp.did:07D85B194F21681188C696DC609994EC xmp.did:08084073AF60E011AFA79E3A4F01158E xmp.did:0871F2CAABDD11E291E28E7D6F356B9D xmp.did:08801174072068118083DB8F1A026FAD xmp.did:0880117407206811822A82C87EEA386A xmp.did:0880117407206811871FB03D861007B1 xmp.did:08801174072068118A6DE3227BBC4D54 xmp.did:08801174072068118F628C5BC7FF1E1F xmp.did:088011740720681192B080BDF09D73D4 xmp.did:088011740720681192B0BCCE1816D9E6 xmp.did:0880117407206811963CF2F523F9A511 xmp.did:0880117407206811A195E33BF38323D9 xmp.did:092C276A5DF411E0A80E8127450A213E xmp.did:093676BC0D20681188C6CAA8038E09AB xmp.did:0980117407206811859EE31FF8DDBE8D xmp.did:0980117407206811871FD8AA5A0491ED xmp.did:09801174072068118C149339A6CC4AB2 xmp.did:0980117407206811AEE4ECC20A5D0880 xmp.did:0980117407206811B2D9C93A76126968 xmp.did:09B542E7BA21681188C696DC609994EC xmp.did:09CD7F159F13E311B5C0B2E7207839F1 xmp.did:09DDD7D4D6206811BB37D81EA9E9F402 xmp.did:0A130E931320681188C68E73FDFCF637 xmp.did:0A8011740720681188C696DC609994EC xmp.did:0A8011740720681188C6C5D9DC520BD2 xmp.did:0A801174072068118A6DC5C740EBC4EC xmp.did:0A801174072068118F62E601B48A9F82 xmp.did:0A80117407206811A613B4EE39B4D58C xmp.did:0A80117407206811B1A4D0E266413BEA xmp.did:0AD398C4057111E4B5A4FB3A5E2D01F2 xmp.did:0B5776FE85C111E28AF1B2D2D444165E xmp.did:0BE3D4642E206811822ABBD2F43D0783 xmp.did:0BE75C72356ADF118ECBF2C8AB401F20 xmp.did:0BF11FD1DE22DF118E04DE7FDFD8DEB5 xmp.did:0CCF6644C8A6E011979696CECC20A286 xmp.did:0D3D882C5343E411ACBAC8B0A8AA20C7 xmp.did:0D9A9BFCEE7FE01182DFD33A26DD6908 xmp.did:0DC2B982FBA5E011A4FEE67DFDD7FB36 xmp.did:0DC5B1846FC011E29171A4C81E509EF0 xmp.did:0DDF437F0E206811822AA8C8AA0C675F xmp.did:0E2AC53BD72168119109CA2496A1ABE5 xmp.did:0E9760F0C0D211E2A4C6EDB2536FAC91 xmp.did:0F30D59357C8E011BEF0A37AC8AFF6B8 xmp.did:0F3B40E0E263DF118B1C9621F0574BD2 xmp.did:0FA002C8A794DF11A47BD14C5937195C xmp.did:0a9eed68-948f-433f-9773-bb9b6bbb5783 xmp.did:0d340bbf-0f98-49b9-9e4b-cdb9086f7f6a xmp.did:0df0a671-d27e-41ae-b249-6964f30c0578 xmp.did:0f0aafbd-376e-463f-ae83-1d9ad7cbcf32 xmp.did:100823B1CB0FDF119A0D9CB73A16B779 xmp.did:102cd43c-9635-4fcd-8246-a55530384f1c xmp.did:1085A4F83DD011E0A5E4E63061587FB7 xmp.did:10C249B651206811AE568088196B6FA8 xmp.did:10CF6644C8A6E011979696CECC20A286 xmp.did:112A90B7909811DF80ADCEC8AA0E941B xmp.did:112A90BB909811DF80ADCEC8AA0E941B xmp.did:114D8FCE548511E39A82BB701DA57CEE xmp.did:119A01FA9E2068119022D6BA6E344F5A xmp.did:11A77212D348E011B6BAB55D64F5962D xmp.did:11BE60950A91DF119200B22FF680F3F0 xmp.did:11F88C367178DF1187DF993E7E1F02E5 xmp.did:11FB407FDBE5DF119CEFD33EC3DF08E5 xmp.did:12ECDFCC6918E0118317A5126B184C9C xmp.did:13296BD7929AE111A9FAD16AAD7C28D8 xmp.did:13B748432EA2E0118D04E5AB37155918 xmp.did:13ECBBB17E1CDF118D4EF1C33EDDA687 xmp.did:141849A80AA8E41185979686520A4F87 xmp.did:144C62F9830311E0B62FB7127DA0FEAF xmp.did:149C8558F373E0119389FF7D0DABFC0C xmp.did:154F526AB7FCDF118B1C8E78BC400721 xmp.did:15529C00522D11E3BE96D1B431C7F542 xmp.did:1565E62DBD4A11E09901EB943C9FC65B xmp.did:1588ABA64B7EDF118BB3FD3FFFE50FBC xmp.did:15C9895284D3DF11B5A1BCED77057419 xmp.did:15FAFFF52B2068119457D5C82447A0CD xmp.did:1630586DC9E3E0118D4BE9BCF87F398E xmp.did:168871a4-d81d-4e8e-98ce-b0de47ae58d5 xmp.did:16B5EA561C21681191099A139FF76C18 xmp.did:170463185620681192B0D8368D31C23C xmp.did:171E3B8B22BBDF11B7E195F5F78DCA2B xmp.did:17385DBEFB20681188C696DC609994EC xmp.did:17DDC6506D6ADF11A2E6B3539F1DDE96 xmp.did:180cc9a0-333a-4c5b-93ec-d1fe095b14a9 xmp.did:181223f7-31a8-47a7-a911-075963123f27 xmp.did:182CD694ABDD11E2B347E015CD8D4930 xmp.did:18407EA49F74DF11B9ADF501B1FEEC5B xmp.did:18503ACC11206811A7BADD5938E42519 xmp.did:18A6A5FAB913E01180DACEB1E4B080FC xmp.did:18E040BF726B11E096478444BF297328 xmp.did:18F1103E54C3DF11AAE49CD88AA644AB xmp.did:18FE1CEEFD20681188C696DC609994EC xmp.did:191be27f-15cf-4051-ae0d-b449788611c2 xmp.did:194993840129E1118B6683AB8BA184CC xmp.did:1965DDDA3A9E11E39831A4CE732877D4 xmp.did:1965DDDE3A9E11E39831A4CE732877D4 xmp.did:1990B25A12216811871FAE052E76F513 xmp.did:1A6A210EBD21681188C696DC609994EC xmp.did:1AAA61C531206811857EF51D78886996 xmp.did:1AB777227629E0119AD1B945C1964BAE xmp.did:1AC9CD888D0611E38591F607D1A1A63F xmp.did:1B61A465988DDF11B96ADBDD437880CB xmp.did:1BD6A30692A8E0118BA8F2782CB3F003 xmp.did:1C01C42FF620681188C696DC609994EC xmp.did:1C03146227226811AF6F8C15B6994DA7 xmp.did:1CCF6619A3A8DF11B402D829E1AF718C xmp.did:1CFE1CEEFD20681188C696DC609994EC xmp.did:1D012E9EC9C3DF1190EED90E3B79DA34 xmp.did:1D06EF8E726B11E08CB3DF7C657CD3E9 xmp.did:1D51DAA7222268119109F828D8DAF436 xmp.did:1D6E4373AC5FDF11A68ED251FF23EC34 xmp.did:1D726D5F7C99E11182BF8645631036F9 xmp.did:1D794D3196A0E011BA5FA492FDC2C4B6 xmp.did:1DD55E701E2168119109C99D4C01BF1C xmp.did:1DE41A972DB7DF11ACFE8F8ACF6BCECB xmp.did:1DED8CFF57BBDF118185E1BC98F91251 xmp.did:1E059DA44734E011AD25903082F159FB xmp.did:1E7745A2909711DF80ADCEC8AA0E941B xmp.did:1E7E6F2C19E8E1119DFDF0AAA80BF1AE xmp.did:1EC0AD1472DFE011BAC7F7CD194FE1BE xmp.did:1EFE1CEEFD20681188C696DC609994EC xmp.did:1F63A8EDD676DF11BEEA9D3B8B3711B2 xmp.did:1F71CC6B5AAFDF11AA1B8250A37ACD87 xmp.did:1F7C6C07EB75DF11A3B0B0E08A7B57B8 xmp.did:1FE3A640427AE011A4D3C40ADA3B0913 xmp.did:1c6778f3-5fb8-4449-aa06-d4dd0cd09ca2 xmp.did:1f71eed5-ac33-413a-a0de-089b277cc1d9 xmp.did:1feb2e2d-87f4-4f1c-9d2e-c85dd36cc8f9 xmp.did:20954B6E3791E0119DE0C72DBAF511EC xmp.did:20B881312B20681192B0EDAAC00D9FEC xmp.did:20bd5d16-f267-4afc-be7f-75b1594fef8d xmp.did:20ec75a1-da20-4b61-978e-9c607188d8ae xmp.did:210C18881B21681188C696DC609994EC xmp.did:214140E5CEF7DD11986B93155D102C48 xmp.did:215D6A12242AE1119583FD4A981E0514 xmp.did:216EA2C971D1DF11A9A9AAF92A4138CE xmp.did:219911BF2F6BE0118B53B756951DDF56 xmp.did:21B8F0C085A0DF1182FEF79AFAE46956 xmp.did:21BCF77D6204E2118B88C0833978F058 xmp.did:220C18881B21681188C696DC609994EC xmp.did:2229a487-68e4-47ad-b2e2-af595e496c8e xmp.did:23301B1D792068118083982FE4C6204F xmp.did:23B329EC60AFDF11A75D9D2474DFBA57 xmp.did:249077570A206811910986D9CD6AC386 xmp.did:24DE300A77FADF11957CB6C8F2BB99C0 xmp.did:24a07169-d438-4436-b783-57651373945f xmp.did:250F37FDBE65DF1196A2E5386EB7EFBF xmp.did:2512933b-e51c-4c45-9733-cb3af0e171f0 xmp.did:252A728E65BBDF11B714F0C6E94ABD01 xmp.did:25BCA5186093DF11B927A622C20C3829 xmp.did:2636B2B8BF4311E386679C70E86EA2E5 xmp.did:265D79E0A44D11E2BA1CF924683F6304 xmp.did:267A70FFD257E011A551F15593603B5A xmp.did:271B6C3D1B17DF118E43E01B5B84694F xmp.did:2749DAC169E0DF11BAE2A9F4FA1C730E xmp.did:27C109D5ACDEDF11BAACCFE187E6E735 xmp.did:282F44E5EFE9DF11A2C6F6A60B573B0E xmp.did:28EEA9B79AD5DF119648F8511B7417D3 xmp.did:2928DC004423E01199ECC9B0A3B730D7 xmp.did:29339019AE55E0119C03A862C7BF6F88 xmp.did:2A3D854F0A2168119109FB109986C91C xmp.did:2ABB75037D1A11DFBF66D19AE0AB5B1B xmp.did:2ACF258E325DE011A1A5CBD15F1C5D8A xmp.did:2ADE300A77FADF11957CB6C8F2BB99C0 xmp.did:2B3A659E49A4DF11B7A4FFC9B88CD1F0 xmp.did:2B49DAC169E0DF11BAE2A9F4FA1C730E xmp.did:2C46390A7D4911E0A66DC919951D3F2B xmp.did:2C514E4873D111E0B183883F507A6AA6 xmp.did:2CC971D6DCE1DF1193B8A11A80F46236 xmp.did:2D81E3318B86DF118053F8F33B4219FB xmp.did:2DA2E4C6F3BCE011B0BBD5E3244285CA xmp.did:2E022BBA40206811AFEDB4DC5A5EDBC9 xmp.did:2E229BE45760E0118647B4BD29669B78 xmp.did:2E463E692B5711E8B022F407692B6CD2 xmp.did:2E463E6D2B5711E8B022F407692B6CD2 xmp.did:2E463E712B5711E8B022F407692B6CD2 xmp.did:2E4A134843CCE011907C944EF181D2E5 xmp.did:2F290AB9132068119109C80A4C3147BC xmp.did:2F82ABD94D22681192B0D8368D31C23C xmp.did:2F9782BF00C8E011BEF0A37AC8AFF6B8 xmp.did:2FCBE8DF0388DF1197BFF29493CBCE26 xmp.did:2bd7c243-278f-4f61-ab02-d1ccb1c9298c xmp.did:2cfcedd4-3427-47a2-9747-b5e069c36cff xmp.did:2f168030-03fc-4540-a922-aa2f52bcb71c xmp.did:2fb522c8-be65-4d87-94ac-88851a28efec xmp.did:3034510a-3cb6-4e56-9b37-1ca349095c30 xmp.did:303C18AF342068118F62CC84EB2E7047 xmp.did:30DAB532351011E1BCA7FF7E89EBFB18 xmp.did:311463A38D64DF119506F54ED5040232 xmp.did:31552C38272068118A6DC2EB5CD0A707 xmp.did:315EC7B24277DF11A28CDB2E6E8DED8F xmp.did:31B8A8EAABDD11E2BB579B541E6151AC xmp.did:31EE31B21D9ADF1183B8B6378F64346A xmp.did:321DE048F78A11E48B8FF799B3AB2C11 xmp.did:32D52E0D0E2068118F62DA03125D4285 xmp.did:32F018B31320681192B0C09A9F8F6D74 xmp.did:32F958CC79E511E38A2DD8B5CCDA335F xmp.did:3323fdf8-039e-4527-8084-93495de1a375 xmp.did:332792B715206811822AA76189470CD0 xmp.did:332CDACA9F206811994C8A8243CF6DD5 xmp.did:337107AC578ADF119F2ED11A96E91689 xmp.did:338B5C19C094DF11942AF82227E26339 xmp.did:33EDBD849E5A11E2AEC7FF999E1A6F5E xmp.did:340EF1E17A20681188CCC0301896C619 xmp.did:34125B444F2068119109ADEEA36B1FBD xmp.did:343C18AF342068118F62CC84EB2E7047 xmp.did:3452B8FEA85211E6A7B6F8C96922A453 xmp.did:3469A8DF112068118DBBCC81981F930D xmp.did:353C7E32B620681192B0FA0C0917E462 xmp.did:3545FE7468B0DF11A936AFDE3AD8B6A8 xmp.did:354FB441312068118DBBE38DD8571038 xmp.did:35AB3361EDB7DF11B973D97945315A6C xmp.did:35cc1ac1-4070-4373-b3fd-46c466b973bb xmp.did:36232F4D813ADF11A89FA523901B3490 xmp.did:362D91EE08206811871F80851E6F0846 xmp.did:36451839-eb37-421f-957c-e32dcb6993c7 xmp.did:36AF18290C206811BC56E1514E765539 xmp.did:36C863DBD4DAE1118CC1E0C7CE6212AF xmp.did:3738FE75C37DDF1181B8A5397EDCE6A6 xmp.did:374FB441312068118DBBE38DD8571038 xmp.did:382F6AAEE32168119109CA2496A1ABE5 xmp.did:38BE6833E32068118F629B9B9A9C3246 xmp.did:39220507-45af-4623-9920-970d02d24f7e xmp.did:3938FE75C37DDF1181B8A5397EDCE6A6 xmp.did:39583a7c-3a59-49f8-a6f5-433dd78e4dd3 xmp.did:398B55B75193DF1195ADB8167AC45A1B xmp.did:3A62EBC4235111E0B173A65C0EC2E2AC xmp.did:3A6850363F8DE011A68BE05DED48B03D xmp.did:3A6CAF272B19E01184DD8FBD11034008 xmp.did:3A76783CD0A8DF11B2A19D50FF21B8D9 xmp.did:3B14F6445C93DF11ACA58DEE884A84F9 xmp.did:3B44C1030C2068119109D8AADCC33AE2 xmp.did:3B612268DAB6E01187C39E0D90EB37B5 xmp.did:3BA789FE147DDF11955690B0B2A0D740 xmp.did:3BC6CE12C370DF11850CB72DB9D2CB92 xmp.did:3C3603469AD511E08F0ABD72ABEC7BC6 xmp.did:3CA87BC9965411E28F45BFCBE171FACB xmp.did:3CBB494529D1DF11A5339ABF8266E818 xmp.did:3D02E62ADF8CDF1181DCCB8E8B77F31F xmp.did:3D0FAE7AB2A611E3AB42DCAC2251EA6B xmp.did:3D53528AB890DF11BDCDFAC92D1C9C9A xmp.did:3E07D86E9D8DDF119B32D13C0F3BA8DF xmp.did:3E55813C14206811822A815225240280 xmp.did:3E5623471F206811822AE3B120C8215C xmp.did:3E8A102C200C11688442D886113E168A xmp.did:3EE476995A28E0118FEFFAAC272DD9E7 xmp.did:3EEE2DB5B07FE0119FBDB1C3DCB285CD xmp.did:3F26EE8EAEC0DF1196E782BE87607A8D xmp.did:3F2840BBDAF4DF119B9FED66B6875A77 xmp.did:3F5068DCA87DE11188FAC430D1AD6311 xmp.did:3F6B4C626AC7E011B58A93F597C8E61A xmp.did:3F727C802A20681188C6D9C4D0AF0270 xmp.did:3FB9609F5BA7E011979696CECC20A286 xmp.did:3FD63FCB7A2811E2A19490071A5CE515 xmp.did:3FE9B2490F2068118E9FFFD635C57A59 xmp.did:3ac2c713-6017-4ca0-85e4-7a6887cf3287 xmp.did:3acef44d-8ad8-40d8-9188-51e26c737010 xmp.did:3adf2af0-da50-417f-b1dd-8a30de0dda78 xmp.did:3b2205d0-952c-45ba-9e7c-fa0a10b4be85 xmp.did:3d3967b4-4018-43c1-863e-6e9337dd516b xmp.did:3d632576-1d55-4b59-a82c-47de588c8552 xmp.did:3f648e8b-6d79-49b2-9cb4-f61b7507c451 xmp.did:40475a38-a374-4259-8933-f12265bfa858 xmp.did:407BA1D2DE21681188C696DC609994EC xmp.did:4089d480-bae9-4aaf-8b7d-b47f59b39000 xmp.did:40BB217CBD84DF11A47CEBE628912B02 xmp.did:40F5E85E7ECDE011A9998254DA7B207E xmp.did:41144A9F5CBBE011A9CDC1CC5A8545F0 xmp.did:41A2C742846F11E3A586A5682B3D1FE4 xmp.did:41B0431F4680DF118EB08D045EC6FA66 xmp.did:423be1bc-1955-4b41-997f-cc63343b5dec xmp.did:42611933C6E9DF119366D222F59B492C xmp.did:426956A63C7EDF11A5A4E9065FAC704C xmp.did:427629EB1F7AE011BC6ADBE9D9257556 xmp.did:42909406645FE011964FE99A58EBB358 xmp.did:42ABA707D6C1E211AA48DA7EB73093A6 xmp.did:42c26ed6-6b3e-4568-b42f-6ff3b05b4993 xmp.did:43487F5815BCE011B0BBD5E3244285CA xmp.did:4395982DEA6EDF119A5C9EE4A37A57B1 xmp.did:44569F2270206811B540D1205A8C4334 xmp.did:44BA610FF715E011850FA901B4C1B675 xmp.did:44C0E661102068119109D41DF25DBCFF xmp.did:44DD59AD2520681188C6AE32EA398297 xmp.did:44cfb907-d77b-4b5d-95ad-5d0d3a4567bc xmp.did:453680A25EC9DF11A86DDD161CFCEB0D xmp.did:45499065-476e-49a7-b080-1cdc2247836a xmp.did:45599B5D3BDFDF11AD98D0CC567A99E5 xmp.did:4573E729775C11E4A65EA7DB5D92F052 xmp.did:457A74E985C311E28AF1B2D2D444165E xmp.did:4582F7613448DF11AD0C84D94E5D43BD xmp.did:4590A1312920681188C6D159E68FEEFA xmp.did:45BF49C464C8E011BEF0A37AC8AFF6B8 xmp.did:45CE15F1326EDF119161BE757400AFBA xmp.did:45EEBEE9D298DF118D72D939921CE7C0 xmp.did:45F62045FF1CE211BF1CBEAB02877C54 xmp.did:45a47e9a-b93b-446b-8b15-d6477dabe3dc xmp.did:45c3a546-b458-41dc-b088-72cba1bfdf99 xmp.did:463C55EC1F206811871F9753D344F7A3 xmp.did:4640EA1197DCE1118E89A806EF65A4BF xmp.did:46A95EEE9FBFE011B0BBD5E3244285CA xmp.did:46AB7E0D2730DF119042AD88AD5F9FC9 xmp.did:46E39520AEB8E011AEBCBCB1E3A15768 xmp.did:46FDAC28978AE0118DBED2E4485D9FF1 xmp.did:476DABBEBE2068118F62B3176EE25187 xmp.did:47A38103F079DF11B72DB7DBF10B274A xmp.did:4804CD8307206811AE56F87BB2B8114A xmp.did:480B7E46AF78DF11A825CF8DE5D91DF7 xmp.did:4814DD170A21681188C696DC609994EC xmp.did:487937402120681180839D9EE6A3940A xmp.did:48B3A7A23CCFDF118F31D6D8ACE6A8C6 xmp.did:48B7BD0BD1F1DF11911DAE3F77A72C12 xmp.did:48DFFEDFE7C8E011940687537EBB93D9 xmp.did:48F5EFE5AE80E0118A91AF6880B6674F xmp.did:4978DD280123681192B0CABB2874AF0C xmp.did:49f3b510-e2d1-4786-9281-0f8db839f18d xmp.did:4A0CBE8F945CE0119B94E398813E13AB xmp.did:4A9EECE22B5711E8B022F407692B6CD2 xmp.did:4A9EECE62B5711E8B022F407692B6CD2 xmp.did:4B04CD8307206811AE56F87BB2B8114A xmp.did:4B12AF1A50216811AF5C82C8D4EEE19A xmp.did:4B1B4C0A1009DF11BD51F318E9EDA9E8 xmp.did:4C4D4D899EF7DD1180199D0A99EB683F xmp.did:4C51B774A17011E0A528DEF2AC8C55C6 xmp.did:4C5F6833BF4611E386679C70E86EA2E5 xmp.did:4C8C79BCDBF8DF11A111C57C46790BC9 xmp.did:4CA1D100CDC1DF11AAC7DEF7E9EA2229 xmp.did:4CDA76DA3520681188C6CC41240299E2 xmp.did:4CF62045FF1CE211BF1CBEAB02877C54 xmp.did:4DCB8A30914DE011BD63DE0802894CA1 xmp.did:4DFE631B1C2068119109D986A10A20A5 xmp.did:4E2A12FF272068118DBBF1E759913209 xmp.did:4E5BCDD097A8E011B01BA4DFDBC23FA5 xmp.did:4E96D8071320681191099262B251A4F6 xmp.did:4E99A86EF541DF11B948936BFEB99B26 xmp.did:4F2FBD5B3833E211ABC1ADC0DA5AC883 xmp.did:4F6BB8702C206811871FE169E7DC3C98 xmp.did:4ae9d024-9fb5-487b-970e-5e02e304e3f9 xmp.did:4b5948a0-949c-454f-ad97-6bb0a0b0be8e xmp.did:4bff2ebc-a64c-4323-89d1-29e732d803f7 xmp.did:4c1a8d9e-a8cc-4333-9c11-69ecec4a6b28 xmp.did:4c6bb597-9fc0-45fb-a61f-1e54136a08dc xmp.did:4e224af0-1748-4171-a27f-f9d10d5bb264 xmp.did:500A9AE2DD206811A613B4EE39B4D58C xmp.did:5032E746EBDCDD118BB0ED485B2406E3 xmp.did:505381322485E011BD3DE9624629426F xmp.did:507BD60A0B2068118DBBA622512CB8CA xmp.did:50F0464C0C2068118089E259502D6AC2 xmp.did:514F67C5E3A0DF1198F8A7B931697359 xmp.did:51546FDD1320681192B0BAA904DE0F8D xmp.did:515DB534983011E3A5E6C5BCA1E0549C xmp.did:516E6F2CA182DF11B486DD773D4325EB xmp.did:51B82BC8222068118A6D8F7F76AB4DDC xmp.did:51faf370-f6c0-4faa-967c-c3aeda217a80 xmp.did:52101e0c-5e89-41de-8148-0ca9945851ae xmp.did:522B96D20C2111E4A08488C3B82086F7 xmp.did:5232646C26CBDF1190EAEC1F0BACD3F2 xmp.did:524e397e-61e5-4b7d-b0c0-57430e9120c2 xmp.did:527244aa-2822-4278-9851-45425d570d40 xmp.did:52826197F1ACDF11AD7EB332E0CAFAAB xmp.did:52910D990C206811A961A044C143500B xmp.did:5313927753216811994CCD5FF36C8C71 xmp.did:535fa335-3b9c-4266-844c-7da7b1077277 xmp.did:538F8AD33C23681188C6E3B2AFCF6608 xmp.did:5390C6CAC279DF118F1BE24DC2AE522B xmp.did:543A798F1307E011846FE8C04D3C8DEC xmp.did:5445a0d8-ba8b-47eb-aa93-1e3502a68d20 xmp.did:54546FDD1320681192B0BAA904DE0F8D xmp.did:5496D8071320681191099262B251A4F6 xmp.did:54C3F9F8BDAEDF11A5DC959C82ABC9E1 xmp.did:550AE0126E78DF11B544BC83DED6D6DD xmp.did:556E056A4621681188C696DC609994EC xmp.did:559FCD3B527ADF118914DEB1351761F1 xmp.did:55C093961E2068118083EBC7D6F18424 xmp.did:55D0E233C393DF11BE97C6237DF28CA9 xmp.did:56028b1b-0482-4dba-8fe0-260ecc1d0c0a xmp.did:56EAD66EECEDE1118EBDD2792BC326D4 xmp.did:56FD0742357AE1118349FA99D447291B xmp.did:571403831520681197A5D5DB41E073B1 xmp.did:574FF45EC867DF11A56BDA19C483882A xmp.did:577969B29D5011DF8B1491785F4DE9BB xmp.did:57B92F5C1089DF119D7284B7894B1A03 xmp.did:58316A45F5F5DF11807F8C8A28F8A117 xmp.did:58536A145360DF11B97DB259F7F250E2 xmp.did:585BBF1B01B6DF11AA09B180E60AB9EC xmp.did:5913b3a8-f425-4f54-b7d5-4b83741c81a9 xmp.did:5944F43DD95311E3B723F415BD0B9511 xmp.did:594EB93E9FA611E2A818C1F54E782E81 xmp.did:59C5FD5C3884DF11B9B78CE116BA6A97 xmp.did:5ACA778625C1E01180B9D22014B81B82 xmp.did:5AF20CAF5343E411ACBAC8B0A8AA20C7 xmp.did:5B00864E4767E01197F3F9B0477D6229 xmp.did:5B6DD2B74584DF11B7248B7DDF794A1A xmp.did:5C16E47A5AED11E3B1C7893BF1DEEAD9 xmp.did:5C83A2FA464711E3964AD95584025AAA xmp.did:5CAC3B5AF977E011AC53A76EEAD13040 xmp.did:5CEC9C6EC13DE011A0BEF8DDCFC32D6A xmp.did:5D0CDBD57F76E011BA3CF330558605BE xmp.did:5D7E93F5833411E0B62FB7127DA0FEAF xmp.did:5DC68BF2FD9DDF11B149FF210A7EE0B8 xmp.did:5DE7C465E499E011A42DEC14C3EFCAEC xmp.did:5E1C88E1FC20681188C696DC609994EC xmp.did:5EC857194DD3E0118BBCBA5E7FF86AF5 xmp.did:5EF6E033572FE011A924FF15510F1797 xmp.did:5F0079D829206811B1A4D56600D919C7 xmp.did:5F4BFDF37F1ADF119CB8E7D742FA3A25 xmp.did:5F6E4C3F5CABDF1182C292E0CAD857C9 xmp.did:5F826D491A88DF118D3CBDB50D00B442 xmp.did:5F91541C69A0DF1188F0EADDFE7FD2A3 xmp.did:5FB24B6A67E811DF98D1BEA7C517AF65 xmp.did:5FDBE369768ADF118B8A95612921A3EC xmp.did:5FF58F1B9086DF1182C5AFC7B308F06B xmp.did:5dfdf607-a6e9-42e5-8048-4abb66b76452 xmp.did:60640A5C5826E01182CAD38ECEDCE268 xmp.did:60F58F1B9086DF1182C5AFC7B308F06B xmp.did:610079D829206811B1A4D56600D919C7 xmp.did:611032FABB87E011B710DD0532D7B522 xmp.did:613c4e1c-1656-4d71-8bbd-488bf234de56 xmp.did:614ca814-b198-4bf1-a7fc-f447e7628ce5 xmp.did:62433795-6f82-435c-ae8a-efc4f5064e12 xmp.did:634429630A2068118F629B9B9A9C3246 xmp.did:634FE106FDAADF1196BFAB2AECFE2FA1 xmp.did:6359e5af-44ed-4bd9-b9e6-b9c4694fa628 xmp.did:63762B5E4DB0DF11B375B34914E5B622 xmp.did:638880E80920681192B0BAA904DE0F8D xmp.did:6395943583CBDF11BAF5EC302DA3E9DF xmp.did:639B1DD297D5DF119648F8511B7417D3 xmp.did:63AEF9105305E011867F89B0211E4F7A xmp.did:63B9DF027F206811871F80898A1CC3A1 xmp.did:63CB59C89598DF1190F2B7CFF5F51124 xmp.did:64509ae0-5046-4436-941f-241f0ee52e03 xmp.did:6474C83C687CDF118E1F99D69B3525CC xmp.did:647F1DD60621681188C696DC609994EC xmp.did:648880E80920681192B0BAA904DE0F8D xmp.did:6490d48d-c31f-4ebc-acc6-cfd7be4c8331 xmp.did:6494CD194F206811871FCD2199AD167E xmp.did:64c94a59-b391-44ad-af80-e587561ac0c1 xmp.did:6515EC6E98206811994C86814C2F3017 xmp.did:652528f5-8410-484a-86b9-5d603f43220d xmp.did:653E4C94DD2068118F62D27A6BCE2F0B xmp.did:6556E202F593DF119A5FD5DDEFA91743 xmp.did:659F34731BCDDF1191BD97C1AE6A08AB xmp.did:65AD316CD3AC11E386CCA958D368DB51 xmp.did:664D5C459C7711E08A9C913C073A663E xmp.did:66562D8A30206811822AF66E54970861 xmp.did:668880E80920681192B0BAA904DE0F8D xmp.did:66BCB3B7EAB9E011AEBCBCB1E3A15768 xmp.did:677E60494F2068118DBBE52260A278CD xmp.did:678880E80920681192B0BAA904DE0F8D xmp.did:684f4e76-c08e-4b79-adf0-584e4a57723d xmp.did:6859A8AA4C20681192B0C49A4A67C7CB xmp.did:686F8DB85887DF118D5AB7C516625507 xmp.did:688E066C4B206811963CF2F523F9A511 xmp.did:689B1DD297D5DF119648F8511B7417D3 xmp.did:6966F9529C23E011BDF9E30C5CFEECDF xmp.did:69A1217ACDA4E0118A47F95ACDE595C5 xmp.did:69A65820F6C811E2A62AD2E2041CAECF xmp.did:69A9A55BC9A6DF11AE8AB958AB480A25 xmp.did:69B2F9191F20681194578A02E8C9B59B xmp.did:69D3304B192068119109B5CB68862886 xmp.did:69DFAA100F76DF11A108D32BB22A5149 xmp.did:69EB434F302068119109B3CAEE51E0B6 xmp.did:6A15AFA28B206811871F8DE1CBDF9EB0 xmp.did:6A284E091A29681192B0D53FF790F85B xmp.did:6A47007B82A4E011A4FEE67DFDD7FB36 xmp.did:6AD2DD1426CBDF119207FF631E313C1E xmp.did:6B43DD71B9D011DFA897EC2DD419EB70 xmp.did:6B8EAC218FAADF11A652A0B41163863A xmp.did:6B9AFF6520DADF11AD2BCBF19C02F98C xmp.did:6C1D4CFBD8C8DF118849E21764796AE8 xmp.did:6C7D9E1E74B211E0A792FB6CA6498740 xmp.did:6CAA2255CF57E0118F61ABAA1281E4E0 xmp.did:6CDE07D55E20681198E99BCF30868C79 xmp.did:6D338F201F206811822ACA95E12BF7F8 xmp.did:6D8043D4C4B4DF11BDAE8F5B97ACD684 xmp.did:6E282DCA7F17E011B0739866E9AD0C81 xmp.did:6E5DCB84DD84DF11959BD5D75F631BF3 xmp.did:6E7CD2CED77BE011A60BCDD5CBCAB985 xmp.did:6EB467F81B3B11E5AB018758F251DAEA xmp.did:6F7CE6A31721E1118765862BA9D105CE xmp.did:6F909C1D0679DF1191F3A75249221146 xmp.did:6FAD2A5D0E20681188C6D9C4D0AF0270 xmp.did:6FBBBEA6CE6D11E3B964F01617F396C4 xmp.did:6FBBBEAACE6D11E3B964F01617F396C4 xmp.did:6FD5EA4F4D2DE0118D4EDB8E509E5254 xmp.did:6c209711-5114-49f7-9ccd-792daa04099c xmp.did:705B30E088F611E083F782CBB1D50FB1 xmp.did:7089C6CFC8B5DF11820885489254C0E7 xmp.did:70A31406DF206811871F81E8BB0F82E6 xmp.did:70af1195-8f61-4845-aad0-3c303864f33b xmp.did:70d4096e-f330-43e2-bb49-1fbe0afc3203 xmp.did:715B6B1C6769DF11AC0B9029853F0D1C xmp.did:7162A10113206811871FCD2199AD167E xmp.did:7178548E489EDF1187848A377019B2B6 xmp.did:71F3689C2684DF11BE9C97E674CD6B1F xmp.did:7360C3BF8D206811B6999C6B4BE18F8F xmp.did:738BF5DF1DB7DF119EECA0468586188F xmp.did:739D7E9FEBADDF11AADEADA356222083 xmp.did:73A58A64E19ADF118809A899D2C676CD xmp.did:73A85C6F97AADF119ECEE92B8D5FFE89 xmp.did:73B57231C3E9E0119FC8E3CA42FCF1AC xmp.did:74117FB120071168B481EDE85718C1E2 xmp.did:74117FF720071168B4F2D4360359303D xmp.did:7437D61FD021681188C696DC609994EC xmp.did:746C7A8B6820681183D1E2F71EDF25EE xmp.did:74E80EED0B20681192B08E07D99F8A08 xmp.did:74a7c71e-810a-4a16-abbb-5bef4bf9c6ab xmp.did:74b909ef-08c1-4238-8951-dbea2a2cf66e xmp.did:74eee4b1-800e-4e68-904a-022d2b54d77e xmp.did:753b5dd0-30f5-4e4c-8129-a1b3df923b39 xmp.did:7557EACC8B6ADF1192ABF30689582EC5 xmp.did:757f1b56-96bb-4770-861f-1d565d790c2a xmp.did:75B38373C765DF119892ABF452BEFEB4 xmp.did:75DEDC25312468118B72DE2C6B104274 xmp.did:760712B247216811B18DC9DED6A2B0B3 xmp.did:7631A3109686E0119D98C2D90B3468EC xmp.did:76857F743F20681197A5E7B0831EA4A7 xmp.did:77058E810275DF1190AAD8563C512C0C xmp.did:770DBB164EB7DF118631F099F0298841 xmp.did:777A8B8D2CCEDE11AC1FBF9D231E361F xmp.did:777D08D09D85DF11BC7DDA87D3C599E4 xmp.did:77EC1A905B5D11E3B1C7893BF1DEEAD9 xmp.did:77FCDCFF0C20681188C6C677A3826B0E xmp.did:77FDA77EEECF11E3A68893F82EBF9E4A xmp.did:788200B33261DF11B38F998875CC8654 xmp.did:788AF58CDC9FDF118C00C3C968ABDC06 xmp.did:78E80EED0B20681192B08E07D99F8A08 xmp.did:798e4905-d3dc-4402-b2ae-6a3114b96d6f xmp.did:7A77A3E693CF11E1A2BAF8612686AF78 xmp.did:7A7A501C1F206811871FE0E4CB6C52AC xmp.did:7B043B7D7321E0119D96D946FB4715F7 xmp.did:7B29C0F54820681188C6D9EA900BA018 xmp.did:7B952E4BACC0DF1186F491AD5AAC3843 xmp.did:7BD2A7176C34E01183C188C0B0DA4CAA xmp.did:7C108D9715206811822ABD5623788040 xmp.did:7C6F110A13F4E0119A97C6F5F7FD5B9F xmp.did:7C7536BB1C84DF11BEE6C0DA556A121F xmp.did:7C8DC490E0226811871FAFE2B6937D3F xmp.did:7CE9741F22206811AE568088196B6FA8 xmp.did:7D3AEF6011206811822A84D82148E960 xmp.did:7D4E139D1885E011BD3DE9624629426F xmp.did:7ED8B1795443E411ACBAC8B0A8AA20C7 xmp.did:7F6D26F1E2FEE0119C6ABCC0BC7488E3 xmp.did:7FAC3751C37ADF11AA8DADEB2DA47FAE xmp.did:7FBFAB2ACFDBE1119E848C69D255D3A5 xmp.did:7b1a1f3e-c02d-ba41-b5c2-c62afca37f05 xmp.did:7b7a45dd-7651-40ea-ae29-c26cada712d2 xmp.did:7c7bd853-edde-484f-90dc-e65483eb429b xmp.did:7cfabb24-c3c7-c04e-93c7-85ef6d94efcb xmp.did:7fba7a91-fb31-4a8b-9ca7-a812d2d6c633 xmp.did:8059655B2C2068118F62CDC0FFB60C81 xmp.did:8078365AE76F11E18533F1ECFAB65801 xmp.did:80C93B4FEB3111DF9C439A7A28CCF362 xmp.did:80F094171D206811994C99F9498C6FC9 xmp.did:817089e6-f08d-4831-b1af-7c833d5f57f3 xmp.did:81709DB705A6DF11AA8DD3F0938E47C5 xmp.did:81BFAB2ACFDBE1119E848C69D255D3A5 xmp.did:81c6aae6-f8bc-4c76-a4f9-cfa7e58a3b71 xmp.did:82042E7F436011E38A2DE82E34B81DAE xmp.did:820E24D92B2068118C14B7428F978057 xmp.did:8210FDB3082068118A6DAF67FF497528 xmp.did:8268658773E011E29FFFAC7545964982 xmp.did:830B9C46982568119109AFE3CF4AF35A xmp.did:833C8CE42459DE11A76AB674739B3094 xmp.did:838372649821681188C696DC609994EC xmp.did:838BF2091320681188C6B205E89566F4 xmp.did:83B41E2DDE55DE11AD63CFBD010DF686 xmp.did:8422A7010E20681192B08E07D99F8A08 xmp.did:842F757B8120681188C688F5D09384AC xmp.did:84C76E5CA61EE0119B62C1A72CDDBB2D xmp.did:84C95075E3FBE0119B5AF02CBE935267 xmp.did:84F9021ED94D11E3B723F415BD0B9511 xmp.did:84b314ef-4188-4f4d-a057-d671f806be20 xmp.did:8534f6c4-83e2-4921-941b-2251e574d713 xmp.did:857f1ace-3518-42c1-a6de-85adaaf7f6d5 xmp.did:85CAF93392266811BEDC9678CA0435A7 xmp.did:85b3b39d-53ab-4a8b-8f2c-31884ab3ea8e xmp.did:861CB129116CDF11A081DAC65549FFF8 xmp.did:863d484f-441e-48a1-a1d0-5e34ad2efaa2 xmp.did:865B2D5F46236811994CB5207DCDF24F xmp.did:86689A063A84DF11B7728B0A61F1FF44 xmp.did:86740B880E21681188C696DC609994EC xmp.did:86FBC418F7206811994CCD5FF36C8C71 xmp.did:870225D20E94DF1195A5FC5C316CC418 xmp.did:871CAC41F26EDF118153B039D3F0E342 xmp.did:87716f18-62ca-418d-b2b6-d989cf911763 xmp.did:8788F14E3C75DF118146DA0537F7A65A xmp.did:87E33B19803811E09258D24CBD61FD3F xmp.did:87de0837-0e7b-4dee-a0c3-fd672518a529 xmp.did:88740B880E21681188C696DC609994EC xmp.did:889e1a56-12a0-4eca-8616-d4235c792cea xmp.did:88A1231164D711DFA6978521D60DF460 xmp.did:88C351403ED8E11186E3E883EB9255AD xmp.did:897DD97117BBDF11AD69B4E81D32B760 xmp.did:89C45F4A208ADF1195A9C4DC515AF3FD xmp.did:89DB88EE8521681188C696DC609994EC xmp.did:8A722F44B022681192B09858335F8E97 xmp.did:8A87C6C4B1256811A613F67E5B1E0C00 xmp.did:8B01E3417A20681188C6DC0217A7B5D3 xmp.did:8B90858FB573DF11BFBBF00759A3D452 xmp.did:8BD0CC8BD42268118DBBD37DD26DADFC xmp.did:8C8372649821681188C696DC609994EC xmp.did:8DB5E960F6C811E2A08E9D93423D18BA xmp.did:8DCE90B3748FDE11919ED00FF5C20F52 xmp.did:8E935AD20E206811822AA1DC23D37A5E xmp.did:8E966105F320681188C696DC609994EC xmp.did:8ECFD34D002968119109B2B3A61F48F7 xmp.did:8F144D844D71DF118E739F846C7A0E03 xmp.did:8F4DFE5AC221681188C696DC609994EC xmp.did:8F5B9AD42E6FDF119F97BE7F2627367B xmp.did:8fbbbaad-f0d6-483b-a9f1-1860702efc59 xmp.did:90088337-e2e7-408f-9dd5-220567f2dad5 xmp.did:90460DA107206811994CB21D629ABE7E xmp.did:9055651CDAA4E01197A1A65F7AE4791A xmp.did:90C5D5266479DF11865CEEF09851FD79 xmp.did:9192FF6B0A4CDF1187C0E54B36521B89 xmp.did:91CE90B3748FDE11919ED00FF5C20F52 xmp.did:91D03B52A2C5DF11AD408D720C5A42C7 xmp.did:91DB88EE8521681188C696DC609994EC xmp.did:91FF051E0FD3DF11B2D1C51F59B5FB29 xmp.did:91d21d91-b757-48b4-b71b-a4f1fb35b2d2 xmp.did:91fc3504-a53a-46fd-b08e-1b39c9cff4c4 xmp.did:91fe4aea-c4e0-45f9-b15f-3577caf2638b xmp.did:92966105F320681188C696DC609994EC xmp.did:929c2731-3682-4018-b34c-4b90f3ec60a7 xmp.did:92B423E31A2068119109BCD3F23227AF xmp.did:92CBBD15D6206811A7BAB1FC45DDAD2B xmp.did:92E577500821681188C696DC609994EC xmp.did:92ef1c75-2916-4d7a-aec4-b13eb129d35c xmp.did:930DD8B928206811AFFD97A6A7E489B5 xmp.did:9385C897D95211E3B723F415BD0B9511 xmp.did:9385C89BD95211E3B723F415BD0B9511 xmp.did:93FAD7BD4C93DF11B9BF94572601ECC3 xmp.did:93bdd041-ae6e-44fd-b447-0f1b314de54f xmp.did:93fec413-3e11-4859-b743-2332af451e0d xmp.did:944A847A363B11E0AEB2FFF11F63D948 xmp.did:94658B6B3B206811871FDB7C73EC7AF4 xmp.did:949699d7-a647-4e9b-90a1-c4b44dae5424 xmp.did:9497763E26ABE011979696CECC20A286 xmp.did:954ae280-03db-422c-a28a-29691775173f xmp.did:957009A6C00011E291F6EB2660C7765C xmp.did:95A96A28F3DAE111A7AAA5DE6EB18B89 xmp.did:95B2C65AB684E011ABCFE78D83B50568 xmp.did:96591BA8B7E2DF119A52D83C080E6159 xmp.did:966211F0849DE311A362F860C911E973 xmp.did:967DD1DC2B34E011B6CDA8F0B2C213CD xmp.did:968CEE49372068118A6DC2EB5CD0A707 xmp.did:96C81ADD14236811AF6F8C15B6994DA7 xmp.did:96C8249C6FFADF11B295A881C3F5AF4C xmp.did:96b55f72-56ef-4c13-a29b-16d4eda9cc8d xmp.did:97016BED3A20681192B091EEB36552A7 xmp.did:974F886B00A9DF119C94CF7A781D0A2D xmp.did:9785BA49DBDADF11B163E9831471534B xmp.did:97EFE3A2DA7DDF11BC71ED75BCF4EA9D xmp.did:97F116215543E411ACBAC8B0A8AA20C7 xmp.did:9809CC33375311E1BCA7FF7E89EBFB18 xmp.did:98135185D3AB11E386CCA958D368DB51 xmp.did:9820FC9513F811E1A40CFEBA1E6C2E7C xmp.did:98669ECF0990DF119F568672A8786DF1 xmp.did:98759349A621681188C696DC609994EC xmp.did:9879D113312068118C14AD0DD37041BA xmp.did:98C912840720681192B0E6C15935B3CD xmp.did:98E3903835216811910993DFFC667F27 xmp.did:98d9efcf-ce62-4bb8-8d06-3b4b9cda55df xmp.did:990D52F555A4DF11A011890C5D1FE9AB xmp.did:992CEF020B2068119109FEECB06854FB xmp.did:99343A4732206811871FE8DD2340C0B0 xmp.did:9979834A5FD911E4947BFBEB3398C5D7 xmp.did:99EF8767206EDF11B63BF1499E01507A xmp.did:9A1D8A08015B11E6B352F5CFF0CD2D86 xmp.did:9A759349A621681188C696DC609994EC xmp.did:9A8FD6619B3CE2119925D9CC22BAEF70 xmp.did:9AA38CEA410F11E49348C85EF9F80133 xmp.did:9AA38CEE410F11E49348C85EF9F80133 xmp.did:9ACD98F7A9DFE011BAC7F7CD194FE1BE xmp.did:9B0BC90E76B4DF11A365EF5257762381 xmp.did:9B26BBFB24A5DF11A00EE84FFD87A888 xmp.did:9B4613316923E111B8D9F5BDE94825E4 xmp.did:9BA7F226682068118A6DD5C0BEC857B4 xmp.did:9D94B355F97CDF11BE2EDEEAF296B240 xmp.did:9DEED1530021681188C696DC609994EC xmp.did:9E5A44A108206811871FE8C12D95F69C xmp.did:9E7D607C4F216811AF5C82C8D4EEE19A xmp.did:9EA1AF2B9358DF11BB73AF92DE6846CC xmp.did:9EC912840720681192B0E6C15935B3CD xmp.did:9EF7D92FC392DF11AED6A59B0EF71149 xmp.did:9F0DB4308482DF11A6AEEBE23E9BEBF9 xmp.did:9F2C9CACEE0AE11186C29F7E56C3BAA4 xmp.did:9F69ACC07283DF119FE5FBE38D204F69 xmp.did:9F733AEAB8B411E39E72C7442E862A9E xmp.did:9F81F57A772011E38203DAB3587DBB87 xmp.did:9F9716288B82DF1185A395B3CFBAD26F xmp.did:9FC37120F666DF1186D4EE722C1471DA xmp.did:9b9142f1-cc3a-4c2c-8d44-c82968d9d5ac xmp.did:9be9418a-fc5a-434a-86b4-5f05abdc8cd3 xmp.did:9ce8ef02-0a77-48fb-b62c-0f2ff8885e15 xmp.did:9d36a129-1d2b-462b-ac41-d95216aa3aeb xmp.did:9db059e1-a1a4-4bbd-8cfc-838a4796835a xmp.did:A0397E10064FE011A157DCE09D412734 xmp.did:A0546D104BC511E0B78A85AD4FD2359F xmp.did:A0A6AE25202068118A6DACAAA4DD6020 xmp.did:A0AFA84FD870E011B557BFCA0CAA97BB xmp.did:A0CA2C60F77CDF119847B4724B0BFE4A xmp.did:A103939E0067DF119601B88E9DA8851B xmp.did:A18D0473D95711E3B723F415BD0B9511 xmp.did:A18D0477D95711E3B723F415BD0B9511 xmp.did:A1B1F13FAA68DF11A928FB1399AE98E4 xmp.did:A1C5E8639820681188C6A894A1D908BE xmp.did:A1EAE66D312068119098A37C55994CC0 xmp.did:A2129843A068DF118B32AE5CCDC517B0 xmp.did:A23DA5AAD6B1E011A5629C3693D5C0CF xmp.did:A26263210D20681192B0B59A26F7999F xmp.did:A279E2A6FB206811871FAFE2B6937D3F xmp.did:A2B299F0726FE0118AC58FDA9DF5DA7A xmp.did:A2F5C5F1E5CBDF11AD7D9A1023BE16FD xmp.did:A302FB09E9E5E111AE28D5B57113CA49 xmp.did:A32C2CD40D20681195FE95EF7EFE3E6E xmp.did:A3501E239D2FE011A325D07E052CB137 xmp.did:A3F4D7821620681192B0C5319CB69C7C xmp.did:A41B25DD19206811871F850BE2F5A6A4 xmp.did:A427431973EC11E0A792FB6CA6498740 xmp.did:A48499331620681188C6D9EA900BA018 xmp.did:A48D36A70E206811822ABFFA029D9A53 xmp.did:A491E44BE6EFE011A72BC4DCA77C5A48 xmp.did:A4EAE66D312068119098A37C55994CC0 xmp.did:A511B8AD212068119109C4FC82D5C1CB xmp.did:A5F0B1A348EBE0118A34ADD00EBCF069 xmp.did:A611B8AD212068119109C4FC82D5C1CB xmp.did:A628AAE1CB4DE0118CCDBF34AD86A220 xmp.did:A688D3B59AC6E011A93D9F61069A0227 xmp.did:A6B9D224C11CE011B00CB478FFB6570F xmp.did:A6C24E1BF5C3DF119F6D9BF4B2FB596D xmp.did:A6C6277E1C89DE11A849D901E441D0B0 xmp.did:A71EFD38674611E0B11CFCFE975F1DDA xmp.did:A76284634342DE11A80EE69CCE097674 xmp.did:A78499331620681188C6D9EA900BA018 xmp.did:A7E473D0DB77E011A72BB337603AD007 xmp.did:A806C3667DA0E011A4FEE67DFDD7FB36 xmp.did:A80A9CE5B121681188C696DC609994EC xmp.did:A817C161BFA411E08C7396F5C0DD6D7F xmp.did:A8378A1336A3DF119EE78D38E30AAF63 xmp.did:A83A97962E2068119109C80A4C3147BC xmp.did:A8ECE7294820681188C6E275F11AA5DE xmp.did:A9015082CA81DF118F2FE26B234B7BDB xmp.did:A9147BD8EED011E3A68893F82EBF9E4A xmp.did:A9147BDCEED011E3A68893F82EBF9E4A xmp.did:A9432DF857F7DE118BE884B676DB25DC xmp.did:A947F2DB1A2068118A6D83BDDADBE6EE xmp.did:A94CCF581D9EDF11A8B8A0A95695001C xmp.did:A970ACC1CC7ADF11B9F0DA7869A92B3C xmp.did:A97AF85358A911E4AEAF9FB1ECE68C24 xmp.did:A9EA192F292068118DBB82DD622598DD xmp.did:AA6C5F82AE206811B840E00E6A4F6FDC xmp.did:AAC6B9E41120681188C686C8126EE38B xmp.did:AAE768FF8D6ADF118290CBB94C5CF4F0 xmp.did:AB074D2D0F9DE011B929E56A1DD8643C xmp.did:AB7E99DDA5D3DF1184108A6DF5F8799A xmp.did:ABEA7084A54911E28D488651D913521F xmp.did:AC5F7C2C5D206811B4F2BD4D6AD5D039 xmp.did:AD118B0104E4DF119190888724FA0B17 xmp.did:AD3EC8405BD7DD11BB868C2AA5A2BC91 xmp.did:AE56BBAE674611E08C1080A888ABE241 xmp.did:AE9ABA76FAC8E011A72BDC489F5B89F7 xmp.did:AEEFFB4525C3E011BEF0A37AC8AFF6B8 xmp.did:AEFF010E2F4CE011A153D2BF7C2CEB4B xmp.did:AF1C9A5AAA85DF11ABA2F8AC116D144C xmp.did:AF223C4E7ED7DD1199E1B78BB722FF90 xmp.did:AF3F48E9A5C0DF118427E32E6F9EFF05 xmp.did:AFA17C99DC9ADF11BE6DA116A213E6C0 xmp.did:B01C9A5AAA85DF11ABA2F8AC116D144C xmp.did:B01EADEA1DBBE1118C61C3FA7E29662D xmp.did:B03244C1C18EE011AB41D8FD6E7F1E9A xmp.did:B03E696E21C6DF11891AB4133B3B4FF4 xmp.did:B03F48E9A5C0DF118427E32E6F9EFF05 xmp.did:B05F7C2C5D206811B4F2BD4D6AD5D039 xmp.did:B0A17C99DC9ADF11BE6DA116A213E6C0 xmp.did:B0CEA8BF16206811A961D90CEE83FB59 xmp.did:B11D360C25F1DF119445A5FD895D781E xmp.did:B13F48E9A5C0DF118427E32E6F9EFF05 xmp.did:B1854DB6AB37E0118B3D9D759656F948 xmp.did:B1EFFB4525C3E011BEF0A37AC8AFF6B8 xmp.did:B22E72991EDFE011BAC7F7CD194FE1BE xmp.did:B251B6060EFDDF11B2E3C4FD4894A392 xmp.did:B28B606385C6E01185BED54A95B1630C xmp.did:B326D72B98C4DF11BA82AFFFE558943D xmp.did:B32FDAC0E179DF118258FA780635A3B5 xmp.did:B36A57361D06E111A37E86E77136C1FE xmp.did:B3FCE625EDDAE0118842B29FA6343094 xmp.did:B4112076BF4411E386679C70E86EA2E5 xmp.did:B4128E3D168F11E8A8B4AB71B246FC49 xmp.did:B43A9BE516B9E011AEBCBCB1E3A15768 xmp.did:B505585B4720681188C6D9EA900BA018 xmp.did:B56CF5C7B576DF11A6C5E659E3C24751 xmp.did:B5A517ECBFE5E1118B99A97503504C1B xmp.did:B64468DD2020681192B0FB3680825E28 xmp.did:B66B14327664E011BE41B15A6A029915 xmp.did:B6936E01CE9DE011AF4CB0B3AD39C76D xmp.did:B6DB0B007C20681197A5FEC97E293B54 xmp.did:B6F2711BBEBBDF1196F5B44D3A9BD6F6 xmp.did:B705585B4720681188C6D9EA900BA018 xmp.did:B7303852DC5011E0B192AB8A8597E6C6 xmp.did:B7D06549DF206811871FEC7C962926E4 xmp.did:B82000B6140111E1A40CFEBA1E6C2E7C xmp.did:B8E56917B9E111E3ABE2D11311E99E47 xmp.did:B956EA72157DDF11A762EA67B35A3A50 xmp.did:B9B62FFA50E011E6AFCDA0A379466C71 xmp.did:B9E0E3DF5AC1DF11A3EFE179F6D6326C xmp.did:BA2334AEFD53E011A54D9507E0E8BC34 xmp.did:BA903E531C226811B840E00E6A4F6FDC xmp.did:BAC74A767A3BDF11B81DE3CAC7B760A2 xmp.did:BAE948E4A421681183A2BC64D6373250 xmp.did:BAFCE625EDDAE0118842B29FA6343094 xmp.did:BB1625B78953E011A54D9507E0E8BC34 xmp.did:BB1EFE7EE89411E199CDB81293A4E861 xmp.did:BB251EF6B780E011BFF8C28A70355E3A xmp.did:BB3565E81520681192B0BAA904DE0F8D xmp.did:BBDDB312AB206811AADAE549D6335493 xmp.did:BBE0CFA2B12068118F62B83BB8D9B324 xmp.did:BC14929B7521681188C696DC609994EC xmp.did:BC806AC3DFD7E0118AB9ECA40DAC3FF4 xmp.did:BC9B22EE162068118083B78A909B2B11 xmp.did:BD14929B7521681188C696DC609994EC xmp.did:BD6B1DE20174E01192F2D8B5008E758A xmp.did:BDAEF7BB77D8E0118842B29FA6343094 xmp.did:BDDDB312AB206811AADAE549D6335493 xmp.did:BDF5E82F5C8E11E3860F86CC154C435F xmp.did:BF7C797A9EA7E011B01BA4DFDBC23FA5 xmp.did:BF7D2A4E6B20681180838A5305120603 xmp.did:BF9B22EE162068118083B78A909B2B11 xmp.did:BFD75184AE21681188C696DC609994EC xmp.did:BFEE07671679DF11BF16EB2A5B8EF2F5 xmp.did:C03040BFDF90DF11AE82CBA880F138F9 xmp.did:C074A85E06F7DE119CCA8227581679DF xmp.did:C085439615206811871FE459E5C10885 xmp.did:C0FD116F32B4DF119015EEA538A57654 xmp.did:C12C2402E064DD11AE6AB030FE2B7C4A xmp.did:C16B15488B21681188C696DC609994EC xmp.did:C171A559816CDF11A2B8F7F28FA5F41E xmp.did:C1A9DF14DE9CDF118817EBE6E8614D49 xmp.did:C1F456B1E5F0DF11A0DC84A10DADEBAB xmp.did:C1F748A95921681188C6BD0FAC4EC9BB xmp.did:C23565E81520681192B0BAA904DE0F8D xmp.did:C2357421C80D11E3AF95A6AFAD73FC0F xmp.did:C26C0D495267DF11B2E5C8CA2A20B501 xmp.did:C29C58B9EBDADF11AF20E3D3A3FCE87D xmp.did:C352DEA1D19811E0962DB379077AA33A xmp.did:C373CEC0362068118F62D0F7010AC02F xmp.did:C3879883AF68DF11B9CDD6FAD7E08F21 xmp.did:C3DF71CEC693DF118890FA7A1AFD48D5 xmp.did:C3E99553BA2BE2118052DF928F7D1CCC xmp.did:C4E497A90E2168118C14FA1855B85E45 xmp.did:C4EC4E6211206811822AD32BDFD9072C xmp.did:C4FC67017786DF11BCB7CF116AE8003D xmp.did:C53485763605E011B0878B10470BE98C xmp.did:C55616750186DF11B7F4F2E81879E1EA xmp.did:C57F117407206811AE56F9DF145DFB90 xmp.did:C597C9E96B86DE118E3ABAA4690EC045 xmp.did:C5A9B2DBEF6EDF119FD9CF989D3E3327 xmp.did:C5D75184AE21681188C696DC609994EC xmp.did:C63FF4266321681191099CDD19712E64 xmp.did:C66C0D495267DF11B2E5C8CA2A20B501 xmp.did:C69C58B9EBDADF11AF20E3D3A3FCE87D xmp.did:C6C8F0BDEECF11E3A68893F82EBF9E4A xmp.did:C6C8F0C1EECF11E3A68893F82EBF9E4A xmp.did:C7110E5F5076DF118E61ACD179D06244 xmp.did:C73A523D1846DF118065D80F7B596DE4 xmp.did:C7606959EF9ADF11B4EFDFB461354BB3 xmp.did:C7C638916518DE11B253B453F89B7F8D xmp.did:C7D3B3F1256EDF11ACD680CBF3021A80 xmp.did:C7E5F38D830EDF11AD72E43AD91B55C7 xmp.did:C8656C4D0C20681192B0CF50B4F61303 xmp.did:C885439615206811871FE459E5C10885 xmp.did:C8941789B89CDF11BE6CAFA802A456BE xmp.did:C8C3AD0F9810E0119E3EED6DA52BB020 xmp.did:C8D94497193FE011BCB2EBD6700DA6F2 xmp.did:C909572C0E6011E4B3D8C891054E1CF7 xmp.did:C96ACE01EED011E3A68893F82EBF9E4A xmp.did:C96ACE05EED011E3A68893F82EBF9E4A xmp.did:C9C04586BC53E0119D3985FB4A82845E xmp.did:CA8B034392216811AB65A20D70355B6B xmp.did:CA949CCAAFCCDF11AAA5ECB36CFA01C9 xmp.did:CAA5BA052300E2118295C79BA4470A1D xmp.did:CAA83FFC05216811910987CF0230F4F6 xmp.did:CAB26B3347BFDF11B227F22ACDD3F69E xmp.did:CAD23720A27DE011B2AAA058498F3016 xmp.did:CB5BBB441A2068118083EE03884A9181 xmp.did:CBCA914B2520681186C89F4E62C56BFC xmp.did:CC233AAA1220681180839CE599C3AD30 xmp.did:CC4AB591A7DCDF11BF79FA62B51DF6C7 xmp.did:CC8A58E60485DF119E76E7636820EF3E xmp.did:CCB3A3B94A21681188C696DC609994EC xmp.did:CD2AF5DCA5C4DF11BA82AFFFE558943D xmp.did:CDB3A3B94A21681188C696DC609994EC xmp.did:CDE88BCE4B6FDF11B218B00D847DC297 xmp.did:CE58F6CF24A011E19E12B87F7C1C15CF xmp.did:CE5B2DDE09206811871F80851E6F0846 xmp.did:CE807746834D11E0B62FB7127DA0FEAF xmp.did:CEBB36FD0589DF118615C275FFCC7025 xmp.did:CEDD717E815111E084CF9208B3BF176F xmp.did:CF05856847206811AEE4ECC20A5D0880 xmp.did:CF3F332AD7A9DF11AC39BE02CF1C80F7 xmp.did:CF601DFEFE66DF11ACF78D476F7BB0FE xmp.did:CF6CE817B11111E0AC97A4937EF856CC xmp.did:CF86029F01BB11E5BC51CE5E25ACFA9D xmp.did:CFAA5C072E6EDF118038F278E5086123 xmp.did:D0385D898772E0118C3089D479022CBD xmp.did:D03BB0CD3020681192B0FCE0C044093D xmp.did:D0A7CE91808CE011A0FC932931B9D7E7 xmp.did:D0B31BC50D206811871F81B8681E3F37 xmp.did:D113248AE42068118BDAECB4C7294005 xmp.did:D217B386CF51DE118702BAC19059DE69 xmp.did:D2A5FB7B86B9DF11AA3BA55E040BBAE4 xmp.did:D3493E7C9FAFE3118134AF04456D1637 xmp.did:D36DB02BEF23E011A709EE79085E3A92 xmp.did:D37F28B4769CDF11BAA9CCE927B324B6 xmp.did:D3A14E935A96DF1187F7DF5481F4A965 xmp.did:D3ADAD082E206811B39FA8DEE65FCF6F xmp.did:D3C068EC2321681192B0ED941B81D256 xmp.did:D3D399022320681191098A39F9B5A384 xmp.did:D4054EC11920681192B0BAA904DE0F8D xmp.did:D47D2FA6C9CE11E0B03095BF7204432A xmp.did:D58C284B1638E0119CCBC45B8A98BC1C xmp.did:D5D9C4ECE5BDE011B0BBD5E3244285CA xmp.did:D608018C282068118A6D94CA2FB9BD94 xmp.did:D63D7474D95211E3B723F415BD0B9511 xmp.did:D63D7478D95211E3B723F415BD0B9511 xmp.did:D68D999C3F8CDF11B66E90703A16B40E xmp.did:D695B6854387DF119254F6070AE162E5 xmp.did:D6C86C40B72068118C14FA1855B85E45 xmp.did:D7176B6D58E0E011B95EDA3E835E31DF xmp.did:D7200B25316ADF11BBDBF2B8175EFA10 xmp.did:D736F40B6EEBDF119CE89B15806AEDB9 xmp.did:D76FEA384729681188C6BE54CC59F542 xmp.did:D7A082228321681188C696DC609994EC xmp.did:D7DC109ADA7711E18008A73DB89C9480 xmp.did:D8493E7C9FAFE3118134AF04456D1637 xmp.did:D85DB58C20AAE011979696CECC20A286 xmp.did:D883D4C80775E011B3C9FB563EB9BBC3 xmp.did:D89A4E700E2068118083D158918C2014 xmp.did:D8C86C40B72068118C14FA1855B85E45 xmp.did:D8D3659C0B20681188C6D9EA900BA018 xmp.did:D8EAD0270190DF119D54C83BEE2F45FD xmp.did:D955F1B2982D11E3A5E6C5BCA1E0549C xmp.did:D955F1B6982D11E3A5E6C5BCA1E0549C xmp.did:D9A628947F21681188C696DC609994EC xmp.did:DA30AD8C12206811910989406DF36966 xmp.did:DA67C380402068118F62A588B3F859EB xmp.did:DAA1D198ADB6DF11BCFD93E76A0DC2F4 xmp.did:DAA6D3734E8BDF118B119F0373947DAD xmp.did:DAB2A2F9FB76DE11BAF5E143B0B86FF1 xmp.did:DAC8507854D5DF11A094DF01E6EDE320 xmp.did:DB00867DC148E211975BE3F01A671811 xmp.did:DB1E4C1CE87ADF118CB7FEA7CD74D35B xmp.did:DB6BC860392168118F62F638EA26DDDD xmp.did:DBF226EE2D81E011A575FF8823ABA620 xmp.did:DC00867DC148E211975BE3F01A671811 xmp.did:DC4F4822108DE011A1C7E8C95E0A5A44 xmp.did:DC74AD2D0C206811B1A4827FBE321FD6 xmp.did:DCB8AF313C0EE111B603C0FF5EA39F70 xmp.did:DCC0E10A1F95DF11B30EEA8B8FA3A1BD xmp.did:DCC1853A3A216811AEE4ECC20A5D0880 xmp.did:DD32ED4CC05D11DFA520AC9F675C5341 xmp.did:DD368857CBB5DF119943CE4CD4010D9B xmp.did:DD5331D43C2068118F62CC84EB2E7047 xmp.did:DF214730312068118F62CC84EB2E7047 xmp.did:DF5331D43C2068118F62CC84EB2E7047 xmp.did:DF899B466140E011AE5DE74C62F0E7EC xmp.did:E02C190E426EDF11B24DE908ACCAC095 xmp.did:E06F786DFCB1DF1198DFB20F90D3AA6E xmp.did:E0DC5C40852068118F62D27A6BCE2F0B xmp.did:E18B6B7881AFDF11A99089F1760612D8 xmp.did:E1B8D0AAE3FA11E38CC9D5595BEAF65A xmp.did:E2387CA9092068118A6DD7606065F06D xmp.did:E2421EC8A62068118DBBE9BB7FD2A0C8 xmp.did:E280A3466FC011E29171A4C81E509EF0 xmp.did:E2F26FF45DBFE111B99DF8E76F9ABF74 xmp.did:E2F3B2A11E2068119109C04F2B24B753 xmp.did:E30E4902BACFDF11B14EED88D48A12C2 xmp.did:E31FFC57541211E0BD2AF927F2DB9596 xmp.did:E33EEECDC9F8E011A452DB8AC9648D02 xmp.did:E36553242020681192B0876F326BD696 xmp.did:E3F584F9B67ADF1194A0FF2706F6F138 xmp.did:E45B1F7407206811808388114929D8F7 xmp.did:E5058D4E9E2BE0119DFC94F68E9FB408 xmp.did:E589A9A91D2068119553C5952A36A291 xmp.did:E5A1D987CA76DF11BDA3DBFECAD00321 xmp.did:E5A1EC372220681198A7E8A9FC75773D xmp.did:E5DFB25B5E93DF11B775B1FECE385471 xmp.did:E5F40B46DD64DF11AEF4E21B49241302 xmp.did:E61653204488DF118E8FBD716AC90F65 xmp.did:E6214730312068118F62CC84EB2E7047 xmp.did:E6C74BF40B206811BEDCEC12B17E052F xmp.did:E6EEAC66382068119109E4A43CE530D0 xmp.did:E7041F041F0F11E084C9A70103495335 xmp.did:E747C0F80F65DF119A94C5D8D188955B xmp.did:E794078DDE64DF118A53D4EFE20C3518 xmp.did:E794CE25B973DF1191B9CE602E6BB3B6 xmp.did:E7DD52641A19E01195F1BA474F2C0BAE xmp.did:E7EEAC66382068119109E4A43CE530D0 xmp.did:E7F9FCF120EBDE11A1BEB9F496284AD8 xmp.did:E83E8B283232E0118EE68999D946CEB1 xmp.did:E85300598D7711E1A969B5EABEEE44AE xmp.did:E853005D8D7711E1A969B5EABEEE44AE xmp.did:E8C1560E9217E011AFFBA65419AF10CB xmp.did:E8F5DDBCEDB0E01191FFBD2DD96ABF07 xmp.did:E96C3ADF2244E011A2C2D0B0B92C7727 xmp.did:E9710C1D002FE01195828DEEC618B761 xmp.did:E9785F9708206811B3A9FA077BBC5C96 xmp.did:E9D7FE3B4D2068118083F286C739C2F9 xmp.did:E9F8E4BCC421681188C696DC609994EC xmp.did:EA1653204488DF118E8FBD716AC90F65 xmp.did:EA92B2569ED8E0118842B29FA6343094 xmp.did:EAD2576A0D20681192B0FEBDA93E3C72 xmp.did:EB9D13B8007C11E0A51DEB87967C265B xmp.did:EBBC33283587DF11A9B59A85CDC63B16 xmp.did:EC4577EAD95711E3B723F415BD0B9511 xmp.did:EC4577EED95711E3B723F415BD0B9511 xmp.did:EC4577F2D95711E3B723F415BD0B9511 xmp.did:EC867B3F342068119109909B64798A91 xmp.did:ECBC33283587DF11A9B59A85CDC63B16 xmp.did:ECD989D5DF71E01186C4F2433814AC76 xmp.did:ED3F8071C82BE011A5AEDC8A542D4786 xmp.did:ED7F117407206811A229A9B2F7593D2E xmp.did:ED7F117407206811B28C859639FD65E0 xmp.did:EDBC33283587DF11A9B59A85CDC63B16 xmp.did:EDC32884E39111E3871CC8AF014EA9E2 xmp.did:EE060BC9B174DF11B6A78A06DDE30A7A xmp.did:EE162A984C16DF1185C38799BDF561B5 xmp.did:EE4797E22F2068118A6DCC490C993EBF xmp.did:EE7F117407206811994CEB8550425B9B xmp.did:EEC1560E9217E011AFFBA65419AF10CB xmp.did:EF0008E2E40911DFB5AAA6008D4E8DB8 xmp.did:EF6A4F201276DF11835BFF306497DEF1 xmp.did:EF8441C065E7DF11B8ABBBF7FFA6B0C4 xmp.did:EF9052D3D4A9DF118931ECF643331B58 xmp.did:EFC9D1D477B0DF118B43CF67BE3C9F7D xmp.did:EFF15E658C98DF1180DDD7788799ED24 xmp.did:F020252D40206811871FE8DD2340C0B0 xmp.did:F04D35C642B8DF118CEA9E52E1D0FAB8 xmp.did:F0B555145168E0118B1385B28F882E94 xmp.did:F0DAAAA83D216811994CCD5FF36C8C71 xmp.did:F130F0727B20681192B0D8368D31C23C xmp.did:F178F87B86206811BEB789E23D201984 xmp.did:F18F93CC6279E011A4D3C40ADA3B0913 xmp.did:F1C1092E02C2E01185C6B675C312A0F3 xmp.did:F1D362B2D95411E3B723F415BD0B9511 xmp.did:F1D362BAD95411E3B723F415BD0B9511 xmp.did:F1DFFA2E18206811871F907425105573 xmp.did:F25C8AF19B2068118F62908DFC3878E0 xmp.did:F27F1D69DCB4DF11967FD6EFAD51B757 xmp.did:F2D9C097D12DE011A4C39FDDCFC91B6D xmp.did:F339E1094FA4DF119AECC39D7F6EF22A xmp.did:F348C3CCC40CE011972FEB89052F1F93 xmp.did:F3490D2C1921681188C6B7868B1364E8 xmp.did:F4234241982F11E3A5E6C5BCA1E0549C xmp.did:F448ACD9E584DF11AE5F9A1AB65AB8F9 xmp.did:F47BB6CB2184DF119DC797D7DDC2CBB9 xmp.did:F4BE07503650E01188FDFFA22DD2E1BF xmp.did:F5391247221711E398FDD4FF4D8F6C2D xmp.did:F55BCF3A664B11E4AD3BD6FD3A1D5618 xmp.did:F5A5431B1C20681192B0CE6ADEACB302 xmp.did:F5C288EE8C58E0118A6CFA0D378051C3 xmp.did:F5C8BC0C144FE011936EB904A6390C15 xmp.did:F5C949D4FB68DF11BB279F98F067360A xmp.did:F5CF8E2D7490E0119A18FB12BAA81907 xmp.did:F5F3271861E8E011A8B1E233584C880C xmp.did:F6164B44C880E011949FAF220FDE3616 xmp.did:F65398EE0B6AE011A161A7FE0780063A xmp.did:F65EEB8B6B2068118083AC546C0EE525 xmp.did:F661D9FA8775E011B17A9E22BEA99AB9 xmp.did:F6CF60380D21681188C696DC609994EC xmp.did:F75D918A1120681192B08BEE29C75DD2 xmp.did:F76097E97542DE11BDF28198A8779061 xmp.did:F772D2CE65A9DF11ADEB824D3C625F58 xmp.did:F774F9FDDA206811857EF51D78886996 xmp.did:F77F1174072068118016E3CF38EC96CC xmp.did:F77F1174072068118083E4E575C04EAB xmp.did:F77F1174072068118083EB83C62BD7C1 xmp.did:F77F117407206811822ABEBF2A74928D xmp.did:F77F117407206811822AC533F6451E4B xmp.did:F77F117407206811822AF7A8CC7F96A3 xmp.did:F77F1174072068118603B4EB98C19FD1 xmp.did:F77F117407206811871FAF8B0949E228 xmp.did:F77F117407206811871FD6C6B3A51DD0 xmp.did:F77F117407206811871FE2FFC5A15DAA xmp.did:F77F117407206811871FFE96F47936D6 xmp.did:F77F11740720681187C4C63AF347C9D3 xmp.did:F77F11740720681188C6B07CC95C0538 xmp.did:F77F11740720681188C6D81FB348BB42 xmp.did:F77F11740720681188C6D9EA900BA018 xmp.did:F77F11740720681188C6F83C91933163 xmp.did:F77F1174072068118A6D90E1FCEAAC55 xmp.did:F77F1174072068118A6D99D68D2699F7 xmp.did:F77F1174072068118A6DBCFF8FBBF0B9 xmp.did:F77F1174072068118A6DE0B41756505B xmp.did:F77F1174072068118A6DE34ED34FA875 xmp.did:F77F1174072068118A6DF43387500C21 xmp.did:F77F1174072068118BF792C16EE1E716 xmp.did:F77F1174072068118C14BD1CC6C0ACBB xmp.did:F77F1174072068118C14CD081E66E7E8 xmp.did:F77F1174072068118DBBA8F193EBC78B xmp.did:F77F1174072068118DBBDA7B868B1240 xmp.did:F77F1174072068118DBBF0860F7EDEF0 xmp.did:F77F1174072068118F42F1D8108024F1 xmp.did:F77F1174072068118F62FDBD9649A46B xmp.did:F77F1174072068119098A37C55994CC0 xmp.did:F77F1174072068119109862065E637A5 xmp.did:F77F11740720681191099FC0D5297C7D xmp.did:F77F1174072068119109AA3891E71C20 xmp.did:F77F1174072068119109B80DD3093C00 xmp.did:F77F1174072068119109BC552EB79E12 xmp.did:F77F1174072068119109C71CF6D9E2A4 xmp.did:F77F1174072068119109E626B4ED1C3E xmp.did:F77F1174072068119109F8FE27718D5A xmp.did:F77F11740720681192B0A1AA0B2EFC15 xmp.did:F77F11740720681195FEA4D474CEC3A2 xmp.did:F77F117407206811962A9056C938848E xmp.did:F77F11740720681197A5E94B7C2456C1 xmp.did:F77F11740720681198E99BCF30868C79 xmp.did:F77F117407206811994C8A8243CF6DD5 xmp.did:F77F1174072068119C12FCC73F11446E xmp.did:F77F1174072068119EB8F890500830B9 xmp.did:F77F117407206811A1AFB41E9D0EF6B9 xmp.did:F77F117407206811A961AB651AD759A8 xmp.did:F77F117407206811A9F8A44324AE3979 xmp.did:F77F117407206811AB088ED073FBA775 xmp.did:F77F117407206811AEE1E85804F1BC1E xmp.did:F77F117407206811B516B5B451545A40 xmp.did:F77F117407206811B5FEC38E6EA09CBA xmp.did:F77F117407206811BAFDD8C559CCB40F xmp.did:F77F117407206811BB8EE28C44C74A0A xmp.did:F77F117407206811BEDCA708FFA8A08A xmp.did:F787351D35206811994CAC4A6D2CC7F7 xmp.did:F7D5F4130AA1E211876CA2AB58E5D57C xmp.did:F82C9B629EDE11E28289E61ECA152758 xmp.did:F82C9B6A9EDE11E28289E61ECA152758 xmp.did:F8301B2C0D206811B1A4F4BFE09FA186 xmp.did:F87F117407206811822ABD3C2A242D50 xmp.did:F87F11740720681188C6956C521FE498 xmp.did:F87F1174072068118A6D99BF57D6CD4E xmp.did:F87F1174072068118F62A44CE4DF69A8 xmp.did:F87F1174072068119109AAFB9F469FD0 xmp.did:F87F117407206811994CA9A71151591E xmp.did:F87F1174072068119CD4DB2985335F93 xmp.did:F88F820B1420681188C6D9EA900BA018 xmp.did:F8B1200EC82068118F62B55C94B5F1CA xmp.did:F8BC412B0C2068119109C80A4C3147BC xmp.did:F8E327E22F21681188C696DC609994EC xmp.did:F968FBD12F20681192B0DF62A27A19F6 xmp.did:F96E9DEAD78311E28E41FA4DAE2A36B6 xmp.did:F97F1174072068118083EB83C62BD7C1 xmp.did:F97F117407206811871FEB8DB824A23C xmp.did:F97F11740720681188C6D86C8FF95AFA xmp.did:F97F1174072068118C14886BEA417E94 xmp.did:F97F1174072068118DBBEB69C03E24DA xmp.did:F97F1174072068118DBBF1EFF81BD277 xmp.did:F97F11740720681192B0D584A9130FDC xmp.did:F97F117407206811A6D5D23F472BAFFF xmp.did:F97F117407206811AB39EE7D3CCB07EB xmp.did:F9BB797B150711E4A26AD5AD1DF574D1 xmp.did:F9D2BC0A0398DF118E0DFBCC39F1D70C xmp.did:F9F16C12E2206811BEDC9678CA0435A7 xmp.did:FA7DB37C2B5611E8B022F407692B6CD2 xmp.did:FA7DB3802B5611E8B022F407692B6CD2 xmp.did:FA7DB3842B5611E8B022F407692B6CD2 xmp.did:FA7F1174072068118A6DF71B007A25D0 xmp.did:FA7F1174072068118B55D8122BD4BBDA xmp.did:FA7F1174072068118C14AF6C9BD96AB9 xmp.did:FA7F1174072068118F628C4A209C8985 xmp.did:FA7F1174072068119109836B7A347A79 xmp.did:FA7F11740720681192B0D6DC74DDAB73 xmp.did:FA7F1174072068119A1DBE620170033A xmp.did:FA7F1174072068119D68B0A7E60C0F5F xmp.did:FAC8674AABF411E284C691E3D9B8F21F xmp.did:FACF60380D21681188C696DC609994EC xmp.did:FB52C9EC0C91DF119CEE9052809BBE83 xmp.did:FB536F21AB21681188C696DC609994EC xmp.did:FB7F1174072068118083EB83C62BD7C1 xmp.did:FB7F117407206811871FEEA6EC09A2E5 xmp.did:FB7F11740720681188C6CC16CFB2376C xmp.did:FB7F1174072068118A6DF71B007A25D0 xmp.did:FB7F1174072068118F628504B14915F2 xmp.did:FB7F1174072068118F62D1E4D00C3DEC xmp.did:FB7F1174072068119109ABAA041E7FE7 xmp.did:FB7F117407206811AB08D95ECD287044 xmp.did:FBC4D2040A2068119109CC642C44EC0C xmp.did:FBF0030BD094DF11B924FFC964F2F0AE xmp.did:FBF99EB7567DDF11A74EE6CE03994422 xmp.did:FC7F1174072068118A6DF3C73496F8E5 xmp.did:FC7F1174072068118C14BD1CC6C0ACBB xmp.did:FC7F1174072068118DBBAA650F3D9198 xmp.did:FC7F1174072068118F62A6A3FE1774AD xmp.did:FC7F117407206811AD43B1EC353D4389 xmp.did:FC7F117407206811AE568088196B6FA8 xmp.did:FD7F117407206811822ACA3D0784FC0B xmp.did:FD7F1174072068118A6D99BF57D6CD4E xmp.did:FD7F1174072068118A6DF71B007A25D0 xmp.did:FD7F11740720681192B0FCE0C044093D xmp.did:FD7F1174072068119457DDD263B06589 xmp.did:FD7F117407206811BF24C98FA878C053 xmp.did:FE7F1174072068118083E4FF021AA64B xmp.did:FE7F1174072068118F62DD804FF26847 xmp.did:FE7F117407206811A961E68EEDC136C8 xmp.did:FE8F876C7E2168118F62E601B48A9F82 xmp.did:FEC52D397663DF11B26194DD13427F8B xmp.did:FF3550F002AD11E18740F64E75AD4D2A xmp.did:FF3819F6172068118F62D63BC9AEC7D1 xmp.did:FF57693A018EDF11BEBB835A3A1D3CAE xmp.did:FF7F1174072068118A6D99BF57D6CD4E xmp.did:FF7F1174072068118C14BD1CC6C0ACBB xmp.did:FF9D5EE8E87CE01185D4A044C68EEC55 xmp.did:FFACF482E17EDF11A5AAB86F66D75F22 xmp.did:FFC0E07E8E6CDF1189B09E42195B25B4 xmp.did:a090fc9d-7bcd-4205-af16-7be6bb9df0b7 xmp.did:a0b9c386-282b-411a-9ebe-b87e73bdd4be xmp.did:a17cbd4c-264e-428a-9b0f-1ac87facd6c5 xmp.did:a2b5bc33-bd75-41a6-b8a6-e6d226df6ef9 xmp.did:a3624e9c-4691-4e46-a85e-a888d909868c xmp.did:a4076541-e24c-4448-afa8-ffbdbedffba8 xmp.did:a60f024a-c5ac-4cf2-94d3-9767dc796848 xmp.did:a7a5932d-40f9-45a9-b065-193681c9a719 xmp.did:a860f718-84cd-4add-8889-f05473da6ad9 xmp.did:a88ff82c-581a-4027-9732-60da88653472 xmp.did:aa3a21e4-eebf-41a6-b033-e7e746c1c0f5 xmp.did:aa909b71-e4da-43ec-97f3-8fb350a2cb0e xmp.did:acbebcc9-468c-4924-84cd-60f58d548dcc xmp.did:ad36e9c0-dfd8-41ee-b80d-273fa59fc3a3 xmp.did:b0571ebe-1bd8-4216-a6d4-9b2f831ab05a xmp.did:b0ab6d26-de3b-4d25-a68b-495b0820f0c7 xmp.did:b0e3229c-4eed-490f-a85b-c6add5fc67d4 xmp.did:b354debb-083b-440e-b1e7-2eb8779b9015 xmp.did:b4ce5c9c-3621-4d13-b888-3ae643f7832f xmp.did:b5eb23ac-67c1-483d-b6fe-e66b8bb3b04e xmp.did:b7ebec2f-5237-4ac2-a57d-532927285672 xmp.did:b874964f-448a-421a-9f99-bbaa77b96126 xmp.did:b9377b62-fc66-43d0-8fca-b67a25889437 xmp.did:b971f567-dd05-45bb-8e87-d19c1710cd8a xmp.did:ba707181-18f2-429d-9614-c12ef0545588 xmp.did:ba7c2403-c582-4cb2-ad68-cebd96a416b5 xmp.did:bd0f248b-5da8-4a78-89ff-2ffc657088fe xmp.did:bd70111c-114c-4438-a84b-4551a223a062 xmp.did:bf097764-3009-4fd9-a3dd-54d9fbc49e4e xmp.did:bf20244c-5feb-4476-8c29-ddcba20ddda5 xmp.did:bf79b595-9871-4721-b018-ba03a986eefd xmp.did:c1d80d72-0d52-4d19-8567-ad946427c785 xmp.did:c293c924-cacf-4834-8a8f-c9375ff57ce0 xmp.did:c2e9bd39-023f-4b67-8e3b-8e445930e6cc xmp.did:c3eaa55a-c868-4498-b2fe-fac9aa35b984 xmp.did:c80c6cde-3c42-4684-ab34-2f1cb10de999 xmp.did:c8eb0262-df7d-46c0-8e2e-f4f77b73a015 xmp.did:c9531680-0d4d-400a-adbc-cedd8048f3fe xmp.did:ca0448eb-9ae7-4d09-bd39-ab7261f897c3 xmp.did:ca354ed8-fa54-4a88-87a8-8dac6c9b69b1 xmp.did:ca3e37c7-bfcf-4b6b-8472-01aa83acd822 xmp.did:ca50aa03-3e50-4d7c-a543-a4ec97c64f3b xmp.did:cabc9e37-5627-4fc6-816e-f87fafa62e8d xmp.did:caf7c78c-e511-413b-a0a7-2c54da92bbe2 xmp.did:ccbd0a45-b9ea-430b-a042-41b697be030b xmp.did:cf66f2fd-ecf2-4a2a-a9d9-aaeae18dd247 xmp.did:d09a703a-c7c2-4a40-b6d6-9cac51dd2828 xmp.did:d156fc6f-90b5-489b-a01a-bf3e992ece93 xmp.did:d376339f-3e87-4ec6-bfc2-bd0788739da7 xmp.did:d3835abc-3b56-4cfa-95a1-b05d5a23924d xmp.did:d3ef0faf-ecfe-49fb-8bda-6d73da663c9b xmp.did:d4e5396f-3323-4be2-b8a9-b4aea15d7418 xmp.did:d5f8c446-b02b-4184-8242-f30d26245982 xmp.did:d6463830-fec5-4f8a-bcf3-efb0545206d9 xmp.did:d837d774-5d3e-be47-8c3f-ccfabcb105a6 xmp.did:d9450484-eae6-4360-b997-46ea87df5910 xmp.did:dbcfa65e-4047-4ee2-93a9-a4fb5d5a8aa6 xmp.did:dc691136-8fc5-4103-b682-e1b2eb7321b2 xmp.did:ddcdae12-5bf8-4c68-a2a0-7cd051852984 xmp.did:e0b66ab6-a90f-4bf8-a855-2ca9eabe0111 xmp.did:e423467f-ab21-471e-b274-096eb86967db xmp.did:e56e2ada-2bdb-441c-b905-949879ce8eaa xmp.did:e73385ea-c2b2-4870-9ddd-f37cf5a8292d xmp.did:e8e101e4-fcbc-4d36-9c06-2014d1bacba2 xmp.did:ea9640fe-9401-4c78-8b44-56c029f727cf xmp.did:ee7503ca-cf2d-46a6-b945-50e06a24a32f xmp.did:eff9ee72-0c94-4bc0-a18b-f79c3f9624e9 xmp.did:f02676fd-e0fe-4fa3-9189-8cefa67a437d xmp.did:f06432ed-ae23-4799-a952-1efbfb7f3cd7 xmp.did:f1b1e08a-c0a9-408c-af01-91fef1fd3c09 xmp.did:f4075d2e-39ee-4f6e-b677-d92c7c094c25 xmp.did:f473bbfc-ea19-44c4-90a2-6dea0b17ec7a xmp.did:f4977f67-64ca-441a-b1bf-20d4214c90a1 xmp.did:f5123bbf-2c16-4300-95e7-de1b84c9ec10 xmp.did:f5663e66-f290-477b-b3fc-4590d5a91066 xmp.did:f5b85b03-320f-443c-be8b-a68d242ba20e xmp.did:f7f2d92f-7491-4614-b80b-dd04ad56c9d8 xmp.did:f9312bcf-f1fa-427c-9857-b45bcc39287a xmp.did:fb7b6630-7055-4600-b8c8-f010d6167d98 xmp.did:fba7a842-c809-4f5e-a835-b43a5a2ffdb0 xmp.did:ffe9cb11-0c81-4dec-904a-d8238f547640 xmp.id:00d6520f-a660-44a2-b952-b7a18857883e xmp.id:0EF03BB108206811822ADD1F3230526D xmp.id:157fa1bb-a642-42fb-b9ba-c7767b998537 xmp.id:1D328185C366E211A575B3112223C242 xmp.id:46f831d3-4de4-4d1f-b22c-49d3e79db245 xmp.id:4876fe3f-6b52-41ca-abe1-fc9c00eb3042 xmp.id:61e88989-31b1-4a48-9057-af292043141d xmp.id:70B8695024206811822ACCE334DF5C2C xmp.id:8b375b0b-bb56-4d25-a3ba-12d18b05fda3 xmp.id:9189b746-d4ad-4300-816f-6e032c90ccba xmp.id:94e0513e-4a6f-4026-be5c-d72d0578e2db xmp.id:BCA7780F1720681180839C4A3E4C2D59 xmp.id:b415032f-5cb0-4732-9948-75a52ffce9ea xmp.id:d4c02c85-a003-4cdf-9f70-fe8353ff75a2 QIDATX]hU$t $1jdTH5h-6J7^UL[QK4T[CJlbTE,mJRË́%Fc I^>,l~&nR!>s93;X,bQ_?| 0():` EYs9hy7p8hnbaAe ؕ\w%EKY_hM+|>1 o!%ő^)lWRgß*v0 L9hEf h suBHU=խɄ-P\/!h:4ü|1 Pߥ-oF \:U:5l8et`36hiy?,zx)af/kv0=Up?kK`?йwS'*ږ h4()~6@ӊzb -"MJ%ų\W{S tD=b| 4FenCVlBJt4P<4d^? C֬2殖Y\(jVR$˳& r'Ne5JcAaqN`7ΛjJ 52"n>ޡ]PRR|BI? GZ8WsJ/GO}JAqUU!7N~b4 ^3ea֖Fjot+ 5| x}ǁ=Jd\mT\Z()ޛVuEjA;^hrMR gO=!k@ 0012D0A0C6A3250FCC6D5BBBB968F034 002504E969886669855B1AA9DD16BE4C 0052F64A37D14F19190F2DE36E2B06D9 0100F3F5356228861A9E2310BF020B71 0209A62704B5B63352B4E147740CF8E4 0233AA1C61D5FB15E9CD528C9574DC1E 02A9CB61BA4D01CAC197B57DF1817394 02E5D201D6B924DD5E60543FC14B0898 05112694CB5CC686D67E321F54C808F3 0517B98DC8C698B2CD76DB31066277A0 06591083E1503D463E6F4338A5C05197 07D56A570494E8C52865C1BA535C9AD0 0861650E0FF9BB74F63B1E6011738636 088792A54395E04E9A155FA8808C5950 089C8DC733E2979221F3B6BC2D5F8D90 08D0D7DA681F94C4BE0B4E0C926330F4 08FD03CEF0B6ACFC65DFA8DE948F81CF 095372FB13F537DB24DE34FA5A6E3007 099DB3EF7ED80E3E125B753C90091F8D 0A08E1E55910BAD55E740BF55043C8F1 0A389EB0819BCF3F505501CBF66AEAAC 0A3F1E20DABD1F2308AF2C2A60036E78 0C151C4EA97D41FC66B40D8260FA865A 0C27D44255F4D81393BFA7A78297A2BD 0C66C8B51690D1556ABAE8A8946ED57A 0CAE6A5BFBE86EDAA8B23475AC5D7091 0CB0346F9E0605F1FDC1F3907725B681 0D14F5405426DB8A76D920846F2870B0 0D1EDA570EA8DFE441C19470E5F4A248 0D32A465AB6AE4320028B3A59F5B2E40 0D4D15256EAB7E7E48424C13491833B5 0DDE4D6EE9044ECE03C589F57621D870 0DF793AD238D19BCF8580A832E878E2D 0E62C40463DABCF05EC2A7D288A08C9E 0E6789F2CC6D2DC2D602AF231114DC55 0ECD2C290DFB7B39488ED7B84130D26A 1058A167B457EE37432879D4B76A5627 10F900B609D13A641B41758076CBEB8D 1111DE664AE773B37F28AFCD4E3AC8C3 11459BD7DF7C7380CA9F9E53F41161C7 128BB761E721A6C21F5F01170951E34E 129DC4C7E057F5B893624D31ACAE4B9F 12B59C170EC996D8F8FDC43AEF631D68 12BE795547019F56B184F293A41D19D0 1316CFCFE58B5344C3F8AD18DA124B14 136AFDB6FE7EA26D2EB62AB5DEB32AD4 1378DD074060E6EB5EC06385169CFEF5 138D7171CF2B9CA239356EA41AA9EA56 13C0DCBC5E1668C66B87AC46CF0E90B1 140D942F274F29055584978D85568EB2 14CA1C8BA672098221D49D129514B540 14D5A6B0248D3CC145351A74A7A1CD20 15570A465BBE7A38C40AEE3F3233B46C 1627700E1BF13241114B801753006B4F 16F45AA2AF3367BCB885E74A16F16155 1711494B5D085CA83437529F630FAEC9 177769949C59CFDA83D3287664AC9360 17AACF945191861AA02C3FFE3A596205 18224575096D40A5DE56D6691939F462 18767071964702D61CA1CA7C398B2DF0 1907A50F9788D2CF0D1447601A55BAC0 1A006EECBDE10A4F866EF305071E0006 1A4443E0FE78E5755FEC4C45590409D1 1A694CB8EEF5AD12C928AC9751C51B93 1AA8AAD73A1B76A3ABDD14966940032C 1AFBC35B82C8BC4B8681DE733F534214 1B0B5AE52161586C924B38650F05E301 1B1F533A82CF3830BDFB8D15601EB17B 1B233672F39EE6E572A6A8C4527C40F7 1B30667311C3AF46908A993F7981BA6E 1CC348323C23811B10C4BB8E254DE1ED 1D849E744FFE4487D1D149FC9852DE41 1F00B58B40933A0E6173BF754F682FD7 1FE37BDCDC93C74C2DA5083009B3453D 200BDC72EFEEB0A3CF87D56AF4725EB1 208902292B8E0F1BA6098AD6A45ADAB6 20A6EFFA3680EDF1674FEEB99B7BA126 21AB6DCAAAC086EBEE2975F398CC003A 21CF51A48E8BDEE49B29D102807D2FA4 220A801675DB06256BAE8A0F6AF4396B 231365EBE52123E62EDDD6A952AA7C96 236C7FE5D98A09991D7956AEED27038E 2435007FA4DB119750B6DAE42C304DD6 255A0F967D25E3A0DC5E0C9C97127B37 2698EE73A8C1AD57693E5217C3CDAF12 26CAFD3456C41A517EBDC9597C79FDC4 27624D217D92C81E3BE35531D36561CC 2772D9E82AD5493CAD313EE41018F0D1 279C643ADFB9402BF9835057EADAC38B 27B331BE42FE16CFC1651377926D762B 27B9EC0797B24F39A300C365D62E16F5 2902DB5D348D6B7067110110471E880A 29BD98EE2F575E34279CFC642535E74D 2A2C9C77C96FCE65888EE9B8AA855FE2 2A3C2B2E14D95543DB60EDFF4425F86E 2A5D8DDDB86CE08DF2C725879E6B643A 2B19AA2C4469CA1CC52DB12F49174157 2B7D17D1F65E1C9258C9A47800A67226 2C4CA610A9A49E63DCBA2F6EC05193F9 2C9FDE8C6A775E1D75F244D84C6E21D9 2D167B1DE0C02BCE8A243E3FF26D637E 2D6FEC8BF532BDC6764393204BED1697 2D7941B6FE249F7F33F6F6FAF288B896 2DB2E4D0EDE8262ABA30BD11FA7A410E 2E5E625D41787229A42EA78743DFED92 2FD37278F5EEBE7232AE5A68D9A9466D 301CC8D7D426A93CB5BB33AAE6508349 3057CB48C137860AFE6BFC622443C825 30B71F03B16FCD418E22E35C468F6899 30F195B254AE4EA3732AAED75E48F021 3103CCBE96499D5B698D8FF4ECC586AE 313C47AD2C1E844D4395B59ED381C6A0 31D8D6A3C8EBEBA070E3DC4A99BA509F 330B47F5F02C1ACF8A2F0E70853F0FAA 3353FADB47A3F0DE60E4500049A4DB28 33654127B5965AC82ED0B39244F7E7E5 33E8AC6B616570F9BD9B19BAE78BB91C 3485C4A2738D47BF8075D1F7A7C48EAB 36059700EC4C42C7349DE0EAA192C29E 362D264C6FB6A85A46499E410D2F4652 36C1FC4D45442B57738D72CA4B11F849 37789D9A4AA841961A41E88D21D91D85 3921FCED3F2181F72D9D71C7036C7B12 39C9448D471EDB006D1CBC25CE47E7CC 39CC469DCB1D74D76686438B0F66AAC2 39F49227D5377EF32E2748D973C185B5 3A16C5BC5ACEBE82D01017AA3B8984CE 3AA26C3C5FDC5FA1EEBA954B0958A31C 3AD93AE2DBC04CBB8325C03A97D07725 3AE541503B8FEF908C36AC0119BF25F7 3B98D53B911C0224E046AAC7D19C6D02 3BB37C4D06FBA65F6F25FED470DE7CB5 3C2A64634C9788BFF38FED5ACB063533 3C981753C3C5EE3A4D5AA909EC9026C5 3CC3A7175C7CAE64EA6557385E4B0624 3CF6886BB569D09259AD3DC8679AC153 3D009502AA6E6CA7D1FC57D037A7116B 3E67E92287A5D342E39337A03A077AE0 3E75B73ABB8F2B3D2B694FEC21303AB5 3F0AB62422B769922413ADBD52B88D68 3FBFA2D46590CE97E8F9ED1811A8CDE6 3FFC1F55DFBB39B744DCC0CC27667459 405A7FFCA4446EA744B67BABABB96F08 40922F1B0D07A1D88DA6FA721900B122 41675838011DBFD099584C462BE27ECD 42209BC19B9590A813417E96539A6F24 4341A52AAED5E8D9220953BCA7A8CB7E 43C7509DF05B08F1B899B89894694853 43D2FFD9EC32FC78F81D7D0C453FFE29 43EE0D07E76CD93BD470E9B98CDE836A 44599ABAD2B09175B6DE2FEE120705F1 4471ECA91DFAEEFE0F31FE03F1E4A233 457ED299FDBD891424DB75A301932995 45B28DF8F723C86DA8547E2747556FA0 46E7A9B138C68EEE8E1D0A4B46238A9A 476CBE98CF4E8E70205EAF0D12B11BB5 480EBA80A725D954D3D170D72B527C59 480EE9EBAC4E0B9E2BECC71BC320794C 4860C683F0D58EAD43C84888A9C64D3E 48E5D03365041790E4632094C2E015B3 4A50EA3EF610D17D39286D287998F001 4A65C9CA6BB63D60A17D271D8C5B69AF 4A78D85EB777DCC82A3A699A7BA3B4DF 4AE3EE0E518164E77EEDD8E83B026EF5 4AE59A3A3E7784FB81DFADB670D6D6A4 4B638E95E29736B6531D6B9496FE410D 4B70A78C9DE38AD7C05CC967CFB7510B 4BCE264CFCDCA3F632FECC53BC340D54 4C1E13A85DA9A42B6CECFF71069DA7F6 4D74AF71B2435ABDDE117DCBE79A1AFB 4DA7AA862160E1C2FC98C6C6A2283059 4DAEAE812197DFAFA0F71A5E58A7DCC3 4DB4ADAA46B35374B6EB9E919A913D49 4DCE59C98623251BFCBB4CDC874E14EF 4DDCA1B4E2E2580243D444BC4B7B9D43 4DECD3C733779F33EC6BD8AB661ECC57 4E355444F357BD8023884C75796E2C0E 4FAAE26D9BA0E5B222CB74FAF9678DA2 4FD4915243B839CB28F3E20C75874906 510F1E4CB55CE76FCCBE8051F2EE6595 5151304549D50A07A105E98AB1885596 524CC22F773ECD507D7D1A031D79BA50 528B0E775823664A44BCC436F83C98BF 52A5C6A68EDB331D0E103ECBAE7B5A92 53C6FC48125E167F084717E6CEBAA22A 54FFFCDA487C7EAA9E6808A40F332115 55BAFFCE52AE6B79E6D1E7AD095728B4 56072C6E296D5F3256EBF6E7BCFF5D5D 56A9AB5AB7A23C9EB4D96B5E51863E99 56D895A9981CE1444015F366AFF6CF5C 56F0D71F4F82D7E96173653947ABA4EA 5713AF98E4BCA98757AD7439029E88BE 5764212A5B69B7B6103E0BFCF5C676FA 58046186791F155B28CE0F11DC920A03 58C1E7C4823DD6C915CF20C9C502C893 58CA81117E9F10B04BBD87C1E1D68A85 58CB5AB29A91F4C449FF3631D69A91F8 591F69486C9095AE3A9F938C55C2F274 599897F163A6A8193CC7B76CEF667E16 5A08851D7FAFFA644C5AD5B29AAECC0A 5A0BE2A76766D89C8C29F95267C5C855 5A1A9B8D3029FF1202D745E50EE5B5A3 5AB5D98399A39C693D1C79B725DF2757 5AB6AD31DD7C870505B056FCE7D09FEF 5B14B3C23AA5052E24338EE0CECE8517 5B7F8E3107220C59129B01B365E4CBED 5B8E4672075131A36CBD61CE4CA6587E 5BD4BBC4192CD4C5EF9C1AEF4A356CFE 5C788468D3D1C6EEBC6B108DD9CCD431 5C789CE96B60FFCFE967C36C8F56C3C7 5D2A0A62B34C87E8241FB81ED193CDA6 5D2DBA64371CAB2BE92E3E5341615281 5DCF1CFBBB86FD66B60B3577D181195E 5DE9C8FFDA5E30F335A4356EB72BAD13 5E497F7FA9766FF567F63AD3F8E1F4B1 5E67230E23CCBDB556EDEE9D22C3756B 5E79DC17DA603AC9D3FD53427E5ACA89 5EA6B4979DC16071C89511471A700A45 5F1F61DBBD74916E9406CF036B328105 5F958352412555C03715CD2D528BA924 5FA522D3AF907D79B856101FB45ECC38 5FD15A38568ED1460872C86AA8F65E53 60010D40BB15DF35CC3D5DB78A03A99D 6036F2AF2D9E3190324BA1F90A1DB34E 608CC999F99574943983F2EFFA0C3A3D 60E4CF564E7807D91CD98D71BF18885C 6132F2EB68420498B759E73A4598BE9A 613F3F9E5CA100913173AF72F7A73F4D 617F858534A3CDFE8C2BB0956B6DBE97 61EC17A94173219E077F2AD408E26A2D 61e142be-6d47-3880-3779-d7ef0000008f 6235CDAE43663C7F8719352DAA35095F 62CE25C4FC5A4DBBF9531EAF1DD86429 62D14B5A8DD56A92B0F445C7E05CCF16 633CE17D5461435A1AEC3E0FC40B9A31 633E0C7A909EB50693198014AF9D9065 6367E48AA80BA9C4A95B7196C02071FF 643D87CDEAA7FDDE94CB8310D4197838 64BB5148B2063384CF86665E053A0A04 655B97BD9674AD61ED3D7BA75CE4D205 65B62A2F5C4A5B1E271E7ED03A30B19A 65C5E3DD360260EDAF12F3F38CBB1896 669AC8D40E0A5DE526F3D14F708C1772 671FD3714586E1820C91915600FBBAAF 6778D10A24BDC1A6F4E5D0CBA3A3DF2F 67BB5F0B8D54C6C52A7BFFE7D5F6B39E 685B21401D8404D9F6DD2F73187F30F3 69097BC089B21E207769618F0B7B51FB 697C03C1FDE24BAD783C142A6BF02685 698D9CBB1EF760354B97CE1674900626 69DA6987153E753598E85ECFFF0931F4 6A3484C9A90969840B3F66CC910301B5 6B262A47CBBBE417B4E243BEA0CF99F6 6BD17DFEAB4DFDF77E54612425E3FBBB 6BF0028FDCC3341DCD4139E641113CBC 6D12F6FFF3F572F4D343ED7B949277D4 6D53D91C2C46D082091925E2F0EEF337 6D8E7FDF5804DE1BA6C22D1530A46D54 6DECCBD45122CCA3BC390E3FEB9C87AD 6E04FFE5C3ED24E65E8B93F3155D864C 6EC1F1FA40E72479E8CCE83E2831D0B5 6F7DC9A2553A77E6D18DDAC68B1DA132 6b918842-4fa2-3e2c-a239-f678000000a5 7041C058D9B4DE1F1E26F1955797522E 70E1AE2C2ABB055C2C3F7C470A1916E5 70F7632DB7E95C24E5E09556EAEDF92A 719A9B63EB8260FDE52340CC30872F42 7238E94397C7B7EB28197DD939252A0C 726D84E06F32850FBE04D25E7D3AD4F4 72851A3B0ED9FDE61D53DE9DF3F7F23B 7295090CF62C2A5D282AC1AF76C41DFB 72E6DFB7533A047E042D2EC2E157C587 7322EB410CD441AEB8C187BE13CD105D 73BCD6EC645F7F55B59F522C88FC4AAF 73D0C1A0E7AF08837D4BF563BA004502 73EFB2755A426DAAB585ABA44B88643F 745565BC4A5E615B12914DE84DD5350E 74D64E666091381C2C0E19A8A0BAC5D4 753385CF12F2848B13C6764F9A3A408A 759397D31DD5FD7A68581EFEEBF6F7A8 7645CA035F1DDC15633ACBA49B4F9F1A 76A0A062C40A3A43801C0A9F8BBF0069 770E29D224E3558608B1BC64F6FDC8B1 784E782223A6F3CF31BF769D81EFA49B 78B9380C92549D5CC4D2264DF1ADB70F 78E653CA5DDCB3B9E8D128162743870B 79970965C1CC40CE35231681B63512A4 79D4BD22C3A631C083C3E8489A61A948 7A4D43B422331769ABCC5E176FE794C9 7B02BCDF61F7845787277A87DA535340 7B10FD858F8413F2DF967F28484455C3 7BDB8C1FE540F5032CF802FE6EB74216 7C365F9D1A111199F69859271854A064 7CB8B9B7162AD31FA143E445870A71D8 7CD032DC58BA11FC1EA81F077C01F532 7D80E7620CE82EDEC49314DD0CC4A416 7D883A5E409D7ACA049F964E84E96AB0 7E33573209229F24D1349455F95FAB0D 7E7780611D0DE794A15D9D2E2FD18467 7FA097C5C9262D7BA4A9D42DF50A0692 8028E722A22743E866441E9ED15B273B 80B498291B8BE24DF67F4558BDBE557B 80EF7A63257773F7DD2B53215F620214 81463609532FC946D663298520784B94 8256A861D851BB2533664176741DF9CE 82B1419E440CBD2F74F73C5055936693 82B678F56F2DA8A7DF241A7AEDC474F5 82CE2C967D0F7019B8A247EC5093A913 82D577B13DDD54259962A9705FAD8A89 83C533980397872D26DC38D09D94DE64 847D96974D4403C5053BF6330BA3C63A 84CED2FA37406F4495ED0B85A75AB5B6 85A49B9F46476A6FBAA556C205871A5E 85BCE4BC4B1D4373103921808F1E9DC9 8671662D37AA44F192DA33BF1F994DDF 868A364764D2A1A5E71B3F677226812F 8737335EC32C826FE36CB713373A42C7 87C07AC0875B162D78143B90EC106A7A 88791D90F1A04ABB775E37C42E1E98F2 88B987B151558782CB87FAE751DBB9AA 894AFB0194D42DABE0F148579C8158A9 89BBA0981DC2846667A30158C5EEB0F7 89BF7038C0EF1FDF56D704C695DE7158 8A27BA0B708F9E8EB23D512B2B0C8516 8A39C2951FEF0C2F6E18BBF9339C12C3 8C7757DA039633EB7FC72AB413FC017E 8DDFCAC520DEF7B77410AF4F0EA7155F 8E426FBC707260AF78F64D9571793B22 8EBB49F8534C4D483DA3F8BB90722BA6 8F2CD04DEFBE17609451FBD9DB0190C2 8F459333A488422BE8332F4545FF45D9 8FAC14A6C614F6BB63FF31E3EB05338A 904BB7CAE66D93EB7DC493416909D5F8 908EBADD1FAA60F9B9927BB26B264E5F 9285C73E683AC5755B431B91E8649004 92AF8F9DEA2927CA13F2EB193403DF43 93286616B27A8F31A35E898A4DB5B5EE 933A97987373643EF227587E8E700E3C 93525E82C39E989A0C3317DDA215E21C 93A4CF90A6FB6162EF115D4BFF31E19D 93A53A1F4A14B47B7C0A2B91FF7E113E 941659F05B16EF9C168BF112C79F9030 9420A08EB89EF68A2F0E353C2C5CA1EC 9471ABC2060544D9563861234FF5AC8D 9488E4DCD16F8CB477FD881BC410E727 9504AFDD27AD6884B6B352C6DB3D3ED9 95395A1D31C85D393B00C258FC60B9D9 9582079AA99CB0FF87B7A6C20E018B98 95A13BFCAE3C843B71FD4A75F5AD7E41 96629D2378B80D5FBA8A1D4F615C80D8 96997A39421970448F2C462B3FC2F308 96E5122C4A22A4B3F2840BEF500A07B1 97B88DFAE3563A14D061EE0673579168 97E013E7F0DED128D7D92B4EDA668437 98532DFA92D7D0DE08EE757E1328EA73 99DDA84AA3EB9017F729BDE6C7628729 9A06BA997EE13E3DEF846F8E081CDA9A 9A192B3813A4FC128CCDA985CD42F199 9A65929751CC650A471192882D908468 9A87E0CEC428CDF1212DFC2C57C6973B 9B72AAFF2694EC2652FDDC3437F2BACB 9CADCC80E078D869D97C6991D1358754 9D10F2C5591BCEF019477986ABB61776 9D5A756B875E0F30209FDFC6D3707531 9DACC3C7F2FCA61E96F2108305371B46 9DECC7E357DC278E40195848F20467D5 9DF36BCAB9CEEF7DBA5BC19F10301810 9E941A5759C83F5559A0F9D87B83C26D 9ED96EA859E9B6273CF424C30EBECBC4 9F00AC1595D18EFC989365D49FC1AE90 9F983F5FC36EE3C1FF9D320F858E0DA0 A06D63E918E907099F932A3619983CD0 A07543197A9A7311250D603743DB5424 A0A38BC1CF3C2DF85D59D477260471BF A105CABE35349D5A4753118298B02114 A2728D35B6D0600A8CBA7209A1B65F8B A2C46D744EF8E03E7A2161FFD8330019 A319ECFC8DC2DFFF2D734473127A4DD6 A35C0AE62B6798B5AE9272739C52A4C6 A39C00ACB3C093D74F058C169939E768 A3A4D68EFD4F255239DB64801D5A5B28 A3CC2A1A950CB014E57AD0093EEAA961 A4DD7111640ABCC5C56DA7D6641AB435 A4F43B50CBA9A3BF9F37F1E4B65792A8 A553C8A5DABC8343E95B649A69F8E160 A5D2379E56A1C39896C4CD1F6D476541 A61332E72EF367B2B3D9394EF0D42D88 A67B8DF2FAF4E7093CE0B29E9879B914 A760552541D6D9DC72C20809778AABCD A7703F48F3CBDE6BE26063F741A2D9A5 A7C26EC48E892CA9828FA9F2060D9485 AA2DF662DD7A647931238ADDA67F8E76 AC0C6D9B25B7FAE055F6856694339165 AC30DB23A5CA4F25640ACF7A221EFB1D AC5A74463A866E3D8B4B87761CE0FF2B AC6ECE4540FE0096C649AF997D1063FC ACFB92867B9F29038F33C5DA2A0DBC87 AD03558F3C00C7ECB25AD76934E44E83 AD2A5C3F384538B4A55613B845B95F3D ADCD49F1AB236E5DEB99CC24CBC0777E ADD81BDFECAFAA38D1A4D6689E1E491B AE453C8F543C6F6B4FEEC42E899AC0F7 AEE8706CC0FD1C5FF6A51EB680D0726D AF545D57B4FE308CF87BA1F3379B8143 AF58512308379594FDD56C97EFAA2348 AF6AD419C9E8155B41CEAB6B791C09C5 B00AF5EFDEBFB4BDB64F0A283F9C70D8 B043387B1A6CB4EEBCFA1B0D4E4B8EBB B07A637E52680FF1642537F8BA1F3DDB B0B7F2836C99E300B9B826B862385384 B0B9DC828C4F1F57C6F39DEF9F6DF9E0 B1743B15BD5722EB7E9760E3A5C427D3 B1C89BC467A25380EE671D73AE4C6617 B287010A17F4A4530E2E7D15460F338A B2A7E604616E6517B929590290029B73 B2CEE767D05C494013CB44CDC441B465 B2D8FB3B88560AD92F24A98D3805BD13 B31CB54D8028DAE946C5F74FD795BE98 B353F381EA9300A407C79053720759F8 B37843303D9938AECA8ACE67CDDFD8FD B495CC10CEBFCCCA4ED94D67BDC9B9D5 B4B19565B94061B14B075815B2654961 B54866B294E0ED96EC244024901479AF B58B677F24CC1FF4D56EB1A6B2621D9A B5956F517503D9C0E6F3B05FD7B91A08 B61DAB6B6BA6372D6113D5444D66465D B6571129B1BEBE6829FB8F4518992C1E B6FF2DD1EF84CDAF26158679769F72DA B7012257A07E051A13517D26AF7539AE B729E82B1DDF2D2D14E02118C2811DC9 B797E5D085305B2390CC774B52FFF3CC B7F4FAA537394686C358224ED51F0991 B8230D8BD4F8516B763203044671B8B9 B934D1A5024382D86A853E64FAF05F00 B96B7E21D182826057D3ACC866BD9EAC BA0BB33F11833356F424E67070AAA5CC BA126C7CF5B352CD50D2C25ACDDBD38D BA5B579FEF7BFB396EBF72FD583CCA8E BB3C261F569268EB017E77AA4D1D5B88 BB52A954E88DDBF1CA08F08EE164A105 BBEC237B284AC7D52AFC303AC3B45730 BC2B58C40E30BC02C1A7472F152148B8 BC45B8CD76EE4165F13E603C3CA72AD3 BC474CDA5E3B213C44E73E98FB421C53 BC4F7A078480CCEE6D2E890E5DD6760D BCE0D8AE4652A0A5EDF4A57CDD9E770E BD006F928644C4D2FA8047946F529DAF BD2D36C7BA4C03637B31A06EB82D0F45 BD8F6BB01E861E98EA83730FD6CADC50 BDC36AD405628F298138E3E8B17D582C BE0B0C3C033C210B5BF015F6E2E00AEC BE534DC98D1E0D85BA7C56E50A404B84 BE7507B12278411C47CE641D6474EE75 BF77F539F99B917AB096E1BFD2F623EE BF9CBA2CD1645C2D095C77F5235D3D55 BFEEC83ABDD54CA639FD8BEB03840592 C058F0785A11697D50DF7313ABB0AF22 C0B94ED1BFCB8AE85FE8ABA7B845DF77 C11233420758D2CC7E4352998848CAE9 C11861B29A9F396A061B44140D8F8380 C145D6F1AD5B28FCCCDCDFD5FF46C607 C1AA8F15E6AEC85EADFBD7DE268A622A C26B3B41A6FB869EFA74DE8FBDCD1B50 C302C1893D51F14F6B46DAC235A566BB C3C800F33700653A53F0D577511BA2F2 C3DD7AA1D3C31FDAE03C3CFFF454BCFF C3E517EBE954E90274875D2EFD87985F C4C232FFE47BFD293A3EF740F0310C6B C52C15C9C1129D17F6DD0A743A45759D C69B6DFFC42D4FBC7ADA9EAE3CFB4CF4 C6A3CB15A0560F4CB33FE124D37303D5 C6CFB446CA6188D34C0FC12E513ADCB7 C709799DF1CF546BB08E0D49C5951D8B C70E9DE98A902FB05CCEFFC1C0AF8643 C719179A03C9955703441FF120340EEA C73A7BA9D47AB0DD9962523945BE1824 C76A79A3636B8211BA3574E3F7225A8B C7887299FE40B3F8E671EA8E7DBC5116 C7BFF84328E23AAFDEE1A8E571A04948 C7DEE0A0CF79FF6A46E79A07E3BC385D C8F12A80FCCFDAED8AEDA5EE171113A9 C92EF329B82644BD9056FB6C4CD5C392 C9A3CF2348C8A4570F12432CFC2330D1 CA1A233258361BCCF73FA54D7AF09F2F CA66C6859857009625C5AC832098B90A CB13568B7A54ED404F61A0F65FC817F2 CB13B5E3092AF660B3D805F224BAE3CC CBED22322D7BEBF5886371F386FBE4A5 CD4CFF1442673AC72C77F45EAFC10601 CDA266FDD1826F3387D43BDF3C953300 CE710C026C83421973F653E2ED12405C CE9FB5BB208D319EC7C6FA6351104DAE CED28EBC8FC720FC8DB795DE78A3E654 CF00DD4D73615645EE0D1CDC75D6FE96 CF4066B92C6A4E8300FA11D45E10CE90 CF6E66CDF438297BAE2213BD13FE2B97 CFAC27C52A912C958577AB17171AEA6F D028E3FE0CE9123331DE002B51D8005F D0C20F72B13E13C2E82747520B25EC5A D18EF492BA4D46AE013F54F8C005E346 D1EED9FF49A753F66B8AE69F5A8F2857 D2657CF70E03502E43A28427AB4B5BCE D270B2DAB09333F5BBE5975C1056C3A3 D2DC9375C54E3F96E64EDC5C7F619096 D31C94D5EF7FE2741A1F23CFD94587D9 D3550A6F4D6CE1B77FB407CEB3871FB0 D3A74B947F009B0771E4DACC2B5B7E30 D46143072A2871B566AB860B089552D4 D4E1541C27C4F0D7CD18EB24A83B5323 D5173DE46248867C9F328F15A215E810 D55E346D7E9E619E340E8FE6907E6CAE D60EAF66F90E3D99B998D2665012EE23 D626C6B662A3FB86AB99A9C26DA23AD9 D6752A538D426C0134C6C4AA40B4A5F7 D7017F38931560F646D127A0C109824F D78BE20A115144961E8E72A61C50A7BB D8430F601D4DF874A785121B339C7C88 D87023AE921F9E1F03918D6328328A60 DA09D7DE66F8FB02AC6143C2812BA066 DA54FA771932DE8625E75671D6E7F5CE DA6B4756B7C49AC242D1AEDC1520854E DB0B48347557F441834277F938D0AF34 DB7F1832FF590F26ED08B85FBC5AA3FF DBCE1962FF85FA4AB566FD86CEC5CF73 DBD56DB5B3623E5B9F25EA5B76420F0C DC4913BB12291465CB20AA257E527C9A DC77D5563D13896022F487209A7E8E13 DCA554DE165F547FEEB7F87D53C18DD9 DD1274B985C46A485879BF2C5CABD051 DD556DEFAC1C30A6BA5BD1FF1A7F7E3E DD9C16523BE7A370CEAF67F8E08F639F DE555D69BFC983CCFC83397FFA4B8A3D DF227CDABE5BC1A5C9CE5AC86A7AC5C8 DFC17519A31CE5BA3A212B7A9FF7C07A DFCEE52EC2685345AFAF966BE76CC416 E01BEAB89B811CE8A3BFA4E11FFB7AB9 E0F7D6C3F965391FE11C7D3C071CF243 E145BD5CC8D871392FA2F723B3978507 E1DC75205275593795AF471E675BD516 E225F23D4BC991D7E82955D3946B5CF7 E2335263D33061C50250CBDC31ABC96D E2D8265301D5C115069A83EB00722691 E2E7432BAF28ED03ED2DC7CBC5F24E73 E32AFF5E22CAEED179917BC0242813B1 E3749A62ED2B9A3B432657ABD91C39B9 E3B628A0A0C3B6A1FFBA0124D1BB19F2 E4D4DF9E3F0C93F03290884B6565E89D E550EA09C202F953CD51A5FF20BEF7F2 E5532E6DD2322C6751AB62C1268AD97F E56D05D9602D946CBC1C629BB98C02E4 E605839C4048AF8D34D1C5DE013EBC6A E620FC8623C2F83BB939BFC319EEDA2A E686BF18294244CF873482F8AAFD9372 E773214A64E352BD417C00D97CAA0669 E7793023A28473B5A937FD5D43988478 E78590DDD478F24D0982B0B0CF1075BA E87F016850D9D51D5EAB97ED47E9594E E903FCAD352377E2623817B7E8F7451D E9508013DA28B7DF0D88CD8AA208D993 EA7738317E194DA42CE602C9E46EC691 EB1CB145F42C5EEF2081244C8405EF57 EB2DFB42E64386A99741DAE0F7EA1DBD EB7D8787F136D430C1A42CBEB5FA3AF8 EB8AA71B976DECE1343AD837816A0E54 EBF31FCC43EA366D5F55D32E904C9AF7 EC92416AB4EDA5649EE560A6FC2A8F1E ECD0226906414C96E37CA6D984CB29E3 ECE89787944F7B961A73EEBA2ACE7A48 ED142210991949868B0F577CC448179F ED475AF66E0EDF3CB61E0363A81A2F87 EDB810939A90AE5F3104882CCD5F1246 EE0C0BA51B8802572D4AC371E5D8F357 EED81FDD0C2DDA99590CAD2B3ED31E03 EF25E1059CF9A0213A8C0053A79555FB EFACBF7A3DA82D271CFB669EA3E68D65 EFB0C529B1DF5939DC476C5A82865BA4 EFE56ABFCA45FF3AD19463A89919A871 EFF0A640A614C3BDCBBD1D589C596007 EFF9A857607A41928D822262485436DF F04276B1C722A493A130475EFCE624AB F087CB18BAD6861EB752480FE09E62E6 F1866E645D6A93334ADFC99E85F0E7A0 F1C8583C4A0BB7BAAA41F7D20E237A12 F274B50A6CF50C22D2CAAED0946F2A6F F2A808BA1F355D3CB0DD31342A622150 F32E35C7E1933F01240804FBA6F2F05A F3770D218E31D950A594B3590F4FBEC5 F37E3E0717A032DD2993CB9735D0F00C F43F438D7BD554E68543FA98B0498F43 F45B5655FAC8AAF9BA2056802052383C F4BF11900F7B731CBFC5EE2FF841C1D9 F5636988C6D644712543CD4899D46213 F69D54E326BF317488BD43573DACE5B8 F6D84AAADACD0556499AF3CE7E61ED9D F73EAF3D4B9DE5B395B97363F26B5D81 F74375D93B027E6F8E576C21CF4DD263 F7CBDA2FF573CE0F33E125ADB65733B6 F7E1ECB22E28E4FC90F1F655802D9B30 F8C660AA850B3DBD37E1865FA869C00E F9B3148628C77B9CE82C7CC95738AD29 F9CDC884DABB27BF17C53B4A0561F987 FA540F3CF945835E8C9C87CB7EB51574 FB2243821BBCA8D01E570AAE9B2EFD4A FB325F00C6372B8EB21BEBEFFF715112 FB3464810324A18AAD14F1A3C7F760D0 FC6079CB07C906910755F46E04583CCB FC659D75AA6E62018FD7525B41ADD4CB FC99711CCCD22FB4A59D0EB454FCD251 FD135CEB8CFC7108421A6806C1FA167A FD748F64E0C1B3F1534171C6BCBE283B FE1D3C466DBCD1D59BFBC16FB533A3C9 FE5785413824BBB6716D2F39613BA03A FE60B4B9FE7A16DCD34937579FAC9244 FE886E832BA8A0169E00009467DAA6CC FF62A5200D6DF8A2BB1C7259B0279875 FF6AD90C5E87D8497BDC330B073F385A adobe:docid:indd:d9e95eeb-b763-11df-82eb-83f8ca83d6f5 adobe:docid:photoshop:01d4824c-8dcf-117a-8083-94ed5473f00c adobe:docid:photoshop:042fc5fb-09c5-1179-9bcd-a00fecd08d92 adobe:docid:photoshop:053954f6-a94c-1179-b35b-b3605fd5cb5d adobe:docid:photoshop:067f015c-6500-11dd-8c0e-da03867eaa6f adobe:docid:photoshop:08220b26-1588-1179-9b51-9466c3fda4ea adobe:docid:photoshop:086bff37-2400-11e5-b146-ea745c232c0f adobe:docid:photoshop:09a6bb63-dbf2-11db-a57f-be9c993a90fd adobe:docid:photoshop:0c75723a-d2a0-1178-85c3-87017d6dacf2 adobe:docid:photoshop:0d018998-8d9b-1178-9db2-b44d872b9f12 adobe:docid:photoshop:0d69849f-1468-11dd-b4d5-a76ee511c599 adobe:docid:photoshop:0dd8b889-1835-117a-a842-c660850923c4 adobe:docid:photoshop:0f9b4997-8237-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:0fba6c50-5a9c-1178-b7a7-933a0929e1bb adobe:docid:photoshop:0fc79f20-d232-11db-b1bb-aeba6ac5ef65 adobe:docid:photoshop:1095d5e7-5bc7-11d8-b5c4-ad94fedcbdf3 adobe:docid:photoshop:10fa0edc-4965-3244-b2b8-6f1e45d070a4 adobe:docid:photoshop:11647b14-44e5-117a-a75a-92e93514a429 adobe:docid:photoshop:1192c11b-d062-11e5-ad73-bf8209621925 adobe:docid:photoshop:11f79e0a-4a6c-117a-8304-d9601ffbae90 adobe:docid:photoshop:12dab6df-b4a2-11de-8f97-fde594bbf043 adobe:docid:photoshop:131cf6ae-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:14b00951-0134-1179-9bcd-a00fecd08d92 adobe:docid:photoshop:14ed5a98-4edb-1179-b0c7-f22577e59863 adobe:docid:photoshop:15923273-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:162f56b4-a07b-11db-9b6d-e4600e41f893 adobe:docid:photoshop:1634635d-b6aa-11d9-9d93-8f8f4ce80942 adobe:docid:photoshop:165362bc-44f4-117a-bf6a-f38822db85b5 adobe:docid:photoshop:17704aa1-cd43-1178-be6e-d03e1589dfbc adobe:docid:photoshop:179a5fc6-d465-11da-b675-db28fe4a73f8 adobe:docid:photoshop:17fd346c-175d-117a-a842-c660850923c4 adobe:docid:photoshop:180bfe9d-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:19b4fedf-309a-117b-834a-b3d9c0c50471 adobe:docid:photoshop:1ad9fcb1-112f-1179-a9f8-efa97d28bfa7 adobe:docid:photoshop:1b1e7074-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:1b9ba21e-eb53-117a-b944-cf267f726882 adobe:docid:photoshop:1bca738d-4d28-11df-ae11-88a6b11ac6d3 adobe:docid:photoshop:1dec74ed-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:1eff0a7c-bb0e-11db-af40-c3e7cd681b24 adobe:docid:photoshop:2102b00c-a94c-1179-b35b-b3605fd5cb5d adobe:docid:photoshop:21672e49-0a8b-11dd-baf7-d52def3e1b33 adobe:docid:photoshop:2176cf16-4d4f-11df-ae11-88a6b11ac6d3 adobe:docid:photoshop:25df04c2-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:261b1a17-9650-1179-a2da-8ded33f8f350 adobe:docid:photoshop:271c9b48-6aa9-11d9-b2a5-8bf484355b2f adobe:docid:photoshop:27fc658f-5459-1178-bd9b-c104f99cf137 adobe:docid:photoshop:29340be7-17f4-11dd-8148-fbe7f0bac890 adobe:docid:photoshop:29da690d-fb89-1178-892c-b67b077467b2 adobe:docid:photoshop:2a1d84d7-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:2bae712c-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:2d278ccf-964d-1179-a2da-8ded33f8f350 adobe:docid:photoshop:2e53065c-a7db-11db-a30c-aa3f32f49aef adobe:docid:photoshop:2fd4de6f-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:302e57ce-5c05-df44-8494-3a23fdcd600f adobe:docid:photoshop:30e3a653-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:318cd3ea-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:31d4622a-10f3-1179-9483-e80952dbaa6e adobe:docid:photoshop:341a881e-ee5a-1179-937e-b0615ea34578 adobe:docid:photoshop:355c8974-95dd-1179-a2da-8ded33f8f350 adobe:docid:photoshop:35fc83cb-fa12-1178-95f8-f0ee2b196bb9 adobe:docid:photoshop:39194445-a223-11e2-ae8f-ae6bbcd8f5a7 adobe:docid:photoshop:3986dd71-8144-11da-af47-f98ca342a16a adobe:docid:photoshop:3aff71b5-8237-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:3b4ad281-f1a5-11db-8922-d70353ace9b0 adobe:docid:photoshop:3baddcbd-a65e-1179-ad6e-beb12c7777b3 adobe:docid:photoshop:3c21c591-4b21-117a-8202-ff25c1b91bf6 adobe:docid:photoshop:3c78a10c-fa43-11da-9121-872e36a13a10 adobe:docid:photoshop:3c7d75f6-33b9-11dc-8d8b-a99e8a6d8f0a adobe:docid:photoshop:3ce1a9c0-e43f-117a-97df-ce41029d4baa adobe:docid:photoshop:3eb9d5d0-7612-11dc-9872-87d859ee3843 adobe:docid:photoshop:4185baba-5cec-11d8-b010-bf092868d857 adobe:docid:photoshop:4296683b-cf26-11db-b1b5-fcf0cb251532 adobe:docid:photoshop:45648e20-b15f-117a-8138-c0581fe4da37 adobe:docid:photoshop:495ddc01-8dcf-117a-8083-94ed5473f00c adobe:docid:photoshop:4a96218b-66b9-11de-a83a-bde54db9690a adobe:docid:photoshop:4eea59a2-c4fb-117a-a9bc-9f0f0c8d11d7 adobe:docid:photoshop:50a0e614-d0e5-bb49-bfee-f3e9d5310b91 adobe:docid:photoshop:519e797b-42a6-1179-92c8-8183d04d4956 adobe:docid:photoshop:5646546d-4292-1179-92c8-8183d04d4956 adobe:docid:photoshop:5766f8d3-83d5-da42-bf42-ba74d61df794 adobe:docid:photoshop:5799b84a-f22d-11dd-95e6-d94ef15f0b29 adobe:docid:photoshop:579ef843-1b32-1179-9f60-fe437996c2d3 adobe:docid:photoshop:5a13471b-5f94-117a-99d9-e6b71e7a5f21 adobe:docid:photoshop:5b3b22b6-c7ad-1178-842f-b9cb95ceef4b adobe:docid:photoshop:5b7308e6-69ce-11db-9465-923e5ffb0d9a adobe:docid:photoshop:5d55d682-fcb5-11df-8232-c2c89e4ac8d9 adobe:docid:photoshop:5f5b7de0-4a43-11df-bc05-e64777e8bef8 adobe:docid:photoshop:5fca0d8e-86e1-11de-b1dd-9d263488e40b adobe:docid:photoshop:60d53d84-f875-11db-831e-c5f511e4f2eb adobe:docid:photoshop:611447e6-f0c1-1179-9059-d096479ea041 adobe:docid:photoshop:624e22b8-23fd-11e5-a90e-b9a71df383c5 adobe:docid:photoshop:64a2ab55-35d8-1179-ab38-f924cc5f550b adobe:docid:photoshop:64ffe608-c328-f04f-a7a0-2830c3e0d021 adobe:docid:photoshop:65ef8124-d5a1-1179-83bb-ab70ad501449 adobe:docid:photoshop:680b500c-af7d-11db-9531-ccfb979a170c adobe:docid:photoshop:6b187a4d-21ac-11df-8763-f7b32115d1d8 adobe:docid:photoshop:6be25e82-20b0-11da-b0a6-be5394b4582c adobe:docid:photoshop:6cb303cd-2a47-117a-a6a1-e345c8d6d85c adobe:docid:photoshop:6cc72dd4-c122-11da-9ea0-b410217bc604 adobe:docid:photoshop:6ccb7fb7-277d-1179-8206-d7f4122e2367 adobe:docid:photoshop:6d6ed0d5-8236-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:710210d1-309a-117b-834a-b3d9c0c50471 adobe:docid:photoshop:73c2f658-8871-117a-96b8-816ed2b3b098 adobe:docid:photoshop:73ce0cdf-8b43-1178-b763-fa12b5c41f23 adobe:docid:photoshop:75028756-7094-1178-8861-f01c5d71f134 adobe:docid:photoshop:769833d5-9654-1179-a2da-8ded33f8f350 adobe:docid:photoshop:792c94d2-0b72-11dd-8a8e-b94e9ce47b14 adobe:docid:photoshop:7c9c7c0b-cc71-11db-8d6a-d00242f6a5af adobe:docid:photoshop:7e298480-59b7-1178-aa03-fdef65ba8702 adobe:docid:photoshop:81c74d91-ba73-1179-bafe-92e5152b643f adobe:docid:photoshop:84cdbc17-8dcb-117a-8083-94ed5473f00c adobe:docid:photoshop:856033d5-fa47-11dc-9057-ac5d3de3713a adobe:docid:photoshop:868029fd-2276-11dd-9239-c1a598344559 adobe:docid:photoshop:89e1624f-14f5-117a-8b25-e11d841e16ff adobe:docid:photoshop:8ea3d43d-1029-11da-8fbe-fac890cccc25 adobe:docid:photoshop:8ed6c2ba-c971-1178-9b22-b58fc16e6a9e adobe:docid:photoshop:8f71b61f-f561-1178-8d5d-e693f6abc683 adobe:docid:photoshop:8ff3d7f9-4b20-117a-8202-ff25c1b91bf6 adobe:docid:photoshop:8ff9d64c-4418-11da-b7e6-d902366ee3d9 adobe:docid:photoshop:9217626a-f3e9-1178-8d5d-e693f6abc683 adobe:docid:photoshop:923f0e52-3389-11dd-950c-a80d9ad4456c adobe:docid:photoshop:9292eb5e-6ce8-11df-8d9d-d0d5522d8976 adobe:docid:photoshop:950d7d29-e9c8-117a-b3a6-caff417dcd74 adobe:docid:photoshop:9826dfb1-8dc8-117a-8083-94ed5473f00c adobe:docid:photoshop:9855e9b7-1a77-11e0-a056-a14635721b97 adobe:docid:photoshop:9d09ed44-1a77-11e0-a056-a14635721b97 adobe:docid:photoshop:9d4f0aba-8236-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:9d9714c9-222c-1179-8483-f2b5a59bf528 adobe:docid:photoshop:9f463759-112f-1179-a9f8-efa97d28bfa7 adobe:docid:photoshop:a1dfbdf0-8226-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:a7c6b89b-d133-1179-8378-da34bd2183b7 adobe:docid:photoshop:a845b984-f0bc-1179-8c67-ebf54db54c68 adobe:docid:photoshop:a8f63b8c-cf8e-11d9-8f38-ea3e2d6c58a2 adobe:docid:photoshop:a9870188-8dcc-117a-8083-94ed5473f00c adobe:docid:photoshop:acc06f37-47e4-1179-a1a2-fa65db41d752 adobe:docid:photoshop:acee132a-f48b-1178-af5a-c2239e045fb6 adobe:docid:photoshop:badec3b0-8d9f-11dc-aa6d-fd72ed461365 adobe:docid:photoshop:bb885d59-f165-11dd-b2e7-b55f0ff3594b adobe:docid:photoshop:bcf84d43-1a75-11e0-a056-a14635721b97 adobe:docid:photoshop:c1422350-a306-11d7-ad63-9fa59f868483 adobe:docid:photoshop:c1b701b5-db72-11db-ab1f-df74d7423f7a adobe:docid:photoshop:c4df783a-4b7b-11dc-a30a-e5c2aae6ba21 adobe:docid:photoshop:c57e9e03-ec28-1179-96ce-f8ee7b00a5c3 adobe:docid:photoshop:c7e09394-12a1-117a-983f-c210d342100a adobe:docid:photoshop:ca8bbc9a-8236-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:cc5fe85c-3099-117b-834a-b3d9c0c50471 adobe:docid:photoshop:cc7b3d7e-f521-117a-97e5-dcf766ca3c0d adobe:docid:photoshop:ceaf622f-6ea7-1179-88fc-d69851277464 adobe:docid:photoshop:cf96f18d-a6f2-11dd-b2ac-cac96f638488 adobe:docid:photoshop:d0232e47-ceb4-1178-be6e-d03e1589dfbc adobe:docid:photoshop:d73aea2c-cc9d-1179-8378-da34bd2183b7 adobe:docid:photoshop:d80e687f-1cc6-117a-88df-ca324e587243 adobe:docid:photoshop:d842cab5-8226-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:d9b2e6a0-8ce7-11dd-be12-93c5fb96f243 adobe:docid:photoshop:db4c3739-d291-11de-9902-88725022e8f9 adobe:docid:photoshop:dd0d929c-07d6-11d9-bb77-bfa7c8df5462 adobe:docid:photoshop:dfb0a295-930c-117a-a6f0-bf860b766359 adobe:docid:photoshop:e033cd64-39e1-117a-9def-c47d234ffabc adobe:docid:photoshop:e37abe5b-8dcd-117a-8083-94ed5473f00c adobe:docid:photoshop:e4c364fc-2298-11dc-a3f1-affe78f3f1dd adobe:docid:photoshop:e7e7a68d-3ca7-11dd-a519-f4a69efb17d2 adobe:docid:photoshop:e9189110-d90a-1178-bd15-cec4a4794a8a adobe:docid:photoshop:ea305a0b-fb89-1178-892c-b67b077467b2 adobe:docid:photoshop:eb70db39-5691-1178-8760-845475bc9d7b adobe:docid:photoshop:ec894c1f-44e5-117a-a75a-92e93514a429 adobe:docid:photoshop:ee86b539-ba5d-11db-8dd9-fdce7565c567 adobe:docid:photoshop:f0cdd009-659d-1178-93b7-e226e04886bd adobe:docid:photoshop:f47a68d0-cb24-1179-8c91-f338b8aad741 adobe:docid:photoshop:f80bd6ca-fb88-1178-892c-b67b077467b2 adobe:docid:photoshop:f9b1d5f7-2cb5-1179-9ad6-fa9f523a245f adobe:docid:photoshop:fb97cb81-a652-f646-bb0a-4f290ad14dbb adobe:docid:photoshop:fbf51a48-129e-117a-983f-c210d342100a adobe:docid:photoshop:fd4fdc42-51fd-1179-bc51-b7f39427c097 adobe:docid:photoshop:fe14e807-8226-117a-bec1-d4f4f72576c5 adobe:docid:photoshop:fe58821d-5776-11df-8604-e5ea32f60741 d1d0c1b7-7bfa-7d5b-3c93-1ae800000055 e63b6828-7a46-947f-93bf-35b600000071 uuid:00F94DE476FADE11AFBDDD91A537C5BD uuid:012B2C21C9B9DF119CA8F01C9B0C0333 uuid:02E56BB23746DE118E05E00A924D8CC5 uuid:030793878DD511DB866B8FDD4FC5F6E8 uuid:0459E8C3BF3FDE11BC95B3C2E798CC84 uuid:047C71B83946DE118E05E00A924D8CC5 uuid:049B6674521BDF118174D58534E02F48 uuid:06AE789055C1DC118FCCAFD862EC21B4 uuid:06CADE1FCD57DE119AA1DA9EA00F26D4 uuid:0713D437E27DDE11A717CFED235EBF18 uuid:07218203AADEE011BA4CB639D1A8BD5A uuid:0769202E525E11DC813CFF9D60E9E4E7 uuid:08CD4728BB26DF11BDEEDCA72E0E76E6 uuid:0A139D1E8A5CDC119A05BD94A54C7480 uuid:0A187F65AA46DE11A08FD40CFAB2353F uuid:0A78D988DD5811DC96D5E716A6F2BCF0 uuid:0B00D3552B46DE118E05E00A924D8CC5 uuid:0C3D92C4D425DE1191528DC10A240F5C uuid:0CB3F764639CDE1183DFC60C032A1A9A uuid:0CE6EE4B3046DE118E05E00A924D8CC5 uuid:0E387A182E46DE118E05E00A924D8CC5 uuid:0E6C4060E6ACDC11A31BE2F1875A55F1 uuid:0EC1D3E93146DE118E05E00A924D8CC5 uuid:0F6E42F71D46DE118E05E00A924D8CC5 uuid:0FB789A3B581DE11A2EC895A57B44A35 uuid:1054D978C0E1DF11AA8AB303BFA5E6F2 uuid:106F5789EEDEE011B872DF47B34C9F1C uuid:10D9DC303346DE118E05E00A924D8CC5 uuid:11056C5AF55AE0118DE98213B6FC8AC1 uuid:14BEAC59A02ADF11AECBC7578FA1C8B8 uuid:14C354FB2146DE118E05E00A924D8CC5 uuid:14EE60ED26DDDD11A117C45F206BABE6 uuid:15553F6A9213DB1180BDFBD3D4018BA1 uuid:15578F2F1E86DD11AF96B6D037A279B9 uuid:15C1037383AFDF119792D12E80BC077C uuid:16387A182E46DE118E05E00A924D8CC5 uuid:16F84B7E3246DE118E05E00A924D8CC5 uuid:1733C6F5FF8DDF118C48B1BDE6AABF0E uuid:18D0366CB8D7DE1186C4E1136190F3DF uuid:18F1E4744068E0119FDED406F7D85D6D uuid:19501508E2EF11DD8BECCB6B4552BEA7 uuid:1AC8CB43CD4CDE11B97DD4E9C228A19D uuid:1BAA89B7F951DF119FB4A1AA799452E6 uuid:1C68182A4875DE11A992FD2DC6E9830D uuid:1C79290ECC45DE118B23AD30BCA96A14 uuid:1CB80347CD8CDE11B89AE97826E8DF29 uuid:1CC0A469339DDD1192D3E25231FB5305 uuid:1CF25C713546DE118E05E00A924D8CC5 uuid:1D4243C97491DC11B124BBBDFFB33225 uuid:1D468B5A156711DE9D09B95D7469FFFE uuid:1D6D06A3DC8BDD11911EA1F37D8753ED uuid:1D8B523DC6EADE11ADC7E7A467B4F583 uuid:1D90BE4363FCDA11AA83B543DC89108D uuid:1DACF7EC0F7FDB118282FC544EB61910 uuid:1DC5EA073246DE118E05E00A924D8CC5 uuid:1E11C42A48FADE11AC12D4AAFE286F5F uuid:1E2D9BC292B811DCAC0BD7CFBA286A6B uuid:1E71DF13FDB5DE11B9299E5C971CB542 uuid:1EAA29038AC0E1118F29AE5C429EC6D3 uuid:1EE7DEC2481ADF11905AD1E5E7183152 uuid:1F5AF3B67229DF119FFAB26E240C71BB uuid:1F95AC394748E011BC12ECADEA413AA4 uuid:20323DAF3833DD11B84DB153FFCB2B25 uuid:207301A58CA7DF118484999423E4131A uuid:20755CD9A1BEDC11AD9FC86910038926 uuid:208C44507E13DF11882FD35504085383 uuid:20AD1BCA27D611DCB3DCF58CB1282188 uuid:20DD6643FAC6DB11A46EA4B49D2FDE5A uuid:226AE9E80D1CDF11ACEBF49C1510D7E2 uuid:226B9A3C4F5ADC11974DCB5CB1741D28 uuid:227BDC9B2FAADC119028943FDADC2D16 uuid:22B35C622246DE118E05E00A924D8CC5 uuid:22C16BAA5AF3DE11B11DCE9D526E88E8 uuid:268662FD552E11DBBFFDB36DCBD91ADF uuid:274576122FD1DE118F62D3B3027678AC uuid:27D3988D43DEDD118DB9EA210F03F4FF uuid:27F89F1127E2DD118645D3FA1066C7BA uuid:284D341C3746DE118E05E00A924D8CC5 uuid:287E0A511147DF1182CFA37314C5741C uuid:28B85E6492B811DCAC0BD7CFBA286A6B uuid:28D7BAFB5941DF119834F2062A2299DC uuid:290B84B52146DE118E05E00A924D8CC5 uuid:2A0921B9216DDD11A727A67773091824 uuid:2B1B9EB9E0A7DF118484999423E4131A uuid:2BB5F42D6A61DF119385A77469CEFB4A uuid:2C205C7E8234DD11A069BF111D61B76C uuid:2C2589466F13DD119981999D14D29795 uuid:2C4F78A7552E11DBBFFDB36DCBD91ADF uuid:2D49D4CEE050DC11A516F388F9DC85B5 uuid:2DBDD1BFCE1DDF119ABEC149331D314D uuid:2DBF74503C01DE119EDBA14779040E1A uuid:2F8B1048D214DE119F7CD744AFE539FE uuid:304D341C3746DE118E05E00A924D8CC5 uuid:3074DC40A7E4DD11856FC35EEE701F57 uuid:316F2F24AA37DE1185B29A009951A745 uuid:321509A7D910DF11B6259E6E49F0C069 uuid:328C2A23A1F3DE1188FCDC0D4534976A uuid:329EBF14943111DB9A19BF196009E84F uuid:32AD901C1540DF11BA22EB8390E427FA uuid:341082F743EADD11A0EAF6E3C3C6C660 uuid:34874C6274B4DF11A9BB90F255F0AFA1 uuid:35C28732F068E011BAE4A0F3F205CB0C uuid:369E727FB04FDE119777A241E1132B43 uuid:36CC338DBF03DE11AA85DC89D1FCF295 uuid:37AFEA6DB860DF11A63ECDFC2A710CBF uuid:382227419650DE11828EB79B7FF87B46 uuid:38EFEBD32C46DE118E05E00A924D8CC5 uuid:395B108AEC5FDE118F3EC99520DEB99E uuid:399642B01C46DE118E05E00A924D8CC5 uuid:39A85F352346DE118E05E00A924D8CC5 uuid:3A4677815E29DF11A0B087DF897F5C56 uuid:3A4F51BF7911DE11A781FBA8671F5E89 uuid:3A5020F1699EDE11B900A5C128F3E190 uuid:3ABA64685F64DF11AAC4DB43091F0E94 uuid:3BF230DABEACDD11889FAC5282935681 uuid:3C0D38C2AFDEE011B945C4A423A57949 uuid:3C3D324F854EE111A538AD64C05F60F2 uuid:3D5103E655A5DF118996AFF35D6A9C7A uuid:3D90B6044FC611DB95D9A98C0E2341EA uuid:3E5C8557AE51DC11A6E5B79CC593882D uuid:3ED246C8D77DDE11BF1BC86AD7862F57 uuid:3FAAB31DC7F3DE11BFB3BB61AE1A198B uuid:4005975a-5da0-4d02-9be8-d1b06d67a1ac uuid:4017B42DAECBDE1186239E156231D83C uuid:4062B740431FE0119F84DB1DBEC49892 uuid:40BA64685F64DF11AAC4DB43091F0E94 uuid:41A85F352346DE118E05E00A924D8CC5 uuid:42A5C6F1B041DF1190BE881BF8159F39 uuid:4309D5C780DEDE11AC699E8548A45E2E uuid:438D9E113046DE118E05E00A924D8CC5 uuid:457D02955055DF118B59D959D9FCD50B uuid:45B952D1A760DD11B3A3AB60E7CB2E32 uuid:4610D2BB5C3ADF11A1E0EE016E9F3D12 uuid:46B070169EABE011BB42E88B754C4AEE uuid:46E135E06305E011A766E5F2293E7D86 uuid:46E5046B7D79DD11B6DAD14729559D83 uuid:470A5501BE9DDE11A857E42B002C9929 uuid:4733F7484068E0119FDED406F7D85D6D uuid:47459a6b-c7a1-4760-9b31-03a412c42d2e uuid:47DE5278F52CDE119FB3CAAED746FE94 uuid:4814E5FE3F68E0119FDED406F7D85D6D uuid:488E7D216417DF11AB3096DB59BE8278 uuid:49E8A66A3BB5DE11809BA989B0D77432 uuid:4BD64E3D591ADF119A44816E426D14CC uuid:4D09B0846C29DF11843DE8ED84598CA3 uuid:4D47530DBFB1DE11838CB79BB029C533 uuid:4DB2B99C3246DE118E05E00A924D8CC5 uuid:4E28CD0BE5B0DE11ACB3A4B3E9D809A9 uuid:4EF1A0598169DE11B44DA6B533A93812 uuid:502ADD3C8B13DD118EA79BEFBD19D7B1 uuid:502D4D912B46DE118E05E00A924D8CC5 uuid:5041A4B205CAE1119280EF88F1AD6DCE uuid:5085FE1C5CF1DC1184999B2D473B40C5 uuid:50A5F355BC4BDF11A8A3F6410E93A61A uuid:50E84CF066E1DD11B9EAA8996A8875F3 uuid:51777E30ACD7DE11A1AE8A388BF11FDB uuid:51A11EEB85A7DD11A19786A77EB54A52 uuid:52A5D3054338DF1190DAEFCE2D940955 uuid:53E437D50797DE11B2DABAB77D7740BE uuid:553741FD253DDE11B79699D43EF0912B uuid:556D58241B1CDB1189D5B5EC4E3A9E38 uuid:5577922C3846DE118E05E00A924D8CC5 uuid:557E3B3CE135DF119278D380A54DDC5A uuid:55D6F1754F30E011AD3DAFFDB99E65D6 uuid:565C30D43A08DF11A61DB227EDDF59F8 uuid:574487634068E0119FDED406F7D85D6D uuid:57659E439232DF11A17C9479A9CEE277 uuid:578299FCC3D0DE119465B96E3C2E2EAA uuid:5842F809ABEEE011ABB4E3369A661A4E uuid:58B81ADF0E84E011BD87EEE6520C6C5A uuid:58E283D07B07DF11A38E90866D1E8B9A uuid:5975A572B4AFDE1191F9D38249749CE2 uuid:5A79E0672746DE118E05E00A924D8CC5 uuid:5B0CD778CF24DF1182C1B3E1B6A83EEB uuid:5B5A903A8F63E0119B87E6FF75E31714 uuid:5B6CC28AD15EDD11B9AE8B3F0765C8D0 uuid:5C7449A48B91DC11831FEBD781B6ECB9 uuid:5D0C528FBA46E01183C8E802910C25E8 uuid:5DA6CE83324911DEA1B296A980BFAFA4 uuid:5DA8DC4F4068E0119FDED406F7D85D6D uuid:5EBC258199EAE11189C2DA1478C8C9F2 uuid:5F50494D7C49DE11826FBB70EB840DDA uuid:6023AB90E5C2DE1182ACCFD916FE2252 uuid:602E96167548DF11B95593FEFB4F0A8F uuid:60AD1AEAF96CDF1185BBB7D7C9ACD7A0 uuid:60BCB4D66DD6DD11A47DE4DAE0EFF793 uuid:620AF59A6568DD11A7E4CCA02A14236A uuid:62125b08-dfcc-5f4c-8dc1-0da856e0f01d uuid:6367FD463646DE118E05E00A924D8CC5 uuid:63C475A288ED11DEB3FFF614CCD16C87 uuid:643CC20F0784DE118129C567E005B28E uuid:64DB642D4068E0119FDED406F7D85D6D uuid:65169CCB345EDF1194C8D9F78654422E uuid:653189661AF3E011BBDBAB44F74D79AB uuid:65A58184AD03DF11BA1CFE2E2459F90E uuid:66211d2a-e75a-6349-9313-114dc4ac619f uuid:66E770C8D883DD118567FD7DB7D1FB68 uuid:674D5E42B2DEE011B945C4A423A57949 uuid:68A5D5BB62AEDE11A47ED578D60FD7A0 uuid:68DDFCCD377FDD11958095E49FBC919E uuid:6922E29B5985DF11B4779C1A60E25466 uuid:693BEA6CB8A6DF11A082860CFDE3F28E uuid:6AD4462FB204DD11A4539B8A658B95AB uuid:6B26E6F714A3E011B8F2B39CADF8C7BD uuid:6B4D5E42B2DEE011B945C4A423A57949 uuid:6B7A055DBDC7E111A53C831232D3A23E uuid:6C0E21EBFADEE211A79B815621E1988D uuid:6C1CEE99FF0CDE118B60808686D1CDA6 uuid:6C707EB54C4EDF119BF69F5E7CC385D4 uuid:6C790A9D4BE3DE118E6DADF5320C3FFC uuid:6C875D7786AD11DBA35CA8F2CCD0B6EC uuid:6E43BDE8FAA0DD11A8C7800146D9F2FD uuid:6EDB09A4EF99DC119FDAE1E6C9E90D52 uuid:6F0C51E18A5FDF11B6C6A84C08FFDA77 uuid:6F5C782E2C9CDC11908C9ADAF87FE933 uuid:6F6B5088FBE2DD11A6C8F176CC65539D uuid:701F0AA1DC0FDD11B6B0DA6D17610842 uuid:71B724FCE7D1DC11AB7C8BDDCD744643 uuid:72AD3ED38871DE11907DD58D2A428021 uuid:735432F83446DE118E05E00A924D8CC5 uuid:742FDDCAF0BF11DB96ACAB58D2874C3B uuid:746583581EC811DEB82CD8B338B01D3B uuid:748FBBC54761DE1199DC9982344E391A uuid:749D6D724068E0119FDED406F7D85D6D uuid:75889B152262DE11A72AF16963CD89BB uuid:75BA6EE02846DE118E05E00A924D8CC5 uuid:75DCEEF5501BDF118174D58534E02F48 uuid:75E80B316579DF11A939CB8B2C636ED9 uuid:7680F61BA84CDE11B97DD4E9C228A19D uuid:770D862D4C8FDE119D83C7C6AEBAE849 uuid:7726580E30E0E011A0DFF1A921A77D14 uuid:785BF1A33D44E01196A9FDAA302A4A52 uuid:786CC4073C01E011B40E84D550759E70 uuid:787B3D0F0C07DF11BF3BE2D4EE658A9A uuid:78948929B329DD11B93AF0E4356E33C1 uuid:79D399B24B31DF11B87EB9B2F774C66B uuid:79FB58E1457EDD11B5E5F51B3ECD7F8D uuid:7A1A8CDA6753DE11AEE6B02826E52418 uuid:7A249F7BFEACDF11BC6E8D04CFB3FC6C uuid:7A53A07034E0E011B6EAB49C9ED7F21C uuid:7A7765743160DF11B7058CDA462E88D0 uuid:7AC55A0AFA7DDD11BDB4D1FB4F0D7360 uuid:7BD3EA794068E0119FDED406F7D85D6D uuid:7C0400B9C2E7DC118D17CCC8742E2E78 uuid:7C2C58D33BF4DF119099AEAF17DE7CB0 uuid:7C66DA44A194DF11953AEBEFD43548AA uuid:7D82A4D9F538DF1189AFCD2729466985 uuid:7DCCEB3E9D0DDF118A1BD62C0D068F40 uuid:7E53A07034E0E011B6EAB49C9ED7F21C uuid:7EBAC78415A3E011B8F2B39CADF8C7BD uuid:80DECBBD2846DE118E05E00A924D8CC5 uuid:82B09529C90ADF11823FC380DCAC210B uuid:8399DE7F5857DF118DBFEADEC8C6EE8D uuid:83C325A3A321DF1195F7D775DE55B86B uuid:8418B9F71B19DE11ACD1FD0D79D1C48C uuid:8426B111521BDF118174D58534E02F48 uuid:84BF1E98A360DE1194C18245487266E3 uuid:85657AA00A3BDE118C7B80D673026507 uuid:85CD4D720061DF11A70ED672DFB72836 uuid:862A63584068E0119FDED406F7D85D6D uuid:8631318ED591DE118BB0E5D058A15FA6 uuid:863D29600E91E011B7E2BA43D2041D1F uuid:86931125389ADF119BE6A44B39062E37 uuid:86CECBFFD057DD1195779C82C766E2BF uuid:871A6276F573E011AE93F71A5E985A91 uuid:875146C793EDDE1183CCC07478F94319 uuid:88218060511BDF118174D58534E02F48 uuid:88682ECF5FDFDE11B366D9EF74DE4B3E uuid:888EFC12BBA4DC11A788F61F464F954C uuid:88CE3D8F2439DD11A66DB600D9CF90B7 uuid:896C0FCBDA32DF11A473B21C49D1757E uuid:898E836CC506E011973AA3E34433134C uuid:8998E2FC5D81DE11AB10E18A368CBC72 uuid:89BB70853646DE118E05E00A924D8CC5 uuid:8A11E9BE7386DE11B4B7BF4FEEB6C4AC uuid:8A4E276E4068E0119FDED406F7D85D6D uuid:8A8991253246DE118E05E00A924D8CC5 uuid:8AB3B33B3292DC11928CDAE88FF0982B uuid:8C632C6BE825DA11BB67F40C32FA7FCF uuid:8C8B4F317E1ADF11BABCD74472CEE0AE uuid:8CB31ECD3546DE118E05E00A924D8CC5 uuid:8D62E5C5F946DF11A1ACBC2CD660C212 uuid:8D7AA070E811DE118FA6A4E77BBB6065 uuid:8E3257BC3446DE118E05E00A924D8CC5 uuid:8E4A02013946DE118E05E00A924D8CC5 uuid:8EE9A34EA4F2DD118D41CFC42384EA08 uuid:90A480022946DE118E05E00A924D8CC5 uuid:90ADF7D5398A11DF86119436A17CB227 uuid:91BB70853646DE118E05E00A924D8CC5 uuid:91C6B9DD7D1ADF11BABCD74472CEE0AE uuid:91EE4D01FDA9DD118555BD7879927BCB uuid:91F0CEF1AE15DE11A231A30135997DBF uuid:920948E8D2A3DF11949EEA82414C67FD uuid:92A915031500DF11BB2DEF8A127C4B09 uuid:9328FB1C2246DE118E05E00A924D8CC5 uuid:93312F3A9EABE011BB42E88B754C4AEE uuid:9369042C2F46DE11BD9EE5A6639A625F uuid:93B74885F527DF11881EA6879E79C74F uuid:93E8AD8CBD32DC11BFE2E5D6CE581572 uuid:93EAD89D899BDF11AE2DCAA2C8CB51A4 uuid:93F0839448B2DE1191C3C665BC9BDA99 uuid:94B31ECD3546DE118E05E00A924D8CC5 uuid:952A33247B74DE11BBA19E5AEE919C47 uuid:9548C8CDA0C4E111885CFACB1816B759 uuid:9603F6864F22DF1191BA98E3D07EA6E2 uuid:96371900588FDE119D83C7C6AEBAE849 uuid:964D6FC3F9F3DC11B7B787F67A8DC675 uuid:970A6C5B4BD3E21182F587E84CA84904 uuid:97E23D2C4B12DF11ADBDB3D48DA81215 uuid:982703D5AFDEE011B945C4A423A57949 uuid:98286303A71FDD11ACEC89ACF33BCD0B uuid:98A480022946DE118E05E00A924D8CC5 uuid:99010F2A6CC6E111893780B4C7AFC53B uuid:999D0ED6592CE011875FEC74EAED3B90 uuid:99A724EF2246DE118E05E00A924D8CC5 uuid:99BC43C5789DDF118943EC7D2E89C0BA uuid:9A4E3BC73346DE118E05E00A924D8CC5 uuid:9A7015542E46DE118E05E00A924D8CC5 uuid:9A852FC218CADC119D59B5BD9DB71E82 uuid:9AE21B6B4F85DE119FE5D398F21A4413 uuid:9AE370AECA4CDE11B97DD4E9C228A19D uuid:9B8169013A6CDB11BEEFDD803C4CB37F uuid:9BE8EC49A14CDE11B97DD4E9C228A19D uuid:9BF5559A665FDF11973ECC6C97C6FBC5 uuid:9C427F29C23BDE118624AC3C981C00EB uuid:9C4C17673BB5DE11809BA989B0D77432 uuid:9C7A205CD18EDF11A2A3EC46B0BAF7B4 uuid:9CAA42ED449EE1119B11A0465C2BB21F uuid:9CD5E901D812DE11AEE8B3F8B620A760 uuid:9DC3029D1D46DE118E05E00A924D8CC5 uuid:9E41B67C0FDFE011B872DF47B34C9F1C uuid:9ED58FA75D9BDC11A06AF98D3B9E72A9 uuid:9F71A1DF3646DE118E05E00A924D8CC5 uuid:9F806D3C2EBDDD11B5C4F8B50A58BC7A uuid:9FF76A7D9582DE11BB37BEE3126CDD63 uuid:9f5c4b97-3b6e-4ae1-959f-7c5d1aec2f6b uuid:A03CCF649B0EDF11A0D29729EA0AB6B0 uuid:A0D36E10BEDFE011AE6BCFD5A31C68AD uuid:A18701B4B2DEE011B945C4A423A57949 uuid:A270FE72B2DEE011B945C4A423A57949 uuid:A3A81857CEB6DF11A9D8F81D08128070 uuid:A3D4E0CE6EB2DE11A3E88ECC758FEEAA uuid:A3D6B47F18B2DD11919198E04079117F uuid:A497BB98164EDE11B97DD4E9C228A19D uuid:A52B2BE2D504DE118532A753628E9587 uuid:A52FE0D63946DE118E05E00A924D8CC5 uuid:A5A8AA5D6C24DF11A4ABD68E07A82832 uuid:A6243BD58D77DD11AD11D198EF8B0946 uuid:A66D327A3BBF11DC8215ADC1775D44BC uuid:A6B8A16E3BB5DE11809BA989B0D77432 uuid:A76F7547765FDF119F61C543DD152838 uuid:A8C3643B4068E0119FDED406F7D85D6D uuid:A9005AAE8A7FDF119CD6A0C6AE1D8074 uuid:A98FCD856D55DF11BA0E9527DA9EC859 uuid:AA4A851C4015DE11BF3DB3E00C8561B2 uuid:AA8E7E94A00EDF11B1CCD399BC96A2AC uuid:AB0C0C914333DF11A8E6A38A5488C1F3 uuid:AB548945339ADF119BE6A44B39062E37 uuid:ABC988A0D0C3DF1181D8F87795C0EBDC uuid:AC7E2C1F2747DE11AB48C7C86FE713E7 uuid:AD821971DBB1E01196138AFFE013C41F uuid:ADB8A6342EE0E0119500C872373672E0 uuid:AE363A6BEA4EDF1192DBF5680431570F uuid:AE5BE486BF77DC118A089E5735CF5EB9 uuid:AFE5E935C3DEE011BE5CDB1A796662A8 uuid:B00D84D55063DF1183BD84419D5831DE uuid:B118FD9C3446DE118E05E00A924D8CC5 uuid:B1A4640B7669DE1196BFC8AFC0A33111 uuid:B29926BF0864DE11A0E0B64900D2D6E4 uuid:B3D4585C2887DD119E3BBBA19C68A90F uuid:B48CC374F6E2DC1193D6E593F704EF94 uuid:B4EC9A2F511BDF118174D58534E02F48 uuid:B7F8325E92B711DCAC0BD7CFBA286A6B uuid:B7FA54C069D3DC119030EB72FE5773AE uuid:B850031313CDDD119358D3EBF934974E uuid:B854A2A773DFE011A3EAB924634D1234 uuid:B898B90B9F34DF11B05AD64FBE091CB8 uuid:B93D03A93346DE118E05E00A924D8CC5 uuid:B971000E3AE0E0118D54AF7EA314E301 uuid:B9CB04B7B3EA11DDA4D19CF0B52D258D uuid:BB1EF37481E8DC118DF8881DDBB15AA6 uuid:BB2A2B6A1D95DE119509E343DAAE56D4 uuid:BB977796CA86DE11B7F5E2F3C7B268AC uuid:BB99ECC03C4DDE11B97DD4E9C228A19D uuid:BBBD1CDA74B211DCADB9BB0FA94B2550 uuid:BBEDBA0D582BDF11A0FBCEFD438DC47E uuid:BDB9AD774068E0119FDED406F7D85D6D uuid:BDE7D3ADA44ADD11B942826B91B46D31 uuid:BE5566532CD511DAA7C7845CE1882A45 uuid:BE58D2C88D64DF118A2DED5F2E097091 uuid:C0AF6874BFFEDE11BA268E9760F6C405 uuid:C0B5F1C91213DE11A2B4922B25F7AFC9 uuid:C257517D1F40E01191FAE760C1DD11A6 uuid:C2B48C89AD4CDE11B97DD4E9C228A19D uuid:C4E9DB94260FDC11AB12D20A37566895 uuid:C7E7F377FF03DD119B39CDE1869E1E97 uuid:C86C30CAF7B5DF119A7FC51EFA65364E uuid:C8E2FDA62246DE118E05E00A924D8CC5 uuid:C9B6F2E7E44EDF11BAFDAC7CDC373421 uuid:C9E6670A7191DD11A3FAF2032831011E uuid:CA4E034E7E1ADF11BABCD74472CEE0AE uuid:CAB627967F53DD11AD30F63A5EA15C8F uuid:CC18FBD9041CDF11ACEBF49C1510D7E2 uuid:CD8BCACE98BCDE11AE26F9D1FD1B7E18 uuid:CE5A4F4F5DB8DF11A53AA0E9AB1C70AF uuid:CE850F17235911DDB8A999939B027CA1 uuid:CECC404C96BCDE11AE26F9D1FD1B7E18 uuid:D05D7C33AB33DE118637C36CB3E61300 uuid:D139A811B9BCE1118B19FE3FEACB1776 uuid:D451DE000104DD119B39CDE1869E1E97 uuid:D5A43BCE2446DE118E05E00A924D8CC5 uuid:D61A80E9E8F5DD119401ACC22D05F8D9 uuid:D62220B4D76BDE1185E2922F624AD9E5 uuid:D623E2FCCB44DF11A659990446779642 uuid:D656D3D3E432DE119E86FDEB6DD68594 uuid:D65BCF04EBA3DF11AEC8ECC4B4DD4F26 uuid:D6EF40FB5568DF11AE2DDE167B97FDBE uuid:D76A99DD2D46DE118E05E00A924D8CC5 uuid:D7EA3DE6D180DE119B78A1EBA7135A77 uuid:D883139A2F46DE118E05E00A924D8CC5 uuid:D8D88832C306DF11AF8AA587C3C1C2B2 uuid:D9C0F8FB9C90DE11AE0AC26550418DE9 uuid:DA0E56BC6EF4DC11AC2380CCB6841119 uuid:DA29F8D63833DD11B84DB153FFCB2B25 uuid:DACB42AC0D57DF119E6183A921B60F6D uuid:DC8074239110DF11856FF25F8996A646 uuid:DCAF95EF5418DC11991D9081DD0FA550 uuid:DCF2F321362811DCA14E914CEB339C56 uuid:DD3643D13746DE118E05E00A924D8CC5 uuid:DE2B51B51DDFE011B872DF47B34C9F1C uuid:DECD4BBE0497DE119509E343DAAE56D4 uuid:DECF2A805A66DF11B9B1ECE1676A37A8 uuid:DF3E6C248070DE1182A4E4822D1896D0 uuid:DFFAC8748B60DF11A5D6C5494D1F118F uuid:E167BAFFEED7DB11B9DAB4F00264E51B uuid:E17A1128166CDF11A85DDBD0BB17D8AD uuid:E1EFA889B9B2DE119ADAFFBED641D007 uuid:E37FE4776651DE11B0FF904ABD7E9C78 uuid:E3929869DD21DF11B9B2ECE08EF5C69A uuid:E4B7DEE9001FDF11B6BDAB31141CBAD0 uuid:E5D64E1F241311DDBF50C49E22072263 uuid:E687B8E3F9ECDF11B076F4C39C2F9754 uuid:E710B34B5B4EDD11AB3CE178BC4308B3 uuid:E726AB67A1D7DE11A1AE8A388BF11FDB uuid:E79A4A832DE0E0119500C872373672E0 uuid:E8711942FCD9DE11BEB2B63538B485CF uuid:E8E53D5DDD52DE11A63583E5225DA4A2 uuid:E9452F6F5948DF11905DF72F6E27228B uuid:EB01B3383110DF118ADBB50293FFA6F8 uuid:EB69B1888606DE11B380C9DFFF5EDB6B uuid:ECB78735274DDE11B01EEA9B67CC9BAE uuid:ED8D85735E42DD11A1DCD26843D97074 uuid:EE8CBA0F2D46DE118E05E00A924D8CC5 uuid:EF9A4A832DE0E0119500C872373672E0 uuid:EFE92B5982DFE0119780E3E617CFD216 uuid:EFED9F6D3BB5DE11809BA989B0D77432 uuid:F05F673E364EDE11B97DD4E9C228A19D uuid:F062A97EB0E4DB11BA0FAD538E703B21 uuid:F10C79062C46DE118E05E00A924D8CC5 uuid:F4414A038842DF119DE2BAF8DFB739C8 uuid:F4BCB835CD84DA11AEE3C92BF541D7B5 uuid:F5E54A230C69E011BAE4A0F3F205CB0C uuid:F626B67D8860DF11A9018B722DA7EE55 uuid:F68CBA0F2D46DE118E05E00A924D8CC5 uuid:F6D3A7D09955DD119A1384B593846576 uuid:F7092FDE564ADE1192A1FA09F9E14EEB uuid:F77407F55D54DF119202A9AAB05A8271 uuid:F8838F0B3646DE118E05E00A924D8CC5 uuid:F8C8948B2946DE118E05E00A924D8CC5 uuid:F97486C1E24FDF1183C7996710D099DC uuid:F9C28AB70279DE119AF4C11AE6D6D880 uuid:FB1609F90E82DC11823EA128E7E343BD uuid:FBA00D4B4068E0119FDED406F7D85D6D uuid:FC6284395CDFDE11B366D9EF74DE4B3E uuid:FD3CAB94E740DF11B86BCA79B8B8B185 uuid:FDFB2655A937DE1185B29A009951A745 uuid:FE4E366D55EBDE11B73DBE257B556A3A uuid:FF79D4767969DF11B0C7F2016358B619 uuid:FFE4355518A1DE11B97A955C1491AF1F uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b xmp.did:006B7D713E266811910997920F9A7541 xmp.did:00C055892E236811994CF266AE840D71 xmp.did:0110202EE396DF118C25A47F181081B4 xmp.did:0153B9CE159BE011A42DEC14C3EFCAEC xmp.did:01801174072068118083F8C3CE47E75D xmp.did:01801174072068118083FA9F955E2000 xmp.did:0180117407206811822A9F612A2031F0 xmp.did:0180117407206811822AB39B51EE88E3 xmp.did:0180117407206811822AB866C820C36B xmp.did:0180117407206811822AD60320B266D3 xmp.did:0180117407206811822AFEDD40772A0B xmp.did:018011740720681183D1ADE5B0809869 xmp.did:0180117407206811871F8EA3F2A2AE1D xmp.did:0180117407206811871FA7DDB6344DDF xmp.did:0180117407206811871FB00796AB80FF xmp.did:0180117407206811871FB065EFBB6B2F xmp.did:0180117407206811871FB222890A0E4A xmp.did:0180117407206811871FC852CC88A456 xmp.did:0180117407206811871FD658CCC190C4 xmp.did:0180117407206811871FDB7C73EC7AF4 xmp.did:0180117407206811871FDDF97733816A xmp.did:0180117407206811871FE8DD2340C0B0 xmp.did:0180117407206811871FF1961D211D67 xmp.did:0180117407206811871FFBB65EC420B1 xmp.did:0180117407206811871FFFE0F6FD6607 xmp.did:018011740720681188C6808AE1FD4ECD xmp.did:018011740720681188C684EAF6EB3EED xmp.did:018011740720681188C68CC6C803710E xmp.did:018011740720681188C6A2A17C791225 xmp.did:018011740720681188C6C612837B0247 xmp.did:018011740720681188C6C8FB64E3077F xmp.did:018011740720681188C6CD649893B632 xmp.did:018011740720681188C6DEB6A7380E02 xmp.did:018011740720681188C6FD88E3797378 xmp.did:01801174072068118A6D856087352BA7 xmp.did:01801174072068118A6D894AE997EB0E xmp.did:01801174072068118A6DF13459D8D59D xmp.did:01801174072068118CE8FAB7EAEEF1DA xmp.did:01801174072068118D47F87005A1FB05 xmp.did:01801174072068118DBBC14F0DD2168D xmp.did:01801174072068118DBBDB6A29937FAD xmp.did:01801174072068118DBBFE8AC30FEF37 xmp.did:01801174072068118F62C5774A079733 xmp.did:01801174072068118F62DBC328695FC3 xmp.did:01801174072068118F62EB2ADE46D273 xmp.did:0180117407206811902AD3FB78EFDDF9 xmp.did:018011740720681191098FD20CBDF1C4 xmp.did:01801174072068119109A63E4750EBCF xmp.did:01801174072068119109AC6131693E65 xmp.did:01801174072068119109AF3A50E294F5 xmp.did:01801174072068119109BD18F96FE5FE xmp.did:01801174072068119109D8AADCC33AE2 xmp.did:01801174072068119109DAEE9E19A282 xmp.did:01801174072068119109E8810C5BC784 xmp.did:01801174072068119109F159FF60CA6C xmp.did:01801174072068119109F305646EB57D xmp.did:01801174072068119109F541586A020D xmp.did:01801174072068119109F981883825E0 xmp.did:01801174072068119109FA297A7A5904 xmp.did:01801174072068119109FA9234D88D4E xmp.did:018011740720681192B08AE26BD827F7 xmp.did:018011740720681192B09184D5478EBC xmp.did:018011740720681192B097F0C9D8B91A xmp.did:018011740720681192B09C403CFF3A3B xmp.did:018011740720681192B0B9E1C2ED049A xmp.did:018011740720681192B0BAA904DE0F8D xmp.did:018011740720681192B0D93A7E1A012D xmp.did:018011740720681192B0F39C7BC094AF xmp.did:018011740720681192B0F77B00BE432A xmp.did:018011740720681192C7D0F81AAEB882 xmp.did:018011740720681192D8E7A64109317F xmp.did:0180117407206811956CDA996C733812 xmp.did:018011740720681197A5B386C33BAD50 xmp.did:018011740720681197A5DAF2583A0A4B xmp.did:0180117407206811994CEBF7BEB94108 xmp.did:01801174072068119A889F688513D349 xmp.did:0180117407206811A610925F68191C15 xmp.did:0180117407206811A7BAE496507CC015 xmp.did:0180117407206811A81C97AE71B8FB6D xmp.did:0180117407206811AB08876C20321FD7 xmp.did:0180117407206811AB08895392A55D1F xmp.did:0180117407206811AB0891B79122B22D xmp.did:0180117407206811AB08B40A0C00B04E xmp.did:0180117407206811AB08E8E8EE3F0289 xmp.did:0180117407206811AE569E92DE925BD5 xmp.did:0180117407206811AEC7ACE16F2ADB0F xmp.did:0180117407206811B08BC34CD0822428 xmp.did:0180117407206811B18DCF75FC771844 xmp.did:0180117407206811B1A481173F3B2091 xmp.did:0180117407206811B1A4C38293BFDEA8 xmp.did:0180117407206811B34BBA3E1B4D7703 xmp.did:0180117407206811BA06DE2D23900A1F xmp.did:0180117407206811BEEAF2CDF8DA2015 xmp.did:01C66F18E5C6E011BEF0A37AC8AFF6B8 xmp.did:01D3BC0A0398DF118E0DFBCC39F1D70C xmp.did:022dc868-1507-41c0-824e-41d674b1319b xmp.did:024F733C4CD9DF1181859156DDB527B7 xmp.did:0274AA50BBD9DF11BFD1959D5E34049B xmp.did:027CDBED1E37E2118E37E38874568DAA xmp.did:028011740720681180838D197B87AF60 xmp.did:0280117407206811822A89FBD66CBFBB xmp.did:0280117407206811822AA27048748FF2 xmp.did:0280117407206811822AC92D39C1A3FB xmp.did:0280117407206811822AD60320B266D3 xmp.did:0280117407206811822AEB04528113D6 xmp.did:0280117407206811822AFEDD40772A0B xmp.did:028011740720681188C6A298443F10AC xmp.did:028011740720681188C6C9584A0CE4D6 xmp.did:028011740720681188C6EA7AFA84B3CB xmp.did:028011740720681188C6FDE500FF8673 xmp.did:02801174072068118A6D9937AF694056 xmp.did:02801174072068118A87FFDBA1F29826 xmp.did:02801174072068118BAACF3C48947CCA xmp.did:02801174072068118E8B95801AA5B653 xmp.did:02801174072068118F62CC84EB2E7047 xmp.did:02801174072068118F62CEC5F85B70E9 xmp.did:02801174072068119109AC6131693E65 xmp.did:02801174072068119109C2F3FB4CA0CA xmp.did:02801174072068119109C65A70401340 xmp.did:02801174072068119109C94BE3FB6395 xmp.did:028011740720681192B0C3F69947135E xmp.did:028011740720681192B0DEBFF74CEF5E xmp.did:02801174072068119457F50BDC4298B1 xmp.did:0280117407206811994CDFAA02EEDD50 xmp.did:0280117407206811AC988E10CC0CC7E7 xmp.did:0280117407206811B840C1437888502E xmp.did:030428C019206811822AE759717D91E5 xmp.did:0353F14DDC94DF11ABF3CD52E6909B56 xmp.did:035E52685643E411ACBAC8B0A8AA20C7 xmp.did:0378c2c8-520d-46ae-b8b7-cee2bdf7d76e xmp.did:0380117407206811822AD4CF427E0C0F xmp.did:0380117407206811822AF51F8ED7C6BD xmp.did:0380117407206811822AFEDD40772A0B xmp.did:038011740720681185A8B6800FF3D966 xmp.did:0380117407206811871F81E8BB0F82E6 xmp.did:0380117407206811871FFAC63C818640 xmp.did:03801174072068118A6D9937AF694056 xmp.did:03801174072068118C148F91BAAD2FBA xmp.did:03801174072068118F62FA26B1D2377A xmp.did:03801174072068119109E219C1666972 xmp.did:038011740720681192B08C886B6D489C xmp.did:038011740720681194288658274AEA5E xmp.did:038011740720681197238F25F2FFB081 xmp.did:0380117407206811994C93DD028C14EE xmp.did:0380117407206811A237BBC8AE7066D6 xmp.did:0380117407206811A7D4DF8188E07E2E xmp.did:0380117407206811AEE4ECC20A5D0880 xmp.did:0380117407206811BD209C3F4437B116 xmp.did:04801174072068118083C706F6BEB857 xmp.did:0480117407206811871FF0EE6AD5790B xmp.did:048011740720681188C6BBFAF87E6B92 xmp.did:04801174072068118A6DEC27AEB5D46C xmp.did:0480117407206811910999E172ACEF41 xmp.did:048011740720681192B0D5FFEB04FCB9 xmp.did:048011740720681195FED5E9D317291E xmp.did:0480117407206811A6D9CABE601DD596 xmp.did:04BB01059CF711E08A9C913C073A663E xmp.did:0502f4ef-f38b-4a0a-a125-965ff68b1388 xmp.did:05256611-aecf-497b-9eff-1eccb88d83c8 xmp.did:058011740720681180838D77FED7457F xmp.did:058011740720681180B4DB6FCDC6F1A9 xmp.did:0580117407206811822AEA536F1C3DF3 xmp.did:0580117407206811871F834B9271D32D xmp.did:0580117407206811871F9617A759D4E6 xmp.did:0580117407206811891D9A76213AD321 xmp.did:05801174072068118A6DD609E27E3F7C xmp.did:05801174072068118F628C5BC7FF1E1F xmp.did:058011740720681192B09470F75BAE8F xmp.did:058011740720681192B0B03D2B78CFDD xmp.did:058011740720681192B0DDB9BBC21E83 xmp.did:058011740720681192B0FBBF273EF816 xmp.did:0580117407206811A440DAC4D3AECDA0 xmp.did:0580117407206811A7BAADB4251DCAF5 xmp.did:0640E5627B98E2119714D61484E4827B xmp.did:064318E581A6E01198E4BABA0C846270 xmp.did:06801174072068118083D55D211AA6F0 xmp.did:06801174072068118083F13AB35667FD xmp.did:0680117407206811822A9410014BA74F xmp.did:0680117407206811822AE1141364385C xmp.did:0680117407206811822AEB04528113D6 xmp.did:0680117407206811871FC852CC88A456 xmp.did:06801174072068118F62FD9B9E717B6E xmp.did:06801174072068119109B5757D1049F7 xmp.did:068011740720681192B09470F75BAE8F xmp.did:0680117407206811935398A7741CF40E xmp.did:0680117407206811A613B4EE39B4D58C xmp.did:0680117407206811B1A48ACCC66BA1E0 xmp.did:0680117407206811B2A5AE2BE598D25E xmp.did:069AC01433C211E0AA8582F7083052C8 xmp.did:06E84308D3AB11E386CCA958D368DB51 xmp.did:0716834A66DEE0119A01E27F4D86A62B xmp.did:075E52685643E411ACBAC8B0A8AA20C7 xmp.did:078011740720681188C696DC609994EC xmp.did:078011740720681188C6CAC5BEF2CC51 xmp.did:07801174072068118DBBE31A192FEEDC xmp.did:07801174072068118F6288F23A50D5DD xmp.did:07801174072068119109DDBC5677155C xmp.did:07801174072068119457905C16F6CCBC xmp.did:0780117407206811BEB789E23D201984 xmp.did:0783f72a-56b8-415d-8531-1eeb20414504 xmp.did:07C62F90DE63DF11B7199BA8D7682C1B xmp.did:07D85B194F21681188C696DC609994EC xmp.did:08084073AF60E011AFA79E3A4F01158E xmp.did:0871F2CAABDD11E291E28E7D6F356B9D xmp.did:08801174072068118083DB8F1A026FAD xmp.did:0880117407206811822A82C87EEA386A xmp.did:0880117407206811871FB03D861007B1 xmp.did:08801174072068118A6DE3227BBC4D54 xmp.did:08801174072068118F628C5BC7FF1E1F xmp.did:088011740720681192B080BDF09D73D4 xmp.did:088011740720681192B0BCCE1816D9E6 xmp.did:0880117407206811963CF2F523F9A511 xmp.did:0880117407206811A195E33BF38323D9 xmp.did:092C276A5DF411E0A80E8127450A213E xmp.did:093676BC0D20681188C6CAA8038E09AB xmp.did:0980117407206811859EE31FF8DDBE8D xmp.did:0980117407206811871FD8AA5A0491ED xmp.did:09801174072068118C149339A6CC4AB2 xmp.did:0980117407206811AEE4ECC20A5D0880 xmp.did:0980117407206811B2D9C93A76126968 xmp.did:09B542E7BA21681188C696DC609994EC xmp.did:09CD7F159F13E311B5C0B2E7207839F1 xmp.did:09DDD7D4D6206811BB37D81EA9E9F402 xmp.did:0A130E931320681188C68E73FDFCF637 xmp.did:0A8011740720681188C696DC609994EC xmp.did:0A8011740720681188C6C5D9DC520BD2 xmp.did:0A801174072068118A6DC5C740EBC4EC xmp.did:0A801174072068118F62E601B48A9F82 xmp.did:0A80117407206811A613B4EE39B4D58C xmp.did:0A80117407206811B1A4D0E266413BEA xmp.did:0AD398C4057111E4B5A4FB3A5E2D01F2 xmp.did:0B5776FE85C111E28AF1B2D2D444165E xmp.did:0BE3D4642E206811822ABBD2F43D0783 xmp.did:0BE75C72356ADF118ECBF2C8AB401F20 xmp.did:0BF11FD1DE22DF118E04DE7FDFD8DEB5 xmp.did:0CCF6644C8A6E011979696CECC20A286 xmp.did:0D3D882C5343E411ACBAC8B0A8AA20C7 xmp.did:0D9A9BFCEE7FE01182DFD33A26DD6908 xmp.did:0DC2B982FBA5E011A4FEE67DFDD7FB36 xmp.did:0DC5B1846FC011E29171A4C81E509EF0 xmp.did:0DDF437F0E206811822AA8C8AA0C675F xmp.did:0E2AC53BD72168119109CA2496A1ABE5 xmp.did:0E9760F0C0D211E2A4C6EDB2536FAC91 xmp.did:0F30D59357C8E011BEF0A37AC8AFF6B8 xmp.did:0F3B40E0E263DF118B1C9621F0574BD2 xmp.did:0FA002C8A794DF11A47BD14C5937195C xmp.did:0a9eed68-948f-433f-9773-bb9b6bbb5783 xmp.did:0d340bbf-0f98-49b9-9e4b-cdb9086f7f6a xmp.did:0df0a671-d27e-41ae-b249-6964f30c0578 xmp.did:0f0aafbd-376e-463f-ae83-1d9ad7cbcf32 xmp.did:100823B1CB0FDF119A0D9CB73A16B779 xmp.did:102cd43c-9635-4fcd-8246-a55530384f1c xmp.did:1085A4F83DD011E0A5E4E63061587FB7 xmp.did:10C249B651206811AE568088196B6FA8 xmp.did:10CF6644C8A6E011979696CECC20A286 xmp.did:112A90B7909811DF80ADCEC8AA0E941B xmp.did:112A90BB909811DF80ADCEC8AA0E941B xmp.did:114D8FCE548511E39A82BB701DA57CEE xmp.did:119A01FA9E2068119022D6BA6E344F5A xmp.did:11A77212D348E011B6BAB55D64F5962D xmp.did:11BE60950A91DF119200B22FF680F3F0 xmp.did:11F88C367178DF1187DF993E7E1F02E5 xmp.did:11FB407FDBE5DF119CEFD33EC3DF08E5 xmp.did:12ECDFCC6918E0118317A5126B184C9C xmp.did:13296BD7929AE111A9FAD16AAD7C28D8 xmp.did:13B748432EA2E0118D04E5AB37155918 xmp.did:13ECBBB17E1CDF118D4EF1C33EDDA687 xmp.did:141849A80AA8E41185979686520A4F87 xmp.did:144C62F9830311E0B62FB7127DA0FEAF xmp.did:149C8558F373E0119389FF7D0DABFC0C xmp.did:154F526AB7FCDF118B1C8E78BC400721 xmp.did:15529C00522D11E3BE96D1B431C7F542 xmp.did:1565E62DBD4A11E09901EB943C9FC65B xmp.did:1588ABA64B7EDF118BB3FD3FFFE50FBC xmp.did:15C9895284D3DF11B5A1BCED77057419 xmp.did:15FAFFF52B2068119457D5C82447A0CD xmp.did:1630586DC9E3E0118D4BE9BCF87F398E xmp.did:168871a4-d81d-4e8e-98ce-b0de47ae58d5 xmp.did:16B5EA561C21681191099A139FF76C18 xmp.did:170463185620681192B0D8368D31C23C xmp.did:171E3B8B22BBDF11B7E195F5F78DCA2B xmp.did:17385DBEFB20681188C696DC609994EC xmp.did:17DDC6506D6ADF11A2E6B3539F1DDE96 xmp.did:180cc9a0-333a-4c5b-93ec-d1fe095b14a9 xmp.did:181223f7-31a8-47a7-a911-075963123f27 xmp.did:182CD694ABDD11E2B347E015CD8D4930 xmp.did:18407EA49F74DF11B9ADF501B1FEEC5B xmp.did:18503ACC11206811A7BADD5938E42519 xmp.did:18A6A5FAB913E01180DACEB1E4B080FC xmp.did:18E040BF726B11E096478444BF297328 xmp.did:18F1103E54C3DF11AAE49CD88AA644AB xmp.did:18FE1CEEFD20681188C696DC609994EC xmp.did:191be27f-15cf-4051-ae0d-b449788611c2 xmp.did:194993840129E1118B6683AB8BA184CC xmp.did:1965DDDA3A9E11E39831A4CE732877D4 xmp.did:1965DDDE3A9E11E39831A4CE732877D4 xmp.did:1990B25A12216811871FAE052E76F513 xmp.did:1A6A210EBD21681188C696DC609994EC xmp.did:1AAA61C531206811857EF51D78886996 xmp.did:1AB777227629E0119AD1B945C1964BAE xmp.did:1AC9CD888D0611E38591F607D1A1A63F xmp.did:1B61A465988DDF11B96ADBDD437880CB xmp.did:1BD6A30692A8E0118BA8F2782CB3F003 xmp.did:1C01C42FF620681188C696DC609994EC xmp.did:1C03146227226811AF6F8C15B6994DA7 xmp.did:1CCF6619A3A8DF11B402D829E1AF718C xmp.did:1CFE1CEEFD20681188C696DC609994EC xmp.did:1D012E9EC9C3DF1190EED90E3B79DA34 xmp.did:1D06EF8E726B11E08CB3DF7C657CD3E9 xmp.did:1D51DAA7222268119109F828D8DAF436 xmp.did:1D6E4373AC5FDF11A68ED251FF23EC34 xmp.did:1D726D5F7C99E11182BF8645631036F9 xmp.did:1D794D3196A0E011BA5FA492FDC2C4B6 xmp.did:1DD55E701E2168119109C99D4C01BF1C xmp.did:1DE41A972DB7DF11ACFE8F8ACF6BCECB xmp.did:1DED8CFF57BBDF118185E1BC98F91251 xmp.did:1E059DA44734E011AD25903082F159FB xmp.did:1E7745A2909711DF80ADCEC8AA0E941B xmp.did:1E7E6F2C19E8E1119DFDF0AAA80BF1AE xmp.did:1EC0AD1472DFE011BAC7F7CD194FE1BE xmp.did:1EFE1CEEFD20681188C696DC609994EC xmp.did:1F63A8EDD676DF11BEEA9D3B8B3711B2 xmp.did:1F71CC6B5AAFDF11AA1B8250A37ACD87 xmp.did:1F7C6C07EB75DF11A3B0B0E08A7B57B8 xmp.did:1FE3A640427AE011A4D3C40ADA3B0913 xmp.did:1c6778f3-5fb8-4449-aa06-d4dd0cd09ca2 xmp.did:1f71eed5-ac33-413a-a0de-089b277cc1d9 xmp.did:1feb2e2d-87f4-4f1c-9d2e-c85dd36cc8f9 xmp.did:20954B6E3791E0119DE0C72DBAF511EC xmp.did:20B881312B20681192B0EDAAC00D9FEC xmp.did:20bd5d16-f267-4afc-be7f-75b1594fef8d xmp.did:20ec75a1-da20-4b61-978e-9c607188d8ae xmp.did:210C18881B21681188C696DC609994EC xmp.did:214140E5CEF7DD11986B93155D102C48 xmp.did:215D6A12242AE1119583FD4A981E0514 xmp.did:216EA2C971D1DF11A9A9AAF92A4138CE xmp.did:219911BF2F6BE0118B53B756951DDF56 xmp.did:21B8F0C085A0DF1182FEF79AFAE46956 xmp.did:21BCF77D6204E2118B88C0833978F058 xmp.did:220C18881B21681188C696DC609994EC xmp.did:2229a487-68e4-47ad-b2e2-af595e496c8e xmp.did:23301B1D792068118083982FE4C6204F xmp.did:23B329EC60AFDF11A75D9D2474DFBA57 xmp.did:249077570A206811910986D9CD6AC386 xmp.did:24DE300A77FADF11957CB6C8F2BB99C0 xmp.did:24a07169-d438-4436-b783-57651373945f xmp.did:250F37FDBE65DF1196A2E5386EB7EFBF xmp.did:2512933b-e51c-4c45-9733-cb3af0e171f0 xmp.did:252A728E65BBDF11B714F0C6E94ABD01 xmp.did:25BCA5186093DF11B927A622C20C3829 xmp.did:2636B2B8BF4311E386679C70E86EA2E5 xmp.did:265D79E0A44D11E2BA1CF924683F6304 xmp.did:267A70FFD257E011A551F15593603B5A xmp.did:271B6C3D1B17DF118E43E01B5B84694F xmp.did:2749DAC169E0DF11BAE2A9F4FA1C730E xmp.did:27C109D5ACDEDF11BAACCFE187E6E735 xmp.did:282F44E5EFE9DF11A2C6F6A60B573B0E xmp.did:28EEA9B79AD5DF119648F8511B7417D3 xmp.did:2928DC004423E01199ECC9B0A3B730D7 xmp.did:29339019AE55E0119C03A862C7BF6F88 xmp.did:2A3D854F0A2168119109FB109986C91C xmp.did:2ABB75037D1A11DFBF66D19AE0AB5B1B xmp.did:2ACF258E325DE011A1A5CBD15F1C5D8A xmp.did:2ADE300A77FADF11957CB6C8F2BB99C0 xmp.did:2B3A659E49A4DF11B7A4FFC9B88CD1F0 xmp.did:2B49DAC169E0DF11BAE2A9F4FA1C730E xmp.did:2C46390A7D4911E0A66DC919951D3F2B xmp.did:2C514E4873D111E0B183883F507A6AA6 xmp.did:2CC971D6DCE1DF1193B8A11A80F46236 xmp.did:2D81E3318B86DF118053F8F33B4219FB xmp.did:2DA2E4C6F3BCE011B0BBD5E3244285CA xmp.did:2E022BBA40206811AFEDB4DC5A5EDBC9 xmp.did:2E229BE45760E0118647B4BD29669B78 xmp.did:2E463E692B5711E8B022F407692B6CD2 xmp.did:2E463E6D2B5711E8B022F407692B6CD2 xmp.did:2E463E712B5711E8B022F407692B6CD2 xmp.did:2E4A134843CCE011907C944EF181D2E5 xmp.did:2F290AB9132068119109C80A4C3147BC xmp.did:2F82ABD94D22681192B0D8368D31C23C xmp.did:2F9782BF00C8E011BEF0A37AC8AFF6B8 xmp.did:2FCBE8DF0388DF1197BFF29493CBCE26 xmp.did:2bd7c243-278f-4f61-ab02-d1ccb1c9298c xmp.did:2cfcedd4-3427-47a2-9747-b5e069c36cff xmp.did:2f168030-03fc-4540-a922-aa2f52bcb71c xmp.did:2fb522c8-be65-4d87-94ac-88851a28efec xmp.did:3034510a-3cb6-4e56-9b37-1ca349095c30 xmp.did:303C18AF342068118F62CC84EB2E7047 xmp.did:30DAB532351011E1BCA7FF7E89EBFB18 xmp.did:311463A38D64DF119506F54ED5040232 xmp.did:31552C38272068118A6DC2EB5CD0A707 xmp.did:315EC7B24277DF11A28CDB2E6E8DED8F xmp.did:31B8A8EAABDD11E2BB579B541E6151AC xmp.did:31EE31B21D9ADF1183B8B6378F64346A xmp.did:321DE048F78A11E48B8FF799B3AB2C11 xmp.did:32D52E0D0E2068118F62DA03125D4285 xmp.did:32F018B31320681192B0C09A9F8F6D74 xmp.did:32F958CC79E511E38A2DD8B5CCDA335F xmp.did:3323fdf8-039e-4527-8084-93495de1a375 xmp.did:332792B715206811822AA76189470CD0 xmp.did:332CDACA9F206811994C8A8243CF6DD5 xmp.did:337107AC578ADF119F2ED11A96E91689 xmp.did:338B5C19C094DF11942AF82227E26339 xmp.did:33EDBD849E5A11E2AEC7FF999E1A6F5E xmp.did:340EF1E17A20681188CCC0301896C619 xmp.did:34125B444F2068119109ADEEA36B1FBD xmp.did:343C18AF342068118F62CC84EB2E7047 xmp.did:3452B8FEA85211E6A7B6F8C96922A453 xmp.did:3469A8DF112068118DBBCC81981F930D xmp.did:353C7E32B620681192B0FA0C0917E462 xmp.did:3545FE7468B0DF11A936AFDE3AD8B6A8 xmp.did:354FB441312068118DBBE38DD8571038 xmp.did:35AB3361EDB7DF11B973D97945315A6C xmp.did:35cc1ac1-4070-4373-b3fd-46c466b973bb xmp.did:36232F4D813ADF11A89FA523901B3490 xmp.did:362D91EE08206811871F80851E6F0846 xmp.did:36451839-eb37-421f-957c-e32dcb6993c7 xmp.did:36AF18290C206811BC56E1514E765539 xmp.did:36C863DBD4DAE1118CC1E0C7CE6212AF xmp.did:3738FE75C37DDF1181B8A5397EDCE6A6 xmp.did:374FB441312068118DBBE38DD8571038 xmp.did:382F6AAEE32168119109CA2496A1ABE5 xmp.did:38BE6833E32068118F629B9B9A9C3246 xmp.did:39220507-45af-4623-9920-970d02d24f7e xmp.did:3938FE75C37DDF1181B8A5397EDCE6A6 xmp.did:39583a7c-3a59-49f8-a6f5-433dd78e4dd3 xmp.did:398B55B75193DF1195ADB8167AC45A1B xmp.did:3A62EBC4235111E0B173A65C0EC2E2AC xmp.did:3A6850363F8DE011A68BE05DED48B03D xmp.did:3A6CAF272B19E01184DD8FBD11034008 xmp.did:3A76783CD0A8DF11B2A19D50FF21B8D9 xmp.did:3B14F6445C93DF11ACA58DEE884A84F9 xmp.did:3B44C1030C2068119109D8AADCC33AE2 xmp.did:3B612268DAB6E01187C39E0D90EB37B5 xmp.did:3BA789FE147DDF11955690B0B2A0D740 xmp.did:3BC6CE12C370DF11850CB72DB9D2CB92 xmp.did:3C3603469AD511E08F0ABD72ABEC7BC6 xmp.did:3CA87BC9965411E28F45BFCBE171FACB xmp.did:3CBB494529D1DF11A5339ABF8266E818 xmp.did:3D02E62ADF8CDF1181DCCB8E8B77F31F xmp.did:3D0FAE7AB2A611E3AB42DCAC2251EA6B xmp.did:3D53528AB890DF11BDCDFAC92D1C9C9A xmp.did:3E07D86E9D8DDF119B32D13C0F3BA8DF xmp.did:3E55813C14206811822A815225240280 xmp.did:3E5623471F206811822AE3B120C8215C xmp.did:3E8A102C200C11688442D886113E168A xmp.did:3EE476995A28E0118FEFFAAC272DD9E7 xmp.did:3EEE2DB5B07FE0119FBDB1C3DCB285CD xmp.did:3F26EE8EAEC0DF1196E782BE87607A8D xmp.did:3F2840BBDAF4DF119B9FED66B6875A77 xmp.did:3F5068DCA87DE11188FAC430D1AD6311 xmp.did:3F6B4C626AC7E011B58A93F597C8E61A xmp.did:3F727C802A20681188C6D9C4D0AF0270 xmp.did:3FB9609F5BA7E011979696CECC20A286 xmp.did:3FD63FCB7A2811E2A19490071A5CE515 xmp.did:3FE9B2490F2068118E9FFFD635C57A59 xmp.did:3ac2c713-6017-4ca0-85e4-7a6887cf3287 xmp.did:3acef44d-8ad8-40d8-9188-51e26c737010 xmp.did:3adf2af0-da50-417f-b1dd-8a30de0dda78 xmp.did:3b2205d0-952c-45ba-9e7c-fa0a10b4be85 xmp.did:3d3967b4-4018-43c1-863e-6e9337dd516b xmp.did:3d632576-1d55-4b59-a82c-47de588c8552 xmp.did:3f648e8b-6d79-49b2-9cb4-f61b7507c451 xmp.did:40475a38-a374-4259-8933-f12265bfa858 xmp.did:407BA1D2DE21681188C696DC609994EC xmp.did:4089d480-bae9-4aaf-8b7d-b47f59b39000 xmp.did:40BB217CBD84DF11A47CEBE628912B02 xmp.did:40F5E85E7ECDE011A9998254DA7B207E xmp.did:41144A9F5CBBE011A9CDC1CC5A8545F0 xmp.did:41A2C742846F11E3A586A5682B3D1FE4 xmp.did:41B0431F4680DF118EB08D045EC6FA66 xmp.did:423be1bc-1955-4b41-997f-cc63343b5dec xmp.did:42611933C6E9DF119366D222F59B492C xmp.did:426956A63C7EDF11A5A4E9065FAC704C xmp.did:427629EB1F7AE011BC6ADBE9D9257556 xmp.did:42909406645FE011964FE99A58EBB358 xmp.did:42ABA707D6C1E211AA48DA7EB73093A6 xmp.did:42c26ed6-6b3e-4568-b42f-6ff3b05b4993 xmp.did:43487F5815BCE011B0BBD5E3244285CA xmp.did:4395982DEA6EDF119A5C9EE4A37A57B1 xmp.did:44569F2270206811B540D1205A8C4334 xmp.did:44BA610FF715E011850FA901B4C1B675 xmp.did:44C0E661102068119109D41DF25DBCFF xmp.did:44DD59AD2520681188C6AE32EA398297 xmp.did:44cfb907-d77b-4b5d-95ad-5d0d3a4567bc xmp.did:453680A25EC9DF11A86DDD161CFCEB0D xmp.did:45499065-476e-49a7-b080-1cdc2247836a xmp.did:45599B5D3BDFDF11AD98D0CC567A99E5 xmp.did:4573E729775C11E4A65EA7DB5D92F052 xmp.did:457A74E985C311E28AF1B2D2D444165E xmp.did:4582F7613448DF11AD0C84D94E5D43BD xmp.did:4590A1312920681188C6D159E68FEEFA xmp.did:45BF49C464C8E011BEF0A37AC8AFF6B8 xmp.did:45CE15F1326EDF119161BE757400AFBA xmp.did:45EEBEE9D298DF118D72D939921CE7C0 xmp.did:45F62045FF1CE211BF1CBEAB02877C54 xmp.did:45a47e9a-b93b-446b-8b15-d6477dabe3dc xmp.did:45c3a546-b458-41dc-b088-72cba1bfdf99 xmp.did:463C55EC1F206811871F9753D344F7A3 xmp.did:4640EA1197DCE1118E89A806EF65A4BF xmp.did:46A95EEE9FBFE011B0BBD5E3244285CA xmp.did:46AB7E0D2730DF119042AD88AD5F9FC9 xmp.did:46E39520AEB8E011AEBCBCB1E3A15768 xmp.did:46FDAC28978AE0118DBED2E4485D9FF1 xmp.did:476DABBEBE2068118F62B3176EE25187 xmp.did:47A38103F079DF11B72DB7DBF10B274A xmp.did:4804CD8307206811AE56F87BB2B8114A xmp.did:480B7E46AF78DF11A825CF8DE5D91DF7 xmp.did:4814DD170A21681188C696DC609994EC xmp.did:487937402120681180839D9EE6A3940A xmp.did:48B3A7A23CCFDF118F31D6D8ACE6A8C6 xmp.did:48B7BD0BD1F1DF11911DAE3F77A72C12 xmp.did:48DFFEDFE7C8E011940687537EBB93D9 xmp.did:48F5EFE5AE80E0118A91AF6880B6674F xmp.did:4978DD280123681192B0CABB2874AF0C xmp.did:49f3b510-e2d1-4786-9281-0f8db839f18d xmp.did:4A0CBE8F945CE0119B94E398813E13AB xmp.did:4A9EECE22B5711E8B022F407692B6CD2 xmp.did:4A9EECE62B5711E8B022F407692B6CD2 xmp.did:4B04CD8307206811AE56F87BB2B8114A xmp.did:4B12AF1A50216811AF5C82C8D4EEE19A xmp.did:4B1B4C0A1009DF11BD51F318E9EDA9E8 xmp.did:4C4D4D899EF7DD1180199D0A99EB683F xmp.did:4C51B774A17011E0A528DEF2AC8C55C6 xmp.did:4C5F6833BF4611E386679C70E86EA2E5 xmp.did:4C8C79BCDBF8DF11A111C57C46790BC9 xmp.did:4CA1D100CDC1DF11AAC7DEF7E9EA2229 xmp.did:4CDA76DA3520681188C6CC41240299E2 xmp.did:4CF62045FF1CE211BF1CBEAB02877C54 xmp.did:4DCB8A30914DE011BD63DE0802894CA1 xmp.did:4DFE631B1C2068119109D986A10A20A5 xmp.did:4E2A12FF272068118DBBF1E759913209 xmp.did:4E5BCDD097A8E011B01BA4DFDBC23FA5 xmp.did:4E96D8071320681191099262B251A4F6 xmp.did:4E99A86EF541DF11B948936BFEB99B26 xmp.did:4F2FBD5B3833E211ABC1ADC0DA5AC883 xmp.did:4F6BB8702C206811871FE169E7DC3C98 xmp.did:4ae9d024-9fb5-487b-970e-5e02e304e3f9 xmp.did:4b5948a0-949c-454f-ad97-6bb0a0b0be8e xmp.did:4bff2ebc-a64c-4323-89d1-29e732d803f7 xmp.did:4c1a8d9e-a8cc-4333-9c11-69ecec4a6b28 xmp.did:4c6bb597-9fc0-45fb-a61f-1e54136a08dc xmp.did:4e224af0-1748-4171-a27f-f9d10d5bb264 xmp.did:500A9AE2DD206811A613B4EE39B4D58C xmp.did:5032E746EBDCDD118BB0ED485B2406E3 xmp.did:505381322485E011BD3DE9624629426F xmp.did:507BD60A0B2068118DBBA622512CB8CA xmp.did:50F0464C0C2068118089E259502D6AC2 xmp.did:514F67C5E3A0DF1198F8A7B931697359 xmp.did:51546FDD1320681192B0BAA904DE0F8D xmp.did:515DB534983011E3A5E6C5BCA1E0549C xmp.did:516E6F2CA182DF11B486DD773D4325EB xmp.did:51B82BC8222068118A6D8F7F76AB4DDC xmp.did:51faf370-f6c0-4faa-967c-c3aeda217a80 xmp.did:52101e0c-5e89-41de-8148-0ca9945851ae xmp.did:522B96D20C2111E4A08488C3B82086F7 xmp.did:5232646C26CBDF1190EAEC1F0BACD3F2 xmp.did:524e397e-61e5-4b7d-b0c0-57430e9120c2 xmp.did:527244aa-2822-4278-9851-45425d570d40 xmp.did:52826197F1ACDF11AD7EB332E0CAFAAB xmp.did:52910D990C206811A961A044C143500B xmp.did:5313927753216811994CCD5FF36C8C71 xmp.did:535fa335-3b9c-4266-844c-7da7b1077277 xmp.did:538F8AD33C23681188C6E3B2AFCF6608 xmp.did:5390C6CAC279DF118F1BE24DC2AE522B xmp.did:543A798F1307E011846FE8C04D3C8DEC xmp.did:5445a0d8-ba8b-47eb-aa93-1e3502a68d20 xmp.did:54546FDD1320681192B0BAA904DE0F8D xmp.did:5496D8071320681191099262B251A4F6 xmp.did:54C3F9F8BDAEDF11A5DC959C82ABC9E1 xmp.did:550AE0126E78DF11B544BC83DED6D6DD xmp.did:556E056A4621681188C696DC609994EC xmp.did:559FCD3B527ADF118914DEB1351761F1 xmp.did:55C093961E2068118083EBC7D6F18424 xmp.did:55D0E233C393DF11BE97C6237DF28CA9 xmp.did:56028b1b-0482-4dba-8fe0-260ecc1d0c0a xmp.did:56EAD66EECEDE1118EBDD2792BC326D4 xmp.did:56FD0742357AE1118349FA99D447291B xmp.did:571403831520681197A5D5DB41E073B1 xmp.did:574FF45EC867DF11A56BDA19C483882A xmp.did:577969B29D5011DF8B1491785F4DE9BB xmp.did:57B92F5C1089DF119D7284B7894B1A03 xmp.did:58316A45F5F5DF11807F8C8A28F8A117 xmp.did:58536A145360DF11B97DB259F7F250E2 xmp.did:585BBF1B01B6DF11AA09B180E60AB9EC xmp.did:5913b3a8-f425-4f54-b7d5-4b83741c81a9 xmp.did:5944F43DD95311E3B723F415BD0B9511 xmp.did:594EB93E9FA611E2A818C1F54E782E81 xmp.did:59C5FD5C3884DF11B9B78CE116BA6A97 xmp.did:5ACA778625C1E01180B9D22014B81B82 xmp.did:5AF20CAF5343E411ACBAC8B0A8AA20C7 xmp.did:5B00864E4767E01197F3F9B0477D6229 xmp.did:5B6DD2B74584DF11B7248B7DDF794A1A xmp.did:5C16E47A5AED11E3B1C7893BF1DEEAD9 xmp.did:5C83A2FA464711E3964AD95584025AAA xmp.did:5CAC3B5AF977E011AC53A76EEAD13040 xmp.did:5CEC9C6EC13DE011A0BEF8DDCFC32D6A xmp.did:5D0CDBD57F76E011BA3CF330558605BE xmp.did:5D7E93F5833411E0B62FB7127DA0FEAF xmp.did:5DC68BF2FD9DDF11B149FF210A7EE0B8 xmp.did:5DE7C465E499E011A42DEC14C3EFCAEC xmp.did:5E1C88E1FC20681188C696DC609994EC xmp.did:5EC857194DD3E0118BBCBA5E7FF86AF5 xmp.did:5EF6E033572FE011A924FF15510F1797 xmp.did:5F0079D829206811B1A4D56600D919C7 xmp.did:5F4BFDF37F1ADF119CB8E7D742FA3A25 xmp.did:5F6E4C3F5CABDF1182C292E0CAD857C9 xmp.did:5F826D491A88DF118D3CBDB50D00B442 xmp.did:5F91541C69A0DF1188F0EADDFE7FD2A3 xmp.did:5FB24B6A67E811DF98D1BEA7C517AF65 xmp.did:5FDBE369768ADF118B8A95612921A3EC xmp.did:5FF58F1B9086DF1182C5AFC7B308F06B xmp.did:5dfdf607-a6e9-42e5-8048-4abb66b76452 xmp.did:60640A5C5826E01182CAD38ECEDCE268 xmp.did:60F58F1B9086DF1182C5AFC7B308F06B xmp.did:610079D829206811B1A4D56600D919C7 xmp.did:611032FABB87E011B710DD0532D7B522 xmp.did:613c4e1c-1656-4d71-8bbd-488bf234de56 xmp.did:614ca814-b198-4bf1-a7fc-f447e7628ce5 xmp.did:62433795-6f82-435c-ae8a-efc4f5064e12 xmp.did:634429630A2068118F629B9B9A9C3246 xmp.did:634FE106FDAADF1196BFAB2AECFE2FA1 xmp.did:6359e5af-44ed-4bd9-b9e6-b9c4694fa628 xmp.did:63762B5E4DB0DF11B375B34914E5B622 xmp.did:638880E80920681192B0BAA904DE0F8D xmp.did:6395943583CBDF11BAF5EC302DA3E9DF xmp.did:639B1DD297D5DF119648F8511B7417D3 xmp.did:63AEF9105305E011867F89B0211E4F7A xmp.did:63B9DF027F206811871F80898A1CC3A1 xmp.did:63CB59C89598DF1190F2B7CFF5F51124 xmp.did:64509ae0-5046-4436-941f-241f0ee52e03 xmp.did:6474C83C687CDF118E1F99D69B3525CC xmp.did:647F1DD60621681188C696DC609994EC xmp.did:648880E80920681192B0BAA904DE0F8D xmp.did:6490d48d-c31f-4ebc-acc6-cfd7be4c8331 xmp.did:6494CD194F206811871FCD2199AD167E xmp.did:64c94a59-b391-44ad-af80-e587561ac0c1 xmp.did:6515EC6E98206811994C86814C2F3017 xmp.did:652528f5-8410-484a-86b9-5d603f43220d xmp.did:653E4C94DD2068118F62D27A6BCE2F0B xmp.did:6556E202F593DF119A5FD5DDEFA91743 xmp.did:659F34731BCDDF1191BD97C1AE6A08AB xmp.did:65AD316CD3AC11E386CCA958D368DB51 xmp.did:664D5C459C7711E08A9C913C073A663E xmp.did:66562D8A30206811822AF66E54970861 xmp.did:668880E80920681192B0BAA904DE0F8D xmp.did:66BCB3B7EAB9E011AEBCBCB1E3A15768 xmp.did:677E60494F2068118DBBE52260A278CD xmp.did:678880E80920681192B0BAA904DE0F8D xmp.did:684f4e76-c08e-4b79-adf0-584e4a57723d xmp.did:6859A8AA4C20681192B0C49A4A67C7CB xmp.did:686F8DB85887DF118D5AB7C516625507 xmp.did:688E066C4B206811963CF2F523F9A511 xmp.did:689B1DD297D5DF119648F8511B7417D3 xmp.did:6966F9529C23E011BDF9E30C5CFEECDF xmp.did:69A1217ACDA4E0118A47F95ACDE595C5 xmp.did:69A65820F6C811E2A62AD2E2041CAECF xmp.did:69A9A55BC9A6DF11AE8AB958AB480A25 xmp.did:69B2F9191F20681194578A02E8C9B59B xmp.did:69D3304B192068119109B5CB68862886 xmp.did:69DFAA100F76DF11A108D32BB22A5149 xmp.did:69EB434F302068119109B3CAEE51E0B6 xmp.did:6A15AFA28B206811871F8DE1CBDF9EB0 xmp.did:6A284E091A29681192B0D53FF790F85B xmp.did:6A47007B82A4E011A4FEE67DFDD7FB36 xmp.did:6AD2DD1426CBDF119207FF631E313C1E xmp.did:6B43DD71B9D011DFA897EC2DD419EB70 xmp.did:6B8EAC218FAADF11A652A0B41163863A xmp.did:6B9AFF6520DADF11AD2BCBF19C02F98C xmp.did:6C1D4CFBD8C8DF118849E21764796AE8 xmp.did:6C7D9E1E74B211E0A792FB6CA6498740 xmp.did:6CAA2255CF57E0118F61ABAA1281E4E0 xmp.did:6CDE07D55E20681198E99BCF30868C79 xmp.did:6D338F201F206811822ACA95E12BF7F8 xmp.did:6D8043D4C4B4DF11BDAE8F5B97ACD684 xmp.did:6E282DCA7F17E011B0739866E9AD0C81 xmp.did:6E5DCB84DD84DF11959BD5D75F631BF3 xmp.did:6E7CD2CED77BE011A60BCDD5CBCAB985 xmp.did:6EB467F81B3B11E5AB018758F251DAEA xmp.did:6F7CE6A31721E1118765862BA9D105CE xmp.did:6F909C1D0679DF1191F3A75249221146 xmp.did:6FAD2A5D0E20681188C6D9C4D0AF0270 xmp.did:6FBBBEA6CE6D11E3B964F01617F396C4 xmp.did:6FBBBEAACE6D11E3B964F01617F396C4 xmp.did:6FD5EA4F4D2DE0118D4EDB8E509E5254 xmp.did:6c209711-5114-49f7-9ccd-792daa04099c xmp.did:705B30E088F611E083F782CBB1D50FB1 xmp.did:7089C6CFC8B5DF11820885489254C0E7 xmp.did:70A31406DF206811871F81E8BB0F82E6 xmp.did:70af1195-8f61-4845-aad0-3c303864f33b xmp.did:70d4096e-f330-43e2-bb49-1fbe0afc3203 xmp.did:715B6B1C6769DF11AC0B9029853F0D1C xmp.did:7162A10113206811871FCD2199AD167E xmp.did:7178548E489EDF1187848A377019B2B6 xmp.did:71F3689C2684DF11BE9C97E674CD6B1F xmp.did:7360C3BF8D206811B6999C6B4BE18F8F xmp.did:738BF5DF1DB7DF119EECA0468586188F xmp.did:739D7E9FEBADDF11AADEADA356222083 xmp.did:73A58A64E19ADF118809A899D2C676CD xmp.did:73A85C6F97AADF119ECEE92B8D5FFE89 xmp.did:73B57231C3E9E0119FC8E3CA42FCF1AC xmp.did:74117FB120071168B481EDE85718C1E2 xmp.did:74117FF720071168B4F2D4360359303D xmp.did:7437D61FD021681188C696DC609994EC xmp.did:746C7A8B6820681183D1E2F71EDF25EE xmp.did:74E80EED0B20681192B08E07D99F8A08 xmp.did:74a7c71e-810a-4a16-abbb-5bef4bf9c6ab xmp.did:74b909ef-08c1-4238-8951-dbea2a2cf66e xmp.did:74eee4b1-800e-4e68-904a-022d2b54d77e xmp.did:753b5dd0-30f5-4e4c-8129-a1b3df923b39 xmp.did:7557EACC8B6ADF1192ABF30689582EC5 xmp.did:757f1b56-96bb-4770-861f-1d565d790c2a xmp.did:75B38373C765DF119892ABF452BEFEB4 xmp.did:75DEDC25312468118B72DE2C6B104274 xmp.did:760712B247216811B18DC9DED6A2B0B3 xmp.did:7631A3109686E0119D98C2D90B3468EC xmp.did:76857F743F20681197A5E7B0831EA4A7 xmp.did:77058E810275DF1190AAD8563C512C0C xmp.did:770DBB164EB7DF118631F099F0298841 xmp.did:777A8B8D2CCEDE11AC1FBF9D231E361F xmp.did:777D08D09D85DF11BC7DDA87D3C599E4 xmp.did:77EC1A905B5D11E3B1C7893BF1DEEAD9 xmp.did:77FCDCFF0C20681188C6C677A3826B0E xmp.did:77FDA77EEECF11E3A68893F82EBF9E4A xmp.did:788200B33261DF11B38F998875CC8654 xmp.did:788AF58CDC9FDF118C00C3C968ABDC06 xmp.did:78E80EED0B20681192B08E07D99F8A08 xmp.did:798e4905-d3dc-4402-b2ae-6a3114b96d6f xmp.did:7A77A3E693CF11E1A2BAF8612686AF78 xmp.did:7A7A501C1F206811871FE0E4CB6C52AC xmp.did:7B043B7D7321E0119D96D946FB4715F7 xmp.did:7B29C0F54820681188C6D9EA900BA018 xmp.did:7B952E4BACC0DF1186F491AD5AAC3843 xmp.did:7BD2A7176C34E01183C188C0B0DA4CAA xmp.did:7C108D9715206811822ABD5623788040 xmp.did:7C6F110A13F4E0119A97C6F5F7FD5B9F xmp.did:7C7536BB1C84DF11BEE6C0DA556A121F xmp.did:7C8DC490E0226811871FAFE2B6937D3F xmp.did:7CE9741F22206811AE568088196B6FA8 xmp.did:7D3AEF6011206811822A84D82148E960 xmp.did:7D4E139D1885E011BD3DE9624629426F xmp.did:7ED8B1795443E411ACBAC8B0A8AA20C7 xmp.did:7F6D26F1E2FEE0119C6ABCC0BC7488E3 xmp.did:7FAC3751C37ADF11AA8DADEB2DA47FAE xmp.did:7FBFAB2ACFDBE1119E848C69D255D3A5 xmp.did:7b1a1f3e-c02d-ba41-b5c2-c62afca37f05 xmp.did:7b7a45dd-7651-40ea-ae29-c26cada712d2 xmp.did:7c7bd853-edde-484f-90dc-e65483eb429b xmp.did:7cfabb24-c3c7-c04e-93c7-85ef6d94efcb xmp.did:7fba7a91-fb31-4a8b-9ca7-a812d2d6c633 xmp.did:8059655B2C2068118F62CDC0FFB60C81 xmp.did:8078365AE76F11E18533F1ECFAB65801 xmp.did:80C93B4FEB3111DF9C439A7A28CCF362 xmp.did:80F094171D206811994C99F9498C6FC9 xmp.did:817089e6-f08d-4831-b1af-7c833d5f57f3 xmp.did:81709DB705A6DF11AA8DD3F0938E47C5 xmp.did:81BFAB2ACFDBE1119E848C69D255D3A5 xmp.did:81c6aae6-f8bc-4c76-a4f9-cfa7e58a3b71 xmp.did:82042E7F436011E38A2DE82E34B81DAE xmp.did:820E24D92B2068118C14B7428F978057 xmp.did:8210FDB3082068118A6DAF67FF497528 xmp.did:8268658773E011E29FFFAC7545964982 xmp.did:830B9C46982568119109AFE3CF4AF35A xmp.did:833C8CE42459DE11A76AB674739B3094 xmp.did:838372649821681188C696DC609994EC xmp.did:838BF2091320681188C6B205E89566F4 xmp.did:83B41E2DDE55DE11AD63CFBD010DF686 xmp.did:8422A7010E20681192B08E07D99F8A08 xmp.did:842F757B8120681188C688F5D09384AC xmp.did:84C76E5CA61EE0119B62C1A72CDDBB2D xmp.did:84C95075E3FBE0119B5AF02CBE935267 xmp.did:84F9021ED94D11E3B723F415BD0B9511 xmp.did:84b314ef-4188-4f4d-a057-d671f806be20 xmp.did:8534f6c4-83e2-4921-941b-2251e574d713 xmp.did:857f1ace-3518-42c1-a6de-85adaaf7f6d5 xmp.did:85CAF93392266811BEDC9678CA0435A7 xmp.did:85b3b39d-53ab-4a8b-8f2c-31884ab3ea8e xmp.did:861CB129116CDF11A081DAC65549FFF8 xmp.did:863d484f-441e-48a1-a1d0-5e34ad2efaa2 xmp.did:865B2D5F46236811994CB5207DCDF24F xmp.did:86689A063A84DF11B7728B0A61F1FF44 xmp.did:86740B880E21681188C696DC609994EC xmp.did:86FBC418F7206811994CCD5FF36C8C71 xmp.did:870225D20E94DF1195A5FC5C316CC418 xmp.did:871CAC41F26EDF118153B039D3F0E342 xmp.did:87716f18-62ca-418d-b2b6-d989cf911763 xmp.did:8788F14E3C75DF118146DA0537F7A65A xmp.did:87E33B19803811E09258D24CBD61FD3F xmp.did:87de0837-0e7b-4dee-a0c3-fd672518a529 xmp.did:88740B880E21681188C696DC609994EC xmp.did:889e1a56-12a0-4eca-8616-d4235c792cea xmp.did:88A1231164D711DFA6978521D60DF460 xmp.did:88C351403ED8E11186E3E883EB9255AD xmp.did:897DD97117BBDF11AD69B4E81D32B760 xmp.did:89C45F4A208ADF1195A9C4DC515AF3FD xmp.did:89DB88EE8521681188C696DC609994EC xmp.did:8A722F44B022681192B09858335F8E97 xmp.did:8A87C6C4B1256811A613F67E5B1E0C00 xmp.did:8B01E3417A20681188C6DC0217A7B5D3 xmp.did:8B90858FB573DF11BFBBF00759A3D452 xmp.did:8BD0CC8BD42268118DBBD37DD26DADFC xmp.did:8C8372649821681188C696DC609994EC xmp.did:8DB5E960F6C811E2A08E9D93423D18BA xmp.did:8DCE90B3748FDE11919ED00FF5C20F52 xmp.did:8E935AD20E206811822AA1DC23D37A5E xmp.did:8E966105F320681188C696DC609994EC xmp.did:8ECFD34D002968119109B2B3A61F48F7 xmp.did:8F144D844D71DF118E739F846C7A0E03 xmp.did:8F4DFE5AC221681188C696DC609994EC xmp.did:8F5B9AD42E6FDF119F97BE7F2627367B xmp.did:8fbbbaad-f0d6-483b-a9f1-1860702efc59 xmp.did:90088337-e2e7-408f-9dd5-220567f2dad5 xmp.did:90460DA107206811994CB21D629ABE7E xmp.did:9055651CDAA4E01197A1A65F7AE4791A xmp.did:90C5D5266479DF11865CEEF09851FD79 xmp.did:9192FF6B0A4CDF1187C0E54B36521B89 xmp.did:91CE90B3748FDE11919ED00FF5C20F52 xmp.did:91D03B52A2C5DF11AD408D720C5A42C7 xmp.did:91DB88EE8521681188C696DC609994EC xmp.did:91FF051E0FD3DF11B2D1C51F59B5FB29 xmp.did:91d21d91-b757-48b4-b71b-a4f1fb35b2d2 xmp.did:91fc3504-a53a-46fd-b08e-1b39c9cff4c4 xmp.did:91fe4aea-c4e0-45f9-b15f-3577caf2638b xmp.did:92966105F320681188C696DC609994EC xmp.did:929c2731-3682-4018-b34c-4b90f3ec60a7 xmp.did:92B423E31A2068119109BCD3F23227AF xmp.did:92CBBD15D6206811A7BAB1FC45DDAD2B xmp.did:92E577500821681188C696DC609994EC xmp.did:92ef1c75-2916-4d7a-aec4-b13eb129d35c xmp.did:930DD8B928206811AFFD97A6A7E489B5 xmp.did:9385C897D95211E3B723F415BD0B9511 xmp.did:9385C89BD95211E3B723F415BD0B9511 xmp.did:93FAD7BD4C93DF11B9BF94572601ECC3 xmp.did:93bdd041-ae6e-44fd-b447-0f1b314de54f xmp.did:93fec413-3e11-4859-b743-2332af451e0d xmp.did:944A847A363B11E0AEB2FFF11F63D948 xmp.did:94658B6B3B206811871FDB7C73EC7AF4 xmp.did:949699d7-a647-4e9b-90a1-c4b44dae5424 xmp.did:9497763E26ABE011979696CECC20A286 xmp.did:954ae280-03db-422c-a28a-29691775173f xmp.did:957009A6C00011E291F6EB2660C7765C xmp.did:95A96A28F3DAE111A7AAA5DE6EB18B89 xmp.did:95B2C65AB684E011ABCFE78D83B50568 xmp.did:96591BA8B7E2DF119A52D83C080E6159 xmp.did:966211F0849DE311A362F860C911E973 xmp.did:967DD1DC2B34E011B6CDA8F0B2C213CD xmp.did:968CEE49372068118A6DC2EB5CD0A707 xmp.did:96C81ADD14236811AF6F8C15B6994DA7 xmp.did:96C8249C6FFADF11B295A881C3F5AF4C xmp.did:96b55f72-56ef-4c13-a29b-16d4eda9cc8d xmp.did:97016BED3A20681192B091EEB36552A7 xmp.did:974F886B00A9DF119C94CF7A781D0A2D xmp.did:9785BA49DBDADF11B163E9831471534B xmp.did:97EFE3A2DA7DDF11BC71ED75BCF4EA9D xmp.did:97F116215543E411ACBAC8B0A8AA20C7 xmp.did:9809CC33375311E1BCA7FF7E89EBFB18 xmp.did:98135185D3AB11E386CCA958D368DB51 xmp.did:9820FC9513F811E1A40CFEBA1E6C2E7C xmp.did:98669ECF0990DF119F568672A8786DF1 xmp.did:98759349A621681188C696DC609994EC xmp.did:9879D113312068118C14AD0DD37041BA xmp.did:98C912840720681192B0E6C15935B3CD xmp.did:98E3903835216811910993DFFC667F27 xmp.did:98d9efcf-ce62-4bb8-8d06-3b4b9cda55df xmp.did:990D52F555A4DF11A011890C5D1FE9AB xmp.did:992CEF020B2068119109FEECB06854FB xmp.did:99343A4732206811871FE8DD2340C0B0 xmp.did:9979834A5FD911E4947BFBEB3398C5D7 xmp.did:99EF8767206EDF11B63BF1499E01507A xmp.did:9A1D8A08015B11E6B352F5CFF0CD2D86 xmp.did:9A759349A621681188C696DC609994EC xmp.did:9A8FD6619B3CE2119925D9CC22BAEF70 xmp.did:9AA38CEA410F11E49348C85EF9F80133 xmp.did:9AA38CEE410F11E49348C85EF9F80133 xmp.did:9ACD98F7A9DFE011BAC7F7CD194FE1BE xmp.did:9B0BC90E76B4DF11A365EF5257762381 xmp.did:9B26BBFB24A5DF11A00EE84FFD87A888 xmp.did:9B4613316923E111B8D9F5BDE94825E4 xmp.did:9BA7F226682068118A6DD5C0BEC857B4 xmp.did:9D94B355F97CDF11BE2EDEEAF296B240 xmp.did:9DEED1530021681188C696DC609994EC xmp.did:9E5A44A108206811871FE8C12D95F69C xmp.did:9E7D607C4F216811AF5C82C8D4EEE19A xmp.did:9EA1AF2B9358DF11BB73AF92DE6846CC xmp.did:9EC912840720681192B0E6C15935B3CD xmp.did:9EF7D92FC392DF11AED6A59B0EF71149 xmp.did:9F0DB4308482DF11A6AEEBE23E9BEBF9 xmp.did:9F2C9CACEE0AE11186C29F7E56C3BAA4 xmp.did:9F69ACC07283DF119FE5FBE38D204F69 xmp.did:9F733AEAB8B411E39E72C7442E862A9E xmp.did:9F81F57A772011E38203DAB3587DBB87 xmp.did:9F9716288B82DF1185A395B3CFBAD26F xmp.did:9FC37120F666DF1186D4EE722C1471DA xmp.did:9b9142f1-cc3a-4c2c-8d44-c82968d9d5ac xmp.did:9be9418a-fc5a-434a-86b4-5f05abdc8cd3 xmp.did:9ce8ef02-0a77-48fb-b62c-0f2ff8885e15 xmp.did:9d36a129-1d2b-462b-ac41-d95216aa3aeb xmp.did:9db059e1-a1a4-4bbd-8cfc-838a4796835a xmp.did:A0397E10064FE011A157DCE09D412734 xmp.did:A0546D104BC511E0B78A85AD4FD2359F xmp.did:A0A6AE25202068118A6DACAAA4DD6020 xmp.did:A0AFA84FD870E011B557BFCA0CAA97BB xmp.did:A0CA2C60F77CDF119847B4724B0BFE4A xmp.did:A103939E0067DF119601B88E9DA8851B xmp.did:A18D0473D95711E3B723F415BD0B9511 xmp.did:A18D0477D95711E3B723F415BD0B9511 xmp.did:A1B1F13FAA68DF11A928FB1399AE98E4 xmp.did:A1C5E8639820681188C6A894A1D908BE xmp.did:A1EAE66D312068119098A37C55994CC0 xmp.did:A2129843A068DF118B32AE5CCDC517B0 xmp.did:A23DA5AAD6B1E011A5629C3693D5C0CF xmp.did:A26263210D20681192B0B59A26F7999F xmp.did:A279E2A6FB206811871FAFE2B6937D3F xmp.did:A2B299F0726FE0118AC58FDA9DF5DA7A xmp.did:A2F5C5F1E5CBDF11AD7D9A1023BE16FD xmp.did:A302FB09E9E5E111AE28D5B57113CA49 xmp.did:A32C2CD40D20681195FE95EF7EFE3E6E xmp.did:A3501E239D2FE011A325D07E052CB137 xmp.did:A3F4D7821620681192B0C5319CB69C7C xmp.did:A41B25DD19206811871F850BE2F5A6A4 xmp.did:A427431973EC11E0A792FB6CA6498740 xmp.did:A48499331620681188C6D9EA900BA018 xmp.did:A48D36A70E206811822ABFFA029D9A53 xmp.did:A491E44BE6EFE011A72BC4DCA77C5A48 xmp.did:A4EAE66D312068119098A37C55994CC0 xmp.did:A511B8AD212068119109C4FC82D5C1CB xmp.did:A5F0B1A348EBE0118A34ADD00EBCF069 xmp.did:A611B8AD212068119109C4FC82D5C1CB xmp.did:A628AAE1CB4DE0118CCDBF34AD86A220 xmp.did:A688D3B59AC6E011A93D9F61069A0227 xmp.did:A6B9D224C11CE011B00CB478FFB6570F xmp.did:A6C24E1BF5C3DF119F6D9BF4B2FB596D xmp.did:A6C6277E1C89DE11A849D901E441D0B0 xmp.did:A71EFD38674611E0B11CFCFE975F1DDA xmp.did:A76284634342DE11A80EE69CCE097674 xmp.did:A78499331620681188C6D9EA900BA018 xmp.did:A7E473D0DB77E011A72BB337603AD007 xmp.did:A806C3667DA0E011A4FEE67DFDD7FB36 xmp.did:A80A9CE5B121681188C696DC609994EC xmp.did:A817C161BFA411E08C7396F5C0DD6D7F xmp.did:A8378A1336A3DF119EE78D38E30AAF63 xmp.did:A83A97962E2068119109C80A4C3147BC xmp.did:A8ECE7294820681188C6E275F11AA5DE xmp.did:A9015082CA81DF118F2FE26B234B7BDB xmp.did:A9147BD8EED011E3A68893F82EBF9E4A xmp.did:A9147BDCEED011E3A68893F82EBF9E4A xmp.did:A9432DF857F7DE118BE884B676DB25DC xmp.did:A947F2DB1A2068118A6D83BDDADBE6EE xmp.did:A94CCF581D9EDF11A8B8A0A95695001C xmp.did:A970ACC1CC7ADF11B9F0DA7869A92B3C xmp.did:A97AF85358A911E4AEAF9FB1ECE68C24 xmp.did:A9EA192F292068118DBB82DD622598DD xmp.did:AA6C5F82AE206811B840E00E6A4F6FDC xmp.did:AAC6B9E41120681188C686C8126EE38B xmp.did:AAE768FF8D6ADF118290CBB94C5CF4F0 xmp.did:AB074D2D0F9DE011B929E56A1DD8643C xmp.did:AB7E99DDA5D3DF1184108A6DF5F8799A xmp.did:ABEA7084A54911E28D488651D913521F xmp.did:AC5F7C2C5D206811B4F2BD4D6AD5D039 xmp.did:AD118B0104E4DF119190888724FA0B17 xmp.did:AD3EC8405BD7DD11BB868C2AA5A2BC91 xmp.did:AE56BBAE674611E08C1080A888ABE241 xmp.did:AE9ABA76FAC8E011A72BDC489F5B89F7 xmp.did:AEEFFB4525C3E011BEF0A37AC8AFF6B8 xmp.did:AEFF010E2F4CE011A153D2BF7C2CEB4B xmp.did:AF1C9A5AAA85DF11ABA2F8AC116D144C xmp.did:AF223C4E7ED7DD1199E1B78BB722FF90 xmp.did:AF3F48E9A5C0DF118427E32E6F9EFF05 xmp.did:AFA17C99DC9ADF11BE6DA116A213E6C0 xmp.did:B01C9A5AAA85DF11ABA2F8AC116D144C xmp.did:B01EADEA1DBBE1118C61C3FA7E29662D xmp.did:B03244C1C18EE011AB41D8FD6E7F1E9A xmp.did:B03E696E21C6DF11891AB4133B3B4FF4 xmp.did:B03F48E9A5C0DF118427E32E6F9EFF05 xmp.did:B05F7C2C5D206811B4F2BD4D6AD5D039 xmp.did:B0A17C99DC9ADF11BE6DA116A213E6C0 xmp.did:B0CEA8BF16206811A961D90CEE83FB59 xmp.did:B11D360C25F1DF119445A5FD895D781E xmp.did:B13F48E9A5C0DF118427E32E6F9EFF05 xmp.did:B1854DB6AB37E0118B3D9D759656F948 xmp.did:B1EFFB4525C3E011BEF0A37AC8AFF6B8 xmp.did:B22E72991EDFE011BAC7F7CD194FE1BE xmp.did:B251B6060EFDDF11B2E3C4FD4894A392 xmp.did:B28B606385C6E01185BED54A95B1630C xmp.did:B326D72B98C4DF11BA82AFFFE558943D xmp.did:B32FDAC0E179DF118258FA780635A3B5 xmp.did:B36A57361D06E111A37E86E77136C1FE xmp.did:B3FCE625EDDAE0118842B29FA6343094 xmp.did:B4112076BF4411E386679C70E86EA2E5 xmp.did:B4128E3D168F11E8A8B4AB71B246FC49 xmp.did:B43A9BE516B9E011AEBCBCB1E3A15768 xmp.did:B505585B4720681188C6D9EA900BA018 xmp.did:B56CF5C7B576DF11A6C5E659E3C24751 xmp.did:B5A517ECBFE5E1118B99A97503504C1B xmp.did:B64468DD2020681192B0FB3680825E28 xmp.did:B66B14327664E011BE41B15A6A029915 xmp.did:B6936E01CE9DE011AF4CB0B3AD39C76D xmp.did:B6DB0B007C20681197A5FEC97E293B54 xmp.did:B6F2711BBEBBDF1196F5B44D3A9BD6F6 xmp.did:B705585B4720681188C6D9EA900BA018 xmp.did:B7303852DC5011E0B192AB8A8597E6C6 xmp.did:B7D06549DF206811871FEC7C962926E4 xmp.did:B82000B6140111E1A40CFEBA1E6C2E7C xmp.did:B8E56917B9E111E3ABE2D11311E99E47 xmp.did:B956EA72157DDF11A762EA67B35A3A50 xmp.did:B9B62FFA50E011E6AFCDA0A379466C71 xmp.did:B9E0E3DF5AC1DF11A3EFE179F6D6326C xmp.did:BA2334AEFD53E011A54D9507E0E8BC34 xmp.did:BA903E531C226811B840E00E6A4F6FDC xmp.did:BAC74A767A3BDF11B81DE3CAC7B760A2 xmp.did:BAE948E4A421681183A2BC64D6373250 xmp.did:BAFCE625EDDAE0118842B29FA6343094 xmp.did:BB1625B78953E011A54D9507E0E8BC34 xmp.did:BB1EFE7EE89411E199CDB81293A4E861 xmp.did:BB251EF6B780E011BFF8C28A70355E3A xmp.did:BB3565E81520681192B0BAA904DE0F8D xmp.did:BBDDB312AB206811AADAE549D6335493 xmp.did:BBE0CFA2B12068118F62B83BB8D9B324 xmp.did:BC14929B7521681188C696DC609994EC xmp.did:BC806AC3DFD7E0118AB9ECA40DAC3FF4 xmp.did:BC9B22EE162068118083B78A909B2B11 xmp.did:BD14929B7521681188C696DC609994EC xmp.did:BD6B1DE20174E01192F2D8B5008E758A xmp.did:BDAEF7BB77D8E0118842B29FA6343094 xmp.did:BDDDB312AB206811AADAE549D6335493 xmp.did:BDF5E82F5C8E11E3860F86CC154C435F xmp.did:BF7C797A9EA7E011B01BA4DFDBC23FA5 xmp.did:BF7D2A4E6B20681180838A5305120603 xmp.did:BF9B22EE162068118083B78A909B2B11 xmp.did:BFD75184AE21681188C696DC609994EC xmp.did:BFEE07671679DF11BF16EB2A5B8EF2F5 xmp.did:C03040BFDF90DF11AE82CBA880F138F9 xmp.did:C074A85E06F7DE119CCA8227581679DF xmp.did:C085439615206811871FE459E5C10885 xmp.did:C0FD116F32B4DF119015EEA538A57654 xmp.did:C12C2402E064DD11AE6AB030FE2B7C4A xmp.did:C16B15488B21681188C696DC609994EC xmp.did:C171A559816CDF11A2B8F7F28FA5F41E xmp.did:C1A9DF14DE9CDF118817EBE6E8614D49 xmp.did:C1F456B1E5F0DF11A0DC84A10DADEBAB xmp.did:C1F748A95921681188C6BD0FAC4EC9BB xmp.did:C23565E81520681192B0BAA904DE0F8D xmp.did:C2357421C80D11E3AF95A6AFAD73FC0F xmp.did:C26C0D495267DF11B2E5C8CA2A20B501 xmp.did:C29C58B9EBDADF11AF20E3D3A3FCE87D xmp.did:C352DEA1D19811E0962DB379077AA33A xmp.did:C373CEC0362068118F62D0F7010AC02F xmp.did:C3879883AF68DF11B9CDD6FAD7E08F21 xmp.did:C3DF71CEC693DF118890FA7A1AFD48D5 xmp.did:C3E99553BA2BE2118052DF928F7D1CCC xmp.did:C4E497A90E2168118C14FA1855B85E45 xmp.did:C4EC4E6211206811822AD32BDFD9072C xmp.did:C4FC67017786DF11BCB7CF116AE8003D xmp.did:C53485763605E011B0878B10470BE98C xmp.did:C55616750186DF11B7F4F2E81879E1EA xmp.did:C57F117407206811AE56F9DF145DFB90 xmp.did:C597C9E96B86DE118E3ABAA4690EC045 xmp.did:C5A9B2DBEF6EDF119FD9CF989D3E3327 xmp.did:C5D75184AE21681188C696DC609994EC xmp.did:C63FF4266321681191099CDD19712E64 xmp.did:C66C0D495267DF11B2E5C8CA2A20B501 xmp.did:C69C58B9EBDADF11AF20E3D3A3FCE87D xmp.did:C6C8F0BDEECF11E3A68893F82EBF9E4A xmp.did:C6C8F0C1EECF11E3A68893F82EBF9E4A xmp.did:C7110E5F5076DF118E61ACD179D06244 xmp.did:C73A523D1846DF118065D80F7B596DE4 xmp.did:C7606959EF9ADF11B4EFDFB461354BB3 xmp.did:C7C638916518DE11B253B453F89B7F8D xmp.did:C7D3B3F1256EDF11ACD680CBF3021A80 xmp.did:C7E5F38D830EDF11AD72E43AD91B55C7 xmp.did:C8656C4D0C20681192B0CF50B4F61303 xmp.did:C885439615206811871FE459E5C10885 xmp.did:C8941789B89CDF11BE6CAFA802A456BE xmp.did:C8C3AD0F9810E0119E3EED6DA52BB020 xmp.did:C8D94497193FE011BCB2EBD6700DA6F2 xmp.did:C909572C0E6011E4B3D8C891054E1CF7 xmp.did:C96ACE01EED011E3A68893F82EBF9E4A xmp.did:C96ACE05EED011E3A68893F82EBF9E4A xmp.did:C9C04586BC53E0119D3985FB4A82845E xmp.did:CA8B034392216811AB65A20D70355B6B xmp.did:CA949CCAAFCCDF11AAA5ECB36CFA01C9 xmp.did:CAA5BA052300E2118295C79BA4470A1D xmp.did:CAA83FFC05216811910987CF0230F4F6 xmp.did:CAB26B3347BFDF11B227F22ACDD3F69E xmp.did:CAD23720A27DE011B2AAA058498F3016 xmp.did:CB5BBB441A2068118083EE03884A9181 xmp.did:CBCA914B2520681186C89F4E62C56BFC xmp.did:CC233AAA1220681180839CE599C3AD30 xmp.did:CC4AB591A7DCDF11BF79FA62B51DF6C7 xmp.did:CC8A58E60485DF119E76E7636820EF3E xmp.did:CCB3A3B94A21681188C696DC609994EC xmp.did:CD2AF5DCA5C4DF11BA82AFFFE558943D xmp.did:CDB3A3B94A21681188C696DC609994EC xmp.did:CDE88BCE4B6FDF11B218B00D847DC297 xmp.did:CE58F6CF24A011E19E12B87F7C1C15CF xmp.did:CE5B2DDE09206811871F80851E6F0846 xmp.did:CE807746834D11E0B62FB7127DA0FEAF xmp.did:CEBB36FD0589DF118615C275FFCC7025 xmp.did:CEDD717E815111E084CF9208B3BF176F xmp.did:CF05856847206811AEE4ECC20A5D0880 xmp.did:CF3F332AD7A9DF11AC39BE02CF1C80F7 xmp.did:CF601DFEFE66DF11ACF78D476F7BB0FE xmp.did:CF6CE817B11111E0AC97A4937EF856CC xmp.did:CF86029F01BB11E5BC51CE5E25ACFA9D xmp.did:CFAA5C072E6EDF118038F278E5086123 xmp.did:D0385D898772E0118C3089D479022CBD xmp.did:D03BB0CD3020681192B0FCE0C044093D xmp.did:D0A7CE91808CE011A0FC932931B9D7E7 xmp.did:D0B31BC50D206811871F81B8681E3F37 xmp.did:D113248AE42068118BDAECB4C7294005 xmp.did:D217B386CF51DE118702BAC19059DE69 xmp.did:D2A5FB7B86B9DF11AA3BA55E040BBAE4 xmp.did:D3493E7C9FAFE3118134AF04456D1637 xmp.did:D36DB02BEF23E011A709EE79085E3A92 xmp.did:D37F28B4769CDF11BAA9CCE927B324B6 xmp.did:D3A14E935A96DF1187F7DF5481F4A965 xmp.did:D3ADAD082E206811B39FA8DEE65FCF6F xmp.did:D3C068EC2321681192B0ED941B81D256 xmp.did:D3D399022320681191098A39F9B5A384 xmp.did:D4054EC11920681192B0BAA904DE0F8D xmp.did:D47D2FA6C9CE11E0B03095BF7204432A xmp.did:D58C284B1638E0119CCBC45B8A98BC1C xmp.did:D5D9C4ECE5BDE011B0BBD5E3244285CA xmp.did:D608018C282068118A6D94CA2FB9BD94 xmp.did:D63D7474D95211E3B723F415BD0B9511 xmp.did:D63D7478D95211E3B723F415BD0B9511 xmp.did:D68D999C3F8CDF11B66E90703A16B40E xmp.did:D695B6854387DF119254F6070AE162E5 xmp.did:D6C86C40B72068118C14FA1855B85E45 xmp.did:D7176B6D58E0E011B95EDA3E835E31DF xmp.did:D7200B25316ADF11BBDBF2B8175EFA10 xmp.did:D736F40B6EEBDF119CE89B15806AEDB9 xmp.did:D76FEA384729681188C6BE54CC59F542 xmp.did:D7A082228321681188C696DC609994EC xmp.did:D7DC109ADA7711E18008A73DB89C9480 xmp.did:D8493E7C9FAFE3118134AF04456D1637 xmp.did:D85DB58C20AAE011979696CECC20A286 xmp.did:D883D4C80775E011B3C9FB563EB9BBC3 xmp.did:D89A4E700E2068118083D158918C2014 xmp.did:D8C86C40B72068118C14FA1855B85E45 xmp.did:D8D3659C0B20681188C6D9EA900BA018 xmp.did:D8EAD0270190DF119D54C83BEE2F45FD xmp.did:D955F1B2982D11E3A5E6C5BCA1E0549C xmp.did:D955F1B6982D11E3A5E6C5BCA1E0549C xmp.did:D9A628947F21681188C696DC609994EC xmp.did:DA30AD8C12206811910989406DF36966 xmp.did:DA67C380402068118F62A588B3F859EB xmp.did:DAA1D198ADB6DF11BCFD93E76A0DC2F4 xmp.did:DAA6D3734E8BDF118B119F0373947DAD xmp.did:DAB2A2F9FB76DE11BAF5E143B0B86FF1 xmp.did:DAC8507854D5DF11A094DF01E6EDE320 xmp.did:DB00867DC148E211975BE3F01A671811 xmp.did:DB1E4C1CE87ADF118CB7FEA7CD74D35B xmp.did:DB6BC860392168118F62F638EA26DDDD xmp.did:DBF226EE2D81E011A575FF8823ABA620 xmp.did:DC00867DC148E211975BE3F01A671811 xmp.did:DC4F4822108DE011A1C7E8C95E0A5A44 xmp.did:DC74AD2D0C206811B1A4827FBE321FD6 xmp.did:DCB8AF313C0EE111B603C0FF5EA39F70 xmp.did:DCC0E10A1F95DF11B30EEA8B8FA3A1BD xmp.did:DCC1853A3A216811AEE4ECC20A5D0880 xmp.did:DD32ED4CC05D11DFA520AC9F675C5341 xmp.did:DD368857CBB5DF119943CE4CD4010D9B xmp.did:DD5331D43C2068118F62CC84EB2E7047 xmp.did:DF214730312068118F62CC84EB2E7047 xmp.did:DF5331D43C2068118F62CC84EB2E7047 xmp.did:DF899B466140E011AE5DE74C62F0E7EC xmp.did:E02C190E426EDF11B24DE908ACCAC095 xmp.did:E06F786DFCB1DF1198DFB20F90D3AA6E xmp.did:E0DC5C40852068118F62D27A6BCE2F0B xmp.did:E18B6B7881AFDF11A99089F1760612D8 xmp.did:E1B8D0AAE3FA11E38CC9D5595BEAF65A xmp.did:E2387CA9092068118A6DD7606065F06D xmp.did:E2421EC8A62068118DBBE9BB7FD2A0C8 xmp.did:E280A3466FC011E29171A4C81E509EF0 xmp.did:E2F26FF45DBFE111B99DF8E76F9ABF74 xmp.did:E2F3B2A11E2068119109C04F2B24B753 xmp.did:E30E4902BACFDF11B14EED88D48A12C2 xmp.did:E31FFC57541211E0BD2AF927F2DB9596 xmp.did:E33EEECDC9F8E011A452DB8AC9648D02 xmp.did:E36553242020681192B0876F326BD696 xmp.did:E3F584F9B67ADF1194A0FF2706F6F138 xmp.did:E45B1F7407206811808388114929D8F7 xmp.did:E5058D4E9E2BE0119DFC94F68E9FB408 xmp.did:E589A9A91D2068119553C5952A36A291 xmp.did:E5A1D987CA76DF11BDA3DBFECAD00321 xmp.did:E5A1EC372220681198A7E8A9FC75773D xmp.did:E5DFB25B5E93DF11B775B1FECE385471 xmp.did:E5F40B46DD64DF11AEF4E21B49241302 xmp.did:E61653204488DF118E8FBD716AC90F65 xmp.did:E6214730312068118F62CC84EB2E7047 xmp.did:E6C74BF40B206811BEDCEC12B17E052F xmp.did:E6EEAC66382068119109E4A43CE530D0 xmp.did:E7041F041F0F11E084C9A70103495335 xmp.did:E747C0F80F65DF119A94C5D8D188955B xmp.did:E794078DDE64DF118A53D4EFE20C3518 xmp.did:E794CE25B973DF1191B9CE602E6BB3B6 xmp.did:E7DD52641A19E01195F1BA474F2C0BAE xmp.did:E7EEAC66382068119109E4A43CE530D0 xmp.did:E7F9FCF120EBDE11A1BEB9F496284AD8 xmp.did:E83E8B283232E0118EE68999D946CEB1 xmp.did:E85300598D7711E1A969B5EABEEE44AE xmp.did:E853005D8D7711E1A969B5EABEEE44AE xmp.did:E8C1560E9217E011AFFBA65419AF10CB xmp.did:E8F5DDBCEDB0E01191FFBD2DD96ABF07 xmp.did:E96C3ADF2244E011A2C2D0B0B92C7727 xmp.did:E9710C1D002FE01195828DEEC618B761 xmp.did:E9785F9708206811B3A9FA077BBC5C96 xmp.did:E9D7FE3B4D2068118083F286C739C2F9 xmp.did:E9F8E4BCC421681188C696DC609994EC xmp.did:EA1653204488DF118E8FBD716AC90F65 xmp.did:EA92B2569ED8E0118842B29FA6343094 xmp.did:EAD2576A0D20681192B0FEBDA93E3C72 xmp.did:EB9D13B8007C11E0A51DEB87967C265B xmp.did:EBBC33283587DF11A9B59A85CDC63B16 xmp.did:EC4577EAD95711E3B723F415BD0B9511 xmp.did:EC4577EED95711E3B723F415BD0B9511 xmp.did:EC4577F2D95711E3B723F415BD0B9511 xmp.did:EC867B3F342068119109909B64798A91 xmp.did:ECBC33283587DF11A9B59A85CDC63B16 xmp.did:ECD989D5DF71E01186C4F2433814AC76 xmp.did:ED3F8071C82BE011A5AEDC8A542D4786 xmp.did:ED7F117407206811A229A9B2F7593D2E xmp.did:ED7F117407206811B28C859639FD65E0 xmp.did:EDBC33283587DF11A9B59A85CDC63B16 xmp.did:EDC32884E39111E3871CC8AF014EA9E2 xmp.did:EE060BC9B174DF11B6A78A06DDE30A7A xmp.did:EE162A984C16DF1185C38799BDF561B5 xmp.did:EE4797E22F2068118A6DCC490C993EBF xmp.did:EE7F117407206811994CEB8550425B9B xmp.did:EEC1560E9217E011AFFBA65419AF10CB xmp.did:EF0008E2E40911DFB5AAA6008D4E8DB8 xmp.did:EF6A4F201276DF11835BFF306497DEF1 xmp.did:EF8441C065E7DF11B8ABBBF7FFA6B0C4 xmp.did:EF9052D3D4A9DF118931ECF643331B58 xmp.did:EFC9D1D477B0DF118B43CF67BE3C9F7D xmp.did:EFF15E658C98DF1180DDD7788799ED24 xmp.did:F020252D40206811871FE8DD2340C0B0 xmp.did:F04D35C642B8DF118CEA9E52E1D0FAB8 xmp.did:F0B555145168E0118B1385B28F882E94 xmp.did:F0DAAAA83D216811994CCD5FF36C8C71 xmp.did:F130F0727B20681192B0D8368D31C23C xmp.did:F178F87B86206811BEB789E23D201984 xmp.did:F18F93CC6279E011A4D3C40ADA3B0913 xmp.did:F1C1092E02C2E01185C6B675C312A0F3 xmp.did:F1D362B2D95411E3B723F415BD0B9511 xmp.did:F1D362BAD95411E3B723F415BD0B9511 xmp.did:F1DFFA2E18206811871F907425105573 xmp.did:F25C8AF19B2068118F62908DFC3878E0 xmp.did:F27F1D69DCB4DF11967FD6EFAD51B757 xmp.did:F2D9C097D12DE011A4C39FDDCFC91B6D xmp.did:F339E1094FA4DF119AECC39D7F6EF22A xmp.did:F348C3CCC40CE011972FEB89052F1F93 xmp.did:F3490D2C1921681188C6B7868B1364E8 xmp.did:F4234241982F11E3A5E6C5BCA1E0549C xmp.did:F448ACD9E584DF11AE5F9A1AB65AB8F9 xmp.did:F47BB6CB2184DF119DC797D7DDC2CBB9 xmp.did:F4BE07503650E01188FDFFA22DD2E1BF xmp.did:F5391247221711E398FDD4FF4D8F6C2D xmp.did:F55BCF3A664B11E4AD3BD6FD3A1D5618 xmp.did:F5A5431B1C20681192B0CE6ADEACB302 xmp.did:F5C288EE8C58E0118A6CFA0D378051C3 xmp.did:F5C8BC0C144FE011936EB904A6390C15 xmp.did:F5C949D4FB68DF11BB279F98F067360A xmp.did:F5CF8E2D7490E0119A18FB12BAA81907 xmp.did:F5F3271861E8E011A8B1E233584C880C xmp.did:F6164B44C880E011949FAF220FDE3616 xmp.did:F65398EE0B6AE011A161A7FE0780063A xmp.did:F65EEB8B6B2068118083AC546C0EE525 xmp.did:F661D9FA8775E011B17A9E22BEA99AB9 xmp.did:F6CF60380D21681188C696DC609994EC xmp.did:F75D918A1120681192B08BEE29C75DD2 xmp.did:F76097E97542DE11BDF28198A8779061 xmp.did:F772D2CE65A9DF11ADEB824D3C625F58 xmp.did:F774F9FDDA206811857EF51D78886996 xmp.did:F77F1174072068118016E3CF38EC96CC xmp.did:F77F1174072068118083E4E575C04EAB xmp.did:F77F1174072068118083EB83C62BD7C1 xmp.did:F77F117407206811822ABEBF2A74928D xmp.did:F77F117407206811822AC533F6451E4B xmp.did:F77F117407206811822AF7A8CC7F96A3 xmp.did:F77F1174072068118603B4EB98C19FD1 xmp.did:F77F117407206811871FAF8B0949E228 xmp.did:F77F117407206811871FD6C6B3A51DD0 xmp.did:F77F117407206811871FE2FFC5A15DAA xmp.did:F77F117407206811871FFE96F47936D6 xmp.did:F77F11740720681187C4C63AF347C9D3 xmp.did:F77F11740720681188C6B07CC95C0538 xmp.did:F77F11740720681188C6D81FB348BB42 xmp.did:F77F11740720681188C6D9EA900BA018 xmp.did:F77F11740720681188C6F83C91933163 xmp.did:F77F1174072068118A6D90E1FCEAAC55 xmp.did:F77F1174072068118A6D99D68D2699F7 xmp.did:F77F1174072068118A6DBCFF8FBBF0B9 xmp.did:F77F1174072068118A6DE0B41756505B xmp.did:F77F1174072068118A6DE34ED34FA875 xmp.did:F77F1174072068118A6DF43387500C21 xmp.did:F77F1174072068118BF792C16EE1E716 xmp.did:F77F1174072068118C14BD1CC6C0ACBB xmp.did:F77F1174072068118C14CD081E66E7E8 xmp.did:F77F1174072068118DBBA8F193EBC78B xmp.did:F77F1174072068118DBBDA7B868B1240 xmp.did:F77F1174072068118DBBF0860F7EDEF0 xmp.did:F77F1174072068118F42F1D8108024F1 xmp.did:F77F1174072068118F62FDBD9649A46B xmp.did:F77F1174072068119098A37C55994CC0 xmp.did:F77F1174072068119109862065E637A5 xmp.did:F77F11740720681191099FC0D5297C7D xmp.did:F77F1174072068119109AA3891E71C20 xmp.did:F77F1174072068119109B80DD3093C00 xmp.did:F77F1174072068119109BC552EB79E12 xmp.did:F77F1174072068119109C71CF6D9E2A4 xmp.did:F77F1174072068119109E626B4ED1C3E xmp.did:F77F1174072068119109F8FE27718D5A xmp.did:F77F11740720681192B0A1AA0B2EFC15 xmp.did:F77F11740720681195FEA4D474CEC3A2 xmp.did:F77F117407206811962A9056C938848E xmp.did:F77F11740720681197A5E94B7C2456C1 xmp.did:F77F11740720681198E99BCF30868C79 xmp.did:F77F117407206811994C8A8243CF6DD5 xmp.did:F77F1174072068119C12FCC73F11446E xmp.did:F77F1174072068119EB8F890500830B9 xmp.did:F77F117407206811A1AFB41E9D0EF6B9 xmp.did:F77F117407206811A961AB651AD759A8 xmp.did:F77F117407206811A9F8A44324AE3979 xmp.did:F77F117407206811AB088ED073FBA775 xmp.did:F77F117407206811AEE1E85804F1BC1E xmp.did:F77F117407206811B516B5B451545A40 xmp.did:F77F117407206811B5FEC38E6EA09CBA xmp.did:F77F117407206811BAFDD8C559CCB40F xmp.did:F77F117407206811BB8EE28C44C74A0A xmp.did:F77F117407206811BEDCA708FFA8A08A xmp.did:F787351D35206811994CAC4A6D2CC7F7 xmp.did:F7D5F4130AA1E211876CA2AB58E5D57C xmp.did:F82C9B629EDE11E28289E61ECA152758 xmp.did:F82C9B6A9EDE11E28289E61ECA152758 xmp.did:F8301B2C0D206811B1A4F4BFE09FA186 xmp.did:F87F117407206811822ABD3C2A242D50 xmp.did:F87F11740720681188C6956C521FE498 xmp.did:F87F1174072068118A6D99BF57D6CD4E xmp.did:F87F1174072068118F62A44CE4DF69A8 xmp.did:F87F1174072068119109AAFB9F469FD0 xmp.did:F87F117407206811994CA9A71151591E xmp.did:F87F1174072068119CD4DB2985335F93 xmp.did:F88F820B1420681188C6D9EA900BA018 xmp.did:F8B1200EC82068118F62B55C94B5F1CA xmp.did:F8BC412B0C2068119109C80A4C3147BC xmp.did:F8E327E22F21681188C696DC609994EC xmp.did:F968FBD12F20681192B0DF62A27A19F6 xmp.did:F96E9DEAD78311E28E41FA4DAE2A36B6 xmp.did:F97F1174072068118083EB83C62BD7C1 xmp.did:F97F117407206811871FEB8DB824A23C xmp.did:F97F11740720681188C6D86C8FF95AFA xmp.did:F97F1174072068118C14886BEA417E94 xmp.did:F97F1174072068118DBBEB69C03E24DA xmp.did:F97F1174072068118DBBF1EFF81BD277 xmp.did:F97F11740720681192B0D584A9130FDC xmp.did:F97F117407206811A6D5D23F472BAFFF xmp.did:F97F117407206811AB39EE7D3CCB07EB xmp.did:F9BB797B150711E4A26AD5AD1DF574D1 xmp.did:F9D2BC0A0398DF118E0DFBCC39F1D70C xmp.did:F9F16C12E2206811BEDC9678CA0435A7 xmp.did:FA7DB37C2B5611E8B022F407692B6CD2 xmp.did:FA7DB3802B5611E8B022F407692B6CD2 xmp.did:FA7DB3842B5611E8B022F407692B6CD2 xmp.did:FA7F1174072068118A6DF71B007A25D0 xmp.did:FA7F1174072068118B55D8122BD4BBDA xmp.did:FA7F1174072068118C14AF6C9BD96AB9 xmp.did:FA7F1174072068118F628C4A209C8985 xmp.did:FA7F1174072068119109836B7A347A79 xmp.did:FA7F11740720681192B0D6DC74DDAB73 xmp.did:FA7F1174072068119A1DBE620170033A xmp.did:FA7F1174072068119D68B0A7E60C0F5F xmp.did:FAC8674AABF411E284C691E3D9B8F21F xmp.did:FACF60380D21681188C696DC609994EC xmp.did:FB52C9EC0C91DF119CEE9052809BBE83 xmp.did:FB536F21AB21681188C696DC609994EC xmp.did:FB7F1174072068118083EB83C62BD7C1 xmp.did:FB7F117407206811871FEEA6EC09A2E5 xmp.did:FB7F11740720681188C6CC16CFB2376C xmp.did:FB7F1174072068118A6DF71B007A25D0 xmp.did:FB7F1174072068118F628504B14915F2 xmp.did:FB7F1174072068118F62D1E4D00C3DEC xmp.did:FB7F1174072068119109ABAA041E7FE7 xmp.did:FB7F117407206811AB08D95ECD287044 xmp.did:FBC4D2040A2068119109CC642C44EC0C xmp.did:FBF0030BD094DF11B924FFC964F2F0AE xmp.did:FBF99EB7567DDF11A74EE6CE03994422 xmp.did:FC7F1174072068118A6DF3C73496F8E5 xmp.did:FC7F1174072068118C14BD1CC6C0ACBB xmp.did:FC7F1174072068118DBBAA650F3D9198 xmp.did:FC7F1174072068118F62A6A3FE1774AD xmp.did:FC7F117407206811AD43B1EC353D4389 xmp.did:FC7F117407206811AE568088196B6FA8 xmp.did:FD7F117407206811822ACA3D0784FC0B xmp.did:FD7F1174072068118A6D99BF57D6CD4E xmp.did:FD7F1174072068118A6DF71B007A25D0 xmp.did:FD7F11740720681192B0FCE0C044093D xmp.did:FD7F1174072068119457DDD263B06589 xmp.did:FD7F117407206811BF24C98FA878C053 xmp.did:FE7F1174072068118083E4FF021AA64B xmp.did:FE7F1174072068118F62DD804FF26847 xmp.did:FE7F117407206811A961E68EEDC136C8 xmp.did:FE8F876C7E2168118F62E601B48A9F82 xmp.did:FEC52D397663DF11B26194DD13427F8B xmp.did:FF3550F002AD11E18740F64E75AD4D2A xmp.did:FF3819F6172068118F62D63BC9AEC7D1 xmp.did:FF57693A018EDF11BEBB835A3A1D3CAE xmp.did:FF7F1174072068118A6D99BF57D6CD4E xmp.did:FF7F1174072068118C14BD1CC6C0ACBB xmp.did:FF9D5EE8E87CE01185D4A044C68EEC55 xmp.did:FFACF482E17EDF11A5AAB86F66D75F22 xmp.did:FFC0E07E8E6CDF1189B09E42195B25B4 xmp.did:a090fc9d-7bcd-4205-af16-7be6bb9df0b7 xmp.did:a0b9c386-282b-411a-9ebe-b87e73bdd4be xmp.did:a17cbd4c-264e-428a-9b0f-1ac87facd6c5 xmp.did:a2b5bc33-bd75-41a6-b8a6-e6d226df6ef9 xmp.did:a3624e9c-4691-4e46-a85e-a888d909868c xmp.did:a4076541-e24c-4448-afa8-ffbdbedffba8 xmp.did:a60f024a-c5ac-4cf2-94d3-9767dc796848 xmp.did:a7a5932d-40f9-45a9-b065-193681c9a719 xmp.did:a860f718-84cd-4add-8889-f05473da6ad9 xmp.did:a88ff82c-581a-4027-9732-60da88653472 xmp.did:aa3a21e4-eebf-41a6-b033-e7e746c1c0f5 xmp.did:aa909b71-e4da-43ec-97f3-8fb350a2cb0e xmp.did:acbebcc9-468c-4924-84cd-60f58d548dcc xmp.did:ad36e9c0-dfd8-41ee-b80d-273fa59fc3a3 xmp.did:b0571ebe-1bd8-4216-a6d4-9b2f831ab05a xmp.did:b0ab6d26-de3b-4d25-a68b-495b0820f0c7 xmp.did:b0e3229c-4eed-490f-a85b-c6add5fc67d4 xmp.did:b354debb-083b-440e-b1e7-2eb8779b9015 xmp.did:b4ce5c9c-3621-4d13-b888-3ae643f7832f xmp.did:b5eb23ac-67c1-483d-b6fe-e66b8bb3b04e xmp.did:b7ebec2f-5237-4ac2-a57d-532927285672 xmp.did:b874964f-448a-421a-9f99-bbaa77b96126 xmp.did:b9377b62-fc66-43d0-8fca-b67a25889437 xmp.did:b971f567-dd05-45bb-8e87-d19c1710cd8a xmp.did:ba707181-18f2-429d-9614-c12ef0545588 xmp.did:ba7c2403-c582-4cb2-ad68-cebd96a416b5 xmp.did:bd0f248b-5da8-4a78-89ff-2ffc657088fe xmp.did:bd70111c-114c-4438-a84b-4551a223a062 xmp.did:bf097764-3009-4fd9-a3dd-54d9fbc49e4e xmp.did:bf20244c-5feb-4476-8c29-ddcba20ddda5 xmp.did:bf79b595-9871-4721-b018-ba03a986eefd xmp.did:c1d80d72-0d52-4d19-8567-ad946427c785 xmp.did:c293c924-cacf-4834-8a8f-c9375ff57ce0 xmp.did:c2e9bd39-023f-4b67-8e3b-8e445930e6cc xmp.did:c3eaa55a-c868-4498-b2fe-fac9aa35b984 xmp.did:c80c6cde-3c42-4684-ab34-2f1cb10de999 xmp.did:c8eb0262-df7d-46c0-8e2e-f4f77b73a015 xmp.did:c9531680-0d4d-400a-adbc-cedd8048f3fe xmp.did:ca0448eb-9ae7-4d09-bd39-ab7261f897c3 xmp.did:ca354ed8-fa54-4a88-87a8-8dac6c9b69b1 xmp.did:ca3e37c7-bfcf-4b6b-8472-01aa83acd822 xmp.did:ca50aa03-3e50-4d7c-a543-a4ec97c64f3b xmp.did:cabc9e37-5627-4fc6-816e-f87fafa62e8d xmp.did:caf7c78c-e511-413b-a0a7-2c54da92bbe2 xmp.did:ccbd0a45-b9ea-430b-a042-41b697be030b xmp.did:cf66f2fd-ecf2-4a2a-a9d9-aaeae18dd247 xmp.did:d09a703a-c7c2-4a40-b6d6-9cac51dd2828 xmp.did:d156fc6f-90b5-489b-a01a-bf3e992ece93 xmp.did:d376339f-3e87-4ec6-bfc2-bd0788739da7 xmp.did:d3835abc-3b56-4cfa-95a1-b05d5a23924d xmp.did:d3ef0faf-ecfe-49fb-8bda-6d73da663c9b xmp.did:d4e5396f-3323-4be2-b8a9-b4aea15d7418 xmp.did:d5f8c446-b02b-4184-8242-f30d26245982 xmp.did:d6463830-fec5-4f8a-bcf3-efb0545206d9 xmp.did:d837d774-5d3e-be47-8c3f-ccfabcb105a6 xmp.did:d9450484-eae6-4360-b997-46ea87df5910 xmp.did:dbcfa65e-4047-4ee2-93a9-a4fb5d5a8aa6 xmp.did:dc691136-8fc5-4103-b682-e1b2eb7321b2 xmp.did:ddcdae12-5bf8-4c68-a2a0-7cd051852984 xmp.did:e0b66ab6-a90f-4bf8-a855-2ca9eabe0111 xmp.did:e423467f-ab21-471e-b274-096eb86967db xmp.did:e56e2ada-2bdb-441c-b905-949879ce8eaa xmp.did:e73385ea-c2b2-4870-9ddd-f37cf5a8292d xmp.did:e8e101e4-fcbc-4d36-9c06-2014d1bacba2 xmp.did:ea9640fe-9401-4c78-8b44-56c029f727cf xmp.did:ee7503ca-cf2d-46a6-b945-50e06a24a32f xmp.did:eff9ee72-0c94-4bc0-a18b-f79c3f9624e9 xmp.did:f02676fd-e0fe-4fa3-9189-8cefa67a437d xmp.did:f06432ed-ae23-4799-a952-1efbfb7f3cd7 xmp.did:f1b1e08a-c0a9-408c-af01-91fef1fd3c09 xmp.did:f4075d2e-39ee-4f6e-b677-d92c7c094c25 xmp.did:f473bbfc-ea19-44c4-90a2-6dea0b17ec7a xmp.did:f4977f67-64ca-441a-b1bf-20d4214c90a1 xmp.did:f5123bbf-2c16-4300-95e7-de1b84c9ec10 xmp.did:f5663e66-f290-477b-b3fc-4590d5a91066 xmp.did:f5b85b03-320f-443c-be8b-a68d242ba20e xmp.did:f7f2d92f-7491-4614-b80b-dd04ad56c9d8 xmp.did:f9312bcf-f1fa-427c-9857-b45bcc39287a xmp.did:fb7b6630-7055-4600-b8c8-f010d6167d98 xmp.did:fba7a842-c809-4f5e-a835-b43a5a2ffdb0 xmp.did:ffe9cb11-0c81-4dec-904a-d8238f547640 xmp.id:00d6520f-a660-44a2-b952-b7a18857883e xmp.id:0EF03BB108206811822ADD1F3230526D xmp.id:157fa1bb-a642-42fb-b9ba-c7767b998537 xmp.id:1D328185C366E211A575B3112223C242 xmp.id:46f831d3-4de4-4d1f-b22c-49d3e79db245 xmp.id:4876fe3f-6b52-41ca-abe1-fc9c00eb3042 xmp.id:61e88989-31b1-4a48-9057-af292043141d xmp.id:70B8695024206811822ACCE334DF5C2C xmp.id:8b375b0b-bb56-4d25-a3ba-12d18b05fda3 xmp.id:9189b746-d4ad-4300-816f-6e032c90ccba xmp.id:94e0513e-4a6f-4026-be5c-d72d0578e2db xmp.id:BCA7780F1720681180839C4A3E4C2D59 xmp.id:b415032f-5cb0-4732-9948-75a52ffce9ea xmp.id:d4c02c85-a003-4cdf-9f70-fe8353ff75a2 rH%IDATx{<$ZyDTD(@-ZSEW][b@F"R HUE@|y(bA 0aݙ݁6g?IroN29{ιwJKKM'R&R&R&R&R&Rv2fy@cH |c~ƕU3J&@#D=l{\dq XM73,!p+ppLR~} c{ˑ\`ҐcUVtT酾TmG~<Ə.n My@* X֯+PʛO鴾[WtߕJ:rDDd,z5>8ImϰܡV,Gi;;@9LLh?ۣY)8U4A̫ݓ^;Z9SɡY,Ͳ{sHͲ^6oLc9pc]նF:t-x=5 XFy5,2 Ƶ2tHjD"xQ2[k?;wͲ!|9ض--l+|ou,036㦚m|d*٫4kHجN[ m B`iG|?DPkb@7$}t36*(Wq(U6k~ggG#>#K%q+,<08qBjz[T*w)p2?O[T55F$!?X$K0mJq.mXLOmIdqmBz'x, eĄ~WUS>.wa1Q܏:erLQ/l䥬'tǽ%,Y@d%L[Aىe̝= [qG 4! Tq8w>pa;)LtK9y9sz6GSR\&SNNCde Yv]D@& J| ,Q1o =HeLm~eSZ2USG 3R1;llr7 1,e+]AuH= !;gP]e$p09l[qw'Az2xgLCL7|Dx9e'p.QegT=nS"0q4j 'Pm#wT YшuFrlE/Z z1CwܯS?t@bSzgt2t#^x})຤:ծ(4שsi A**=%44HdKfl/q7xqSYE&8XE,H!t<;ҩiR Ɉoם+n!XLO5 p'l Ez5!&ۣ4\"lZ%-iF3RL✎4^/r)=h;*N@=m*6tUމ8)Ljp1@  Ht}-iW iuF{ĄAh4V|3gfdi,:;4oVnuT79ݏ6i= q\(QȘĔ+^?me=zw~5eGɳ3[u}:Ӻ=5bjޫ;)n8 izxeqwzQ?L0%u,  4(7!m12T{:luxq?JYlBƢ@LjS*$|_9#Jxq$ ~#*26m< e)gmqBۍ]LekRRs6;C= 4D VFd}ULPrjA¯Lȃi}z#pLr!-Z<"7i-0pL';B4 a^SB 3'>QlAǓ+-8>Ew!=tAȦ~>.wR ~K#Ns0;LUXFBIv igwCb@3++`%X$hxBZg53`Hf?vKKyRl^[`@(<уD t/[yQ.=85<)`pU8Cwܷ< =a3Qu88L{])ϕu_AWq32UQ^9HUcj*qgy1" jrGr HbͶ1=g#'tu,N]㱔c)O8x&-{#Z뎻zxq;buhKyI^f_$q?L ` x$)\ ]xY5xtf$ǡ-[oT4E;CeE=MS' + system_str + ''); }); $('#mac option').filter(function () { //may want to use $.trim in here return $(this).text() == selection; }).prop('selected', true); } }); } function scriptSelection() { var paramsElems = $('.params-container'); var option = $('select[name="target"]').find('option:selected'); var script = $(option).data('script'); var env = $(option).data('env'); if (!script || script.length === 0) { paramsElems.empty(); } else { $.get('/ajax/script/params', { 'script': script, 'environment': env }, function (params) { paramsElems.empty(); $.each(params, function () { paramsElems.append('
' + ' ' + '
'); }); paramsElems.append(''); }); } } function updateEventHistory() { var eventLogContainer = $('.event-log'); $.get('/ajax/events', function (events) { if (!events) { return; } eventLogContainer.empty(); for (var mac in events) { var title = mac; if (events[mac][0].host != '') { var host = events[mac][0].server.Hostname; if (host == '') host = events[mac][0].server.IP; title += ' (' + host + ')'; } var elem = eventLogContainer.append('
' + title + '
    '); $.each(events[mac], function () { var date = (new Date(this.date)).toLocaleString(); var params = ""; for (var p in this.params) { params += p + ':' + this.params[p] + ' '; } elem.append('
  • ' + date + ': ' + this.message + '
  • '); }); eventLogContainer.append('
'); } }); } shoelaces-1.3.2+ds/web/templates/000077500000000000000000000000001444014657400166515ustar00rootroot00000000000000shoelaces-1.3.2+ds/web/templates/html/000077500000000000000000000000001444014657400176155ustar00rootroot00000000000000shoelaces-1.3.2+ds/web/templates/html/error.html000066400000000000000000000001061444014657400216310ustar00rootroot00000000000000$def with (errmsg)

$errmsg

shoelaces-1.3.2+ds/web/templates/html/events.html000066400000000000000000000003761444014657400220150ustar00rootroot00000000000000{{ define "events" }}
Event History
{{ end }} shoelaces-1.3.2+ds/web/templates/html/footer.html000066400000000000000000000004431444014657400220020ustar00rootroot00000000000000{{ define "footer" }}

Brought to you with by ThousandEyes

{{ end }} shoelaces-1.3.2+ds/web/templates/html/header.html000066400000000000000000000037741444014657400217460ustar00rootroot00000000000000{{ define "header" }} shoelaces - painless server bootstrapping
{{ end }} shoelaces-1.3.2+ds/web/templates/html/index.html000066400000000000000000000047761444014657400216300ustar00rootroot00000000000000{{ define "index" }}

Waiting for MACs...

Shoelaces is waiting for a server to boot. Using iPXE, your server should reach the following endpoint:
http://{{ .BaseURL }}/start

You can automate this process by setting up a DHCP server.

{{ end }} shoelaces-1.3.2+ds/web/templates/html/mappings.html000066400000000000000000000022321444014657400223200ustar00rootroot00000000000000{{ define "mappings" }}
{{ if .NetworkMaps }}
Network Mappings
{{ range .NetworkMaps }} {{ end }}
Subnet IPXE script to use
{{ .Network }} {{ .Script.String }}
Hostname Mappings
{{ range .HostnameMaps }} {{ end }}
Hostname IPXE script to use
/{{ .Hostname.String }}/ {{ .Script.String }}
{{ end }}
{{ end }}