From invalid.path at gmail.com Tue May 16 15:18:30 2017 Content-Type: multipart/mixed; boundary="===============1591284580528162360==" MIME-Version: 1.0 From: InvalidPath To: infrastructure at lists.fedoraproject.org Subject: Re: Combined bodhi template files Date: Tue, 16 May 2017 09:17:21 -0600 Message-ID: In-Reply-To: 1494945900.2749.22.camel@fedoraproject.org --===============1591284580528162360== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Thanks Randy. I'll inspect this closer tonight. I appreciate it! On Tue, May 16, 2017 at 8:45 AM, Randy Barlow wrote: > I've inserted comments inline: > > On Tue, 2017-05-02 at 09:33 -0600, InvalidPath wrote: > > From 557ed944045f3d3241f485f4cf7713d2362a4129 Mon Sep 17 00:00:00 > > 2001 > > From: Ben Hart > > Date: Tue, 2 May 2017 09:27:20 -0600 > > Subject: [PATCH] Combined staging and production template files > > > > --- > > roles/bodhi2/base/templates/bodhi-stg_prd-ini.j2 | 592 > > I recommend naming the new file production.ini, since that's the name > it gets installed as on staging and production. It will also help me > review this patch much more easily, because I'll see the differences > between current production.ini and the new production.ini more clearly. > > I'll make a few more comments below, but I'll do a more thorough review > once the diff is based off production.ini since that will be much > easier for my soft, human brain. > > > +++++++++++++++++++++++ > > 1 file changed, 592 insertions(+) > > create mode 100644 roles/bodhi2/base/templates/bodhi-stg_prd-ini.j2 > > > > diff --git a/roles/bodhi2/base/templates/bodhi-stg_prd-ini.j2 > > b/roles/bodhi2/base/templates/bodhi-stg_prd-ini.j2 > > new file mode 100644 > > index 0000000..27f59a4 > > --- /dev/null > > +++ b/roles/bodhi2/base/templates/bodhi-stg_prd-ini.j2 > > @@ -0,0 +1,592 @@ > > +[filter:proxy-prefix] > > +use =3D egg:PasteDeploy#prefix > > +prefix =3D / > > +scheme =3D https > > + > > +[app:main] > > +use =3D egg:bodhi-server > > +filter-with =3D proxy-prefix > > + > > + > > +#Combined template file to cover both STG and PRD. > > We don't need this comment since this is a more typical style. > > > + > > +#Misc Info at beginning of files > > +{% if env -- 'production' %} > > I'm not sure this is valid Jinja syntax. I think you want =3D=3D instead = of > --. > > Also, we probably do want this section to be the same between staging > and production. > > > + #PRD Info: > > + # Release status > > + # pre-beta enforces the 'Pre Beta' policy defined here: > > + # https://fedoraproject.org/wiki/Updates_Policy > > + f26.status =3D pre_beta > > + > > + f26.post_beta.mandatory_days_in_testing =3D 7 > > + f26.post_beta.critpath.num_admin_approvals =3D 0 > > + f26.post_beta.critpath.min_karma =3D 2 > > + f26.post_beta.critpath.stable_after_days_without_neg > > ative_karma =3D 14 > > + > > + f26.pre_beta.mandatory_days_in_testing =3D 3 > > + f26.pre_beta.critpath.num_admin_approvals =3D 0 > > + f26.pre_beta.critpath.min_karma =3D 1 > > + ## Atomic OSTree support > > + ## This will compose Atomic OSTrees during the push p > > rocess using the fedmsg-atomic-composer > > + ## https://github.com/fedora-infra/ class=3D"Apple-tab-span" > > style=3D"white-space:pre"> fedmsg-atomic-composer > > + ## > > + compose_atomic_trees =3D true > > +{% endif %} > > + > > +## > > +## Messages > > +## > > + > > +# A notice to flash on the front page > > +frontpage_notice =3D > > + > > +# A notice to flash on the New Update page > > +newupdate_notice =3D > > + > > +testing_approval_msg =3D This update has reached %d days in testing > > and can be pushed to stable now if the maintainer wishes > > +not_yet_tested_msg =3D This update has not yet met the minimum testing > > requirements defined in the > ackage_update_acceptance_criteria">Package Update Acceptance > > Criteria > > +not_yet_tested_epel_msg =3D This update has not yet met the minimum > > testing requirements defined in the > g/wiki/EPEL_Updates_Policy">EPEL Updates Policy > > +stablekarma_comment =3D This update has reached the stable karma > > threshold and will be pushed to the stable updates repository > > + > > +{% if env -- 'production' %} > > + testing_approval_msg_based_on_karma =3D This update has > > reached the stable karma threshold and can be pushed to stable now if > > the maintainer wishes. > > + not_yet_tested_msg_based_on_karma =3D This update has not reached > the stable karma threshold. > > We probably do want this section to be the same on staging and > production. > > > +{% endif %} > > + > > +# Libravatar - If this is true libravatar will work as normal. > > Otherwise, all > > +# libravatar links will be replaced with the string "libravatar.org" > > so that > > +# the tests can still pass. > > +libravatar_enabled =3D True > > +# Set this to true if you want to do federated dns libravatar lookup > > +libravatar_dns =3D False > > + > > +# Set this to True in order to send fedmsg messages. > > +fedmsg_enabled =3D True > > + > > +# Captcha - if 'captcha.secret' is not None, then it will be used > > for comments > > +# captcha.secret must be 32 url-safe base64-encoded bytes > > +# you can generate afresh with >>> > > cryptography.fernet.Fernet.generate_key() > > + > > +{% if env =3D=3D "staging" %} > > +captcha.secret =3D {{ bodhi2CaptchaSecretSTG }} > > +{% else %} > > +captcha.secret =3D {{ bodhi2CaptchaSecret }} > > +{% endif %} > > +# Dimensions > > +captcha.image_width =3D 300 > > +captcha.image_height =3D 80 > > +# Any truetype font will do. > > +captcha.font_path =3D /usr/share/fonts/liberation/LiberationMono- > > Regular.ttf > > +captcha.font_size =3D 36 > > +# Colors > > +captcha.font_color =3D #000000 > > +captcha.background_color =3D #ffffff > > +# In pixels > > +captcha.padding =3D 5 > > +# If a captcha sits around for this many seconds, it will stop > > working. > > +captcha.ttl =3D 300 > > + > > +#datagrepper_url =3D http://localhost:5000 > > +{% if env =3D=3D "staging" %} > > +datagrepper_url =3D https://apps.stg.fedoraproject.org/datagrepper > > I think this will define datagrepper_url twice on staging. We probably > want an if statement above this line too. > > > +badge_ids =3D binary-star|both-bull-and-self-transcended-tester-viii| > catching-the-bull-tester-iv|corporate-drone|corporate- > overlord|corporate-shill|discovery-of-the-footprints- > tester-ii|in-search-of-the-bull-tester-i|is-this-thing- > on-updates-testing-i|is-this-thing-on-updates-testing-ii| > is-this-thing-on-updates-testing-iii|is-this-thing-on- > updates-testing-iv|it-still-works!|like-a-rock-updates- > stable-i|like-a-rock-updates-stable-ii|like-a-rock-updates- > stable-iii|like-a-rock-updates-stable-iv|mic-check!- > updates-testing-v|missed-the-train|override,-you-say| > perceiving-the-bull-tester-iii|reaching-the-source- > tester-ix|return-to-society-tester-x|riding-the-bull-home- > tester-vi|stop-that-update!|take-this-and-call-me-in-the- > morning|taming-the-bull-tester-v|tectonic!-updates- > stable-v|the-bull-transcended-tester-vii|what-goes-around- > comes-around-karma-i|what-goes-around-comes-around- > karma-ii|what-goes-around-comes-around-karma-iii|what- > goes-around-comes-around-karma-iv|white-hat|you-can- > pry-it-from-my-cold,-dead-hands > > +{% else %} > > +datagrepper_url =3D https://apps.fedoraproject.org/datagrepper > > +badge_ids =3D binary-star|both-bull-and-self-transcended-tester- > > viii|catching-the-bull-tester-iv|corporate-drone|corporate- > > overlord|corporate-shill|discovery-of-the-footprints-tester-ii|in- > > search-of-the-bull-tester-i|is-this-thing-on-updates-testing-i|is- > > this-thing-on-updates-testing-ii|is-this-thing-on-updates-testing- > > iii|is-this-thing-on-updates-testing-iv|it-still-works!|like-a-rock- > > updates-stable-i|like-a-rock-updates-stable-ii|like-a-rock-updates- > > stable-iii|like-a-rock-updates-stable-iv|mic-check!-updates-testing- > > v|missed-the-train|override,-you-say|perceiving-the-bull-tester- > > iii|reaching-the-source-tester-ix|return-to-society-tester-x|riding- > > the-bull-home-tester-vi|stop-that-update!|take-this-and-call-me-in- > > the-morning|taming-the-bull-tester-v|tectonic!-updates-stable-v|the- > > bull-transcended-tester-vii|what-goes-around-comes-around-karma- > > i|what-goes-around-comes-around-karma-ii|what-goes-around-comes- > > around-karma-iii|what-goes-around-comes-around-karma-iv|white- > > hat|you-can-pry-it-from-my-cold,-dead-hands > > +{% endif %} > > + > > +## > > +## Wiki Test Cases > > +## > > + > > +## Query the wiki for test cases > > +query_wiki_test_cases =3D False > > +wiki_url =3D https://fedoraproject.org/w/api.php > > +test_case_base_url =3D https://fedoraproject.org/wiki/ > > + > > +# Email domain to prepend usernames to > > +default_email_domain =3D fedoraproject.org > > + > > +# domain for generated message IDs > > +{% if env =3D=3D "staging" %} > > +message_id_email_domain =3D admin.stg.fedoraproject.org > > +{% else %} > > +message_id_email_domain =3D admin.fedoraproject.org > > +{% endif %} > > + > > +## > > +## Mash settings > > +## > > + > > +# If defined, the bodhi masher will ensure that messages are signed > > with the given cert > > +{% if env =3D=3D "staging" %} > > +releng_fedmsg_certname =3D shell-bodhi- > > backend01.stg.phx2.fedoraproject.org > > +{% else %} > > +{% if ansible_hostname =3D=3D 'bodhi-backend01' %} > > +releng_fedmsg_certname =3D shell-bodhi- > > backend01.phx2.fedoraproject.org > > +{% else %} > > +releng_fedmsg_certname =3D shell-bodhi- > > backend03.phx2.fedoraproject.org > > +{% endif %} > > +{% endif %} > > + > > +# The masher is a bodhi instance that is responsible for composing > > the update > > +# repositories, regenerating metrics, sending update notices, > > closing bugs, > > +# and other costly operations. To set an external masher, set the > > masher to > > +# the baseurl of the bodhi instance. If set to None, this bodhi > > instance > > +# will act as a masher as well. > > +#masher =3D None > > + > > +# Where to initially mash repositories > > +{% if env =3D=3D "staging" %} > > +mash_dir =3D /var/cache/bodhi/mashing > > +{% else %} > > +mash_stage_dir =3D /mnt/koji/mash/updates > > +{% endif %} > > + > > +mash_conf =3D /etc/bodhi/mash.conf > > + > > +createrepo_cache_dir =3D /var/cache/createrepo > > + > > +## Our periodic jobs > > +#jobs =3D clean_repo nagmail fix_bug_titles cache_release_data > > approve_testing_updates > > +jobs =3D cache_release_data refresh_metrics approve_testing_updates > > + > > +## Comps configuration > > +comps_dir =3D /var/cache/bodhi/comps > > +comps_url =3D https://pagure.io/fedora-comps.git > > + > > +## > > +## Mirror settings > > +## > > + > > +file_url =3D https://download.fedoraproject.org/pub/fedora/linux/updat > > es > > +master_repomd =3D http://download01.phx2.fedoraproject.org/pub/fedora/ > > linux/updates/%s/%s/repodata/repomd.xml > > +fedora_master_repomd =3D http://download01.phx2.fedoraproject.org/pub/ > > fedora/linux/updates/%s/%s/repodata/repomd.xml > > +fedora_epel_master_repomd =3D http://download01.phx2.fedoraproject.org > > /pub/epel/%s/%s/repodata/repomd.xml > > + > > +fedora_stable_master_repomd =3D http://download01.phx2.fedoraproject.o > > rg/pub/fedora/linux/updates/%s/%s/repodata/repomd.xml > > +fedora_testing_master_repomd =3D http://download01.phx2.fedoraproject. > > org/pub/fedora/linux/updates/testing/%s/%s/repodata/repomd.xml > > +fedora_epel_stable_master_repomd =3D http://download01.phx2.fedoraproj > > ect.org/pub/epel/%s/%s/repodata/repomd.xml > > +fedora_epel_testing_master_repomd =3D http://download01.phx2.fedorapro > > ject.org/pub/epel/testing/%s/%s/repodata/repomd.xml > > + > > +## The base url of this application > > +{% if env =3D=3D "staging" %} > > +base_address =3D https://bodhi.stg.fedoraproject.org/ > > +{% else %} > > +base_address =3D https://bodhi.fedoraproject.org/ > > +{% endif %} > > + > > +## Supported update types > > +update_types =3D bugfix enhancement security newpackage > > + > > +## Supported architechures > > +## > > +## To handle arch name changes between releases, you > > +## can also configure bodhi to support one arch *or* > > +## another. For example, EPEL5 mashes produce 'ppc' > > +## repos, where EPEL6 produces 'ppc64'. To handle this > > +## scenario, you can specify something like: > > +## > > +## arches =3D ppc/ppc64 > > +## > > +{ if env =3D=3D "staging" %} > > +arches =3D i386 x86_64 armhfp > > +{% else %} > > +arches =3D x86_64 armhfp i386 > > +{% endif %} > > The order of the list isn't significant here, so I think we can > eliminate the if statement and make them the same. > > > + > > +## > > +## Email setting > > +## > > + > > +{ if env =3D=3D "production" } > > +smtp_server =3D bastion > > + > > +# The updates system itself. This email address is used in fetching > > Bugzilla > > +# information, as well as email notifications > > +bodhi_email =3D updates(a)fedoraproject.org > > +bodhi_password =3D {{ bodhiBugzillaPassword }} > > +{% else %} > > +bodhi_email =3D updates(a)fedoraproject.org > > +{% endif %} > > + > > +# The address that gets the requests > > +release_team_address =3D bodhiadmin-members(a)fedoraproject.org > > + > > +# The address to notify when security updates are initially added to > > bodhi > > +security_team =3D security_respons-members(a)fedoraproject.org > > + > > +# Public announcement lists > > +fedora_announce_list =3D package-announce(a)lists.fedoraproject.org > > +fedora_test_announce_list =3D test(a)lists.fedoraproject.org > > +fedora_epel_announce_list =3D epel-package-announce(a)lists.fedoraproj= ec > > t.org > > +fedora_epel_test_announce_list =3D epel-devel(a)lists.fedoraproject.org > > + > > +# Superuser groups > > +admin_groups =3D proventesters security_respons bodhiadmin sysadmin- > > main > > + > > +# Users that we don't want to show up in the "leaderboard(s)" > > +stats_blacklist =3D bodhi anonymous autoqa taskotron > > + > > +# A list of non-person users > > +system_users =3D bodhi autoqa taskotron > > + > > +# The max length for an update title before we truncate it in the > > web ui > > +max_update_length_for_ui =3D 70 > > + > > +# The number of days used for calculating the 'top testers' metric > > +top_testers_timeframe =3D 900 > > + > > +# The email address of the proventesters > > +proventesters_email =3D proventesters-members(a)fedoraproject.org > > + > > +# Disabled for the initial release. > > +stacks_enabled =3D False > > + > > +# These are the default requirements that we apply to stacks, > > packages, and > > +# updates. Users have free-reign to override them for each kind of > > entity. At > > +# the end of the day, we only consider the requirements defined by > > single > > +# updates themselves when gating in the backend masher process. > > +site_requirements =3D depcheck upgradepath > > +## Some day we'll have rpmgrill, and that will be cool. Ask tflink. > > +#site_requirements =3D depcheck upgradepath rpmgrill > > + > > +# Where do we send update announcements to ? > > +# These variables should be named per: > > Release.prefix_id.lower()_announce_list > > +#fedora_announce_list =3D > > +#fedora_test_announce_list =3D > > +#fedora_epel_announce_list =3D > > +#fedora_epel_test_announce_list =3D > > + > > +# Cache settings > > +dogpile.cache.backend =3D dogpile.cache.dbm > > +dogpile.cache.expiration_time =3D 100 > > +dogpile.cache.arguments.filename =3D /var/cache/bodhi/dogpile- > > cache.dbm > > + > > +# Exclude sending emails to these users > > +exclude_mail =3D autoqa taskotron > > + > > +## > > +## Buildsystem settings > > +## > > + > > +# What buildsystem do we want to use? For development, we'll use a > > fake > > +# buildsystem that always does what we tell it to do. For > > production, we'll > > +# want to use 'koji'. > > +buildsystem =3D koji > > + > > +# Koji's XML-RPC hub > > +{ if env =3D=3D "staging" %} > > +koji_hub =3D https://koji.stg.fedoraproject.org/kojihub > > + > > +# Root url of the Koji instance to point to. No trailing slash > > +koji_url =3D http://koji.stg.fedoraproject.org > > + > > +# URL of where users should go to set up their notifications > > +fmn_url =3D https://apps.stg.fedoraproject.org/notifications/ > > + > > +# URL of the resultsdb for integrating checks and stuff > > +resultsdb_url =3D https://taskotron.stg.fedoraproject.org/resultsdb/ > > +resultsdb_api_url =3D https://taskotron.stg.fedoraproject.org/resultsd > > b_api/ > > + > > +fedmenu.url =3D https://apps.stg.fedoraproject.org/fedmenu > > +fedmenu.data_url =3D https://apps.stg.fedoraproject.org/js/data.js > > +{% else %} > > +# Koji's XML-RPC hub > > +koji_hub =3D https://koji.fedoraproject.org/kojihub > > + > > +# Root url of the Koji instance to point to. No trailing slash > > +koji_url =3D https://koji.fedoraproject.org > > + > > +# URL of where users should go to set up their notifications > > +fmn_url =3D https://apps.fedoraproject.org/notifications/ > > + > > +# URL of the resultsdb for integrating checks and stuff > > +resultsdb_url =3D https://taskotron.fedoraproject.org/resultsdb/ > > +resultsdb_api_url =3D https://taskotron.fedoraproject.org/resultsdb_ap > > i/ > > + > > +fedmenu.url =3D https://apps.fedoraproject.org/fedmenu > > +fedmenu.data_url =3D https://apps.fedoraproject.org/js/data.js > > +{% endif %} > > + > > +# Koji Krb stuff > > +krb_ccache =3D /tmp/krb5cc_%{uid} > > +krb_principal =3D bodhi/bodhi{{ env_suffix }}.fedoraproject.org@{{ > > ipa_realm }} > > +krb_keytab =3D /etc/krb5.bodhi_bodhi{{ env_suffix > > }}.fedoraproject.org.keytab > > + > > +## > > +## ACL system > > +## Choices are 'pkgdb', which will send a JSON query to the > > pkgdb_url below, > > +## or 'dummy', which will always return guest credentials (used for > > local > > +## development). > > +## > > + > > +{ if env =3D=3D "staging" %} > > +acl_system =3D dummy > > + > > +## > > +## Package DB > > +## > > +pkgdb_url =3D https://admin.stg.fedoraproject.org/pkgdb > > + > > +initial_bug_msg =3D %s has been submitted as an update to %s. %s > > +stable_bug_msg =3D %s has been pushed to the %s repository. If > > problems still persist, please make note of it in this bug report. > > +testing_bug_msg =3D > > + If you want to test the update, you can install it with > > + $ su -c 'dnf --enablerepo=3Dupdates-testing update %s' > > + You can provide feedback for this update here: %s > > +testing_bug_epel_msg =3D > > + If you want to test the update, you can install it with > > + $ su -c 'yum --enablerepo=3Depel-testing update %s' > > + You can provide feedback for this update here: %s > > +{% else %} > > +acl_system =3D pkgdb > > + > > +## > > +## Package DB > > +## > > +pkgdb_url =3D https://admin.fedoraproject.org/pkgdb > > + > > +bugtracker =3D bugzilla > > +initial_bug_msg =3D %s has been submitted as an update to %s. %s > > +stable_bug_msg =3D %s has been pushed to the %s repository. If > > problems still persist, please make note of it in this bug report. > > +testing_bug_msg =3D > > + See https://fedoraproject.org/wiki/QA:Updates_Testing for > > + instructions on how to install test updates. > > + You can provide feedback for this update here: %s > > + > > +testing_bug_epel_msg =3D > > + See https://fedoraproject.org/wiki/QA:Updates_Testing for > > + instructions on how to install test updates. > > + You can provide feedback for this update here: %s > > +{% endif %} > > + > > +# The username/password for our bugzilla account comes > > +# from the bodhi_{email,password} fields. > > + > > +{ if env =3D=3D "staging" %} > > +bz_server =3D https://partner-bugzilla.redhat.com/xmlrpc.cgi > > +{% else %} > > +bz_server =3D https://bugzilla.redhat.com/xmlrpc.cgi > > +{% endif %} > > + > > +#bz_cookie =3D > > + > > +# Bodhi will avoid touching bugs that are not against the following > > products > > +bz_products =3D Fedora,Fedora EPEL > > + > > +{ if env =3D=3D "staging" %} > > +bz_server =3D https://partner-bugzilla.redhat.com/xmlrpc.cgi?id=3D%s > > +{% else %} > > +bz_server =3D https://bugzilla.redhat.com/xmlrpc.cgi?id=3D%s > > +{% endif %} > > bz_server seems to be defined in two blocks here - let's just define it > once. > > > + > > +## > > +## Packages that should suggest a reboot > > +## > > +reboot_pkgs =3D kernel kernel-smp kernel-xen-hypervisor kernel-PAE > > kernel-xen0 kernel-xenU kernel-xen kernel-xen-guest glibc hal dbus > > + > > +## > > +## Critical Path Packages > > +## https://fedoraproject.org/wiki/Critical_path_package > > +## > > + > > +# Enable this to query the Fedora Package Database for the list of > > Critical > > +# Path Packages. If disabled, it'll just use the hardcoded list > > below. > > + > > +{ if env =3D=3D "production" %} > > +critpath.type =3D pkgdb > > +{% endif %} > > + > > +# You can hardcode a list of critical path packages instead of using > > the PackageDB > > +{ if env =3D=3D "staging" %} > > +critpath.pkgs =3D kernel > > +{% endif %} > > + > > +# The number of admin approvals it takes to be able to push a > > critical path > > +# update to stable for a pending release. > > +critpath.num_admin_approvals =3D 0 > > + > > +# The net karma required to submit a critial path update to a > > pending release) > > +critpath.min_karma =3D 2 > > + > > +# Allow critpath to submit for stable after 2 weeks with no negative > > karma > > +critpath.stable_after_days_without_negative_karma =3D 14 > > + > > +# The minimum amount of time an update must spend in testing before > > +# it can reach the stable repository > > +fedora.mandatory_days_in_testing =3D 7 > > +fedora_epel.mandatory_days_in_testing =3D 14 > > + > > +## > > +## Release status > > +## > > + > > +# Pre-beta enforces the Pre Beta policy defined here: > > +# https://fedoraproject.org/wiki/Updates_Policy > > +#f15.status =3D 'pre_beta' > > +#f15.pre_beta.mandatory_days_in_testing =3D 3 > > +#f15.pre_beta.critpath.num_admin_approvals =3D 0 > > +#f15.pre_beta.critpath.min_karma =3D 1 > > + > > +# For test cases. > > +f7.status =3D post_beta > > +f7.post_beta.mandatory_days_in_testing =3D 7 > > +f7.post_beta.critpath.num_admin_approvals =3D 0 > > +f7.post_beta.critpath.min_karma =3D 2 > > + > > +# The number of days worth of updates/comments to display > > +feeds.num_days_to_show =3D 7 > > +feeds.max_entries =3D 20 > > + > > +## > > +## Buildroot Override > > +## > > + > > +# Number of days before expiring overrides > > +buildroot_overrides.expire_after =3D 1 > > + > > +## > > +## Groups > > +## > > + > > +# FAS Groups that we want to pay attention to > > +# When a user logs in, bodhi will look for any of these groups and > > associate # > > +# them with the user. They will then appear as the users effective > > principals in > > +# the format "group:groupname" and can be used in Pyramid ACE's. > > +important_groups =3D proventesters provenpackager releng-team > > security_respons packager bodhiadmin virtmaint-sig kde-sig eclipse- > > sig infra-sig gnome-sig python-sig robotics-sig qa-tools-sig nodejs- > > sig lxqt-sig astro-sig > > + > > +# Groups that can push updates for any package > > +admin_packager_groups =3D provenpackager releng-team security_respons > > + > > +# User must be a member of this group to submit updates > > +mandatory_packager_groups =3D packager > > + > > +## > > +## updateinfo.xml configuraiton > > +## > > +updateinfo_rights =3D Copyright (C) 2015 Red Hat, Inc. and others. > > + > > +## > > +## Authentication & Authorization > > +## > > + > > +# pyramid.openid > > +{ if env =3D=3D "staging" %} > > +openid.success_callback =3D bodhi.server.security:remember_me > > +openid.provider =3D https://id.stg.fedoraproject.org/openid/ > > +openid.url =3D https://id.stg.fedoraproject.org/ > > +openid_template =3D {username}.id.fedoraproject.org > > +openid.sreg_required =3D email > > +{% else %} > > +openid.success_callback =3D bodhi.server.security:remember_me > > +openid.provider =3D https://id.fedoraproject.org/openid/ > > +openid.url =3D https://id.fedoraproject.org/ > > +openid_template =3D {username}.id.fedoraproject.org > > +openid.sreg_required =3D email > > +{% endif %} > > + > > +## > > +## Pyramid settings > > +## > > +pyramid.reload_templates =3D false > > +pyramid.debug_authorization =3D false > > +pyramid.debug_notfound =3D false > > +pyramid.debug_routematch =3D false > > +pyramid.default_locale_name =3D en > > + > > +pyramid.includes =3D > > + pyramid_tm > > + > > +debugtoolbar.hosts =3D 127.0.0.1 ::1 > > + > > +## > > +## Database > > +## > > +{ if env =3D=3D "staging" %} > > +sqlalchemy.url =3D postgresql://bodhi2:{{ bodhi2PasswordSTG }}@db- > > bodhi/bodhi2 > > +{% else %} > > +sqlalchemy.url =3D postgresql://bodhi2:{{ bodhi2Password }}@db- > > bodhi/bodhi2 > > +{% endif %} > > I recently changed the url in staging.ini, so you should be sure to > pick up that change. > > > + > > +## > > +## Templates > > +## > > +mako.directories =3D bodhi:server/templates > > + > > +## > > +## Authentication & Sessions > > +## > > + > > +authtkt.secret =3D {{ bodhi2AuthTkt }} > > +session.secret =3D {{ bodhi2SessionSecret }} > > +authtkt.secure =3D true > > + > > +# pyramid_beaker > > +session.type =3D file > > +session.data_dir =3D /var/cache/bodhi/sessions/data > > +session.lock_dir =3D /var/cache/bodhi/sessions/lock > > + > > +{ if env =3D=3D "staging" %} > > +session.key =3D {{ bodhi2SessionKeySTG }} > > +{% else %} > > +session.key =3D {{ bodhi2SessionKey }} > > +{% endif %} > > + > > +session.cookie_on_exception =3D true > > +# Tell the browser to only send the cookie over TLS > > +session.secure =3D true > > +# Create a cookie that is only valid for one day > > +session.timeout =3D 86400 > > +cache.regions =3D default_term, second, short_term, long_term > > +cache.type =3D memory > > +cache.second.expire =3D 1 > > +cache.short_term.expire =3D 60 > > +cache.default_term.expire =3D 300 > > +cache.long_term.expire =3D 3600 > > + > > +[server:main] > > +use =3D egg:waitress#main > > +host =3D 0.0.0.0 > > +port =3D 6543 > > + > > +[pshell] > > +m =3D bodhi.server.models > > +t =3D transaction > > +# Begin logging configuration > > + > > +[loggers] > > +keys =3D root, bodhi, sqlalchemy > > + > > +[handlers] > > +keys =3D console > > + > > +[formatters] > > +keys =3D generic > > + > > +[logger_root] > > +level =3D INFO > > +handlers =3D console > > + > > +[logger_bodhi] > > +level =3D DEBUG > > +handlers =3D > > +qualname =3D bodhi > > + > > +[logger_sqlalchemy] > > +level =3D WARN > > +handlers =3D > > +qualname =3D sqlalchemy.engine > > +# "level =3D INFO" logs SQL queries. > > +# "level =3D DEBUG" logs SQL queries and results. > > +# "level =3D WARN" logs neither. (Recommended for production > > systems.) > > + > > +[handler_console] > > +class =3D StreamHandler > > +args =3D (sys.stderr,) > > +level =3D NOTSET > > +formatter =3D generic > > +[formatter_generic] > > +format =3D %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] > > %(message)s > > + > > +# End logging configuration > > \ No newline at end of file > > -- > > 2.9.3 > _______________________________________________ > infrastructure mailing list -- infrastructure(a)lists.fedoraproject.org > To unsubscribe send an email to infrastructure-leave(a)lists. > fedoraproject.org > > --===============1591284580528162360== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGRpdiBkaXI9Imx0ciI+VGhhbmtzIFJhbmR5LsKgIEkmIzM5O2xsIGluc3BlY3QgdGhpcyBjbG9z ZXIgdG9uaWdodC7CoCBJIGFwcHJlY2lhdGUgaXQhPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gVHVlLCBNYXkgMTYsIDIwMTcgYXQg ODo0NSBBTSwgUmFuZHkgQmFybG93IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRv OmJvd2xvZmVnZ3NAZmVkb3JhcHJvamVjdC5vcmciIHRhcmdldD0iX2JsYW5rIj5ib3dsb2ZlZ2dz QGZlZG9yYXByb2plY3Qub3JnPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj48YmxvY2txdW90ZSBj bGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDox cHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij5JJiMzOTt2ZSBpbnNlcnRlZCBjb21tZW50 cyBpbmxpbmU6PGJyPgo8YnI+Ck9uIFR1ZSwgMjAxNy0wNS0wMiBhdCAwOTozMyAtMDYwMCwgSW52 YWxpZFBhdGggd3JvdGU6PGJyPgomZ3Q7IEZyb20gNTU3ZWQ5NDQwNDVmM2QzMjQxZjQ4NWY0Y2Y3 NzEzPHdicj5kMjM2MmE0MTI5IE1vbiBTZXAgMTcgMDA6MDA6MDA8YnI+CiZndDsgMjAwMTxicj4K Jmd0OyBGcm9tOiBCZW4gSGFydCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmludmFsaWQucGF0aEBnbWFp bC5jb20iPmludmFsaWQucGF0aEBnbWFpbC5jb208L2E+Jmd0Ozxicj4KJmd0OyBEYXRlOiBUdWUs IDIgTWF5IDIwMTcgMDk6Mjc6MjAgLTA2MDA8YnI+CiZndDsgU3ViamVjdDogW1BBVENIXSBDb21i aW5lZCBzdGFnaW5nIGFuZCBwcm9kdWN0aW9uIHRlbXBsYXRlIGZpbGVzPGJyPgomZ3Q7PGJyPgom Z3Q7IC0tLTxicj4KJmd0O8KgIHJvbGVzL2JvZGhpMi9iYXNlL3RlbXBsYXRlcy88d2JyPmJvZGhp LXN0Z19wcmQtaW5pLmoyIHwgNTkyPGJyPgo8YnI+CkkgcmVjb21tZW5kIG5hbWluZyB0aGUgbmV3 IGZpbGUgcHJvZHVjdGlvbi5pbmksIHNpbmNlIHRoYXQmIzM5O3MgdGhlIG5hbWU8YnI+Cml0IGdl dHMgaW5zdGFsbGVkIGFzIG9uIHN0YWdpbmcgYW5kIHByb2R1Y3Rpb24uIEl0IHdpbGwgYWxzbyBo ZWxwIG1lPGJyPgpyZXZpZXcgdGhpcyBwYXRjaCBtdWNoIG1vcmUgZWFzaWx5LCBiZWNhdXNlIEkm IzM5O2xsIHNlZSB0aGUgZGlmZmVyZW5jZXM8YnI+CmJldHdlZW4gY3VycmVudCBwcm9kdWN0aW9u LmluaSBhbmQgdGhlIG5ldyBwcm9kdWN0aW9uLmluaSBtb3JlIGNsZWFybHkuPGJyPgo8YnI+Ckkm IzM5O2xsIG1ha2UgYSBmZXcgbW9yZSBjb21tZW50cyBiZWxvdywgYnV0IEkmIzM5O2xsIGRvIGEg bW9yZSB0aG9yb3VnaCByZXZpZXc8YnI+Cm9uY2UgdGhlIGRpZmYgaXMgYmFzZWQgb2ZmIHByb2R1 Y3Rpb24uaW5pIHNpbmNlIHRoYXQgd2lsbCBiZSBtdWNoPGJyPgplYXNpZXIgZm9yIG15IHNvZnQs IGh1bWFuIGJyYWluLjxicj4KPGJyPgomZ3Q7ICsrKysrKysrKysrKysrKysrKysrKysrPGJyPgom Z3Q7wqAgMSBmaWxlIGNoYW5nZWQsIDU5MiBpbnNlcnRpb25zKCspPGJyPgomZ3Q7wqAgY3JlYXRl IG1vZGUgMTAwNjQ0IHJvbGVzL2JvZGhpMi9iYXNlL3RlbXBsYXRlcy88d2JyPmJvZGhpLXN0Z19w cmQtaW5pLmoyPGJyPgomZ3Q7PGJyPgomZ3Q7IGRpZmYgLS1naXQgYS9yb2xlcy9ib2RoaTIvYmFz ZS90ZW1wbGF0ZXMvPHdicj5ib2RoaS1zdGdfcHJkLWluaS5qMjxicj4KJmd0OyBiL3JvbGVzL2Jv ZGhpMi9iYXNlL3RlbXBsYXRlcy88d2JyPmJvZGhpLXN0Z19wcmQtaW5pLmoyPGJyPgomZ3Q7IG5l dyBmaWxlIG1vZGUgMTAwNjQ0PGJyPgomZ3Q7IGluZGV4IDAwMDAwMDAuLjI3ZjU5YTQ8YnI+CiZn dDsgLS0tIC9kZXYvbnVsbDxicj4KJmd0OyArKysgYi9yb2xlcy9ib2RoaTIvYmFzZS90ZW1wbGF0 ZXMvPHdicj5ib2RoaS1zdGdfcHJkLWluaS5qMjxicj4KJmd0OyBAQCAtMCwwICsxLDU5MiBAQDxi cj4KJmd0OyArW2ZpbHRlcjpwcm94eS1wcmVmaXhdPGJyPgomZ3Q7ICt1c2UgPSBlZ2c6UGFzdGVE ZXBsb3kjcHJlZml4PGJyPgomZ3Q7ICtwcmVmaXggPSAvPGJyPgomZ3Q7ICtzY2hlbWUgPSBodHRw czxicj4KJmd0OyArPGJyPgomZ3Q7ICtbYXBwOm1haW5dPGJyPgomZ3Q7ICt1c2UgPSBlZ2c6Ym9k aGktc2VydmVyPGJyPgomZ3Q7ICtmaWx0ZXItd2l0aCA9IHByb3h5LXByZWZpeDxicj4KJmd0OyAr PGJyPgomZ3Q7ICs8YnI+CiZndDsgKyNDb21iaW5lZCB0ZW1wbGF0ZSBmaWxlIHRvIGNvdmVyIGJv dGggU1RHIGFuZCBQUkQuPGJyPgo8YnI+CldlIGRvbiYjMzk7dCBuZWVkIHRoaXMgY29tbWVudCBz aW5jZSB0aGlzIGlzIGEgbW9yZSB0eXBpY2FsIHN0eWxlLjxicj4KPGJyPgomZ3Q7ICs8YnI+CiZn dDsgKyNNaXNjIEluZm8gYXQgYmVnaW5uaW5nIG9mIGZpbGVzPGJyPgomZ3Q7ICt7JSBpZiBlbnYg LS0gJiMzOTtwcm9kdWN0aW9uJiMzOTsgJX08YnI+Cjxicj4KSSYjMzk7bSBub3Qgc3VyZSB0aGlz IGlzIHZhbGlkIEppbmphIHN5bnRheC4gSSB0aGluayB5b3Ugd2FudCA9PSBpbnN0ZWFkIG9mPGJy PgotLS48YnI+Cjxicj4KQWxzbywgd2UgcHJvYmFibHkgZG8gd2FudCB0aGlzIHNlY3Rpb24gdG8g YmUgdGhlIHNhbWUgYmV0d2VlbiBzdGFnaW5nPGJyPgphbmQgcHJvZHVjdGlvbi48YnI+Cjxicj4K Jmd0OyArwqAgwqAgwqAjUFJEIEluZm86PGJyPgomZ3Q7ICsgIyBSZWxlYXNlIHN0YXR1czxicj4K Jmd0OyArICMgcHJlLWJldGEgZW5mb3JjZXMgdGhlICYjMzk7UHJlIEJldGEmIzM5OyBwb2xpY3kg ZGVmaW5lZCBoZXJlOjxicj4KJmd0OyArICMgPGEgaHJlZj0iaHR0cHM6Ly9mZWRvcmFwcm9qZWN0 Lm9yZy93aWtpL1VwZGF0ZXNfUG9saWN5IiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5r Ij5odHRwczovL2ZlZG9yYXByb2plY3Qub3JnLzx3YnI+d2lraS9VcGRhdGVzX1BvbGljeTwvYT48 YnI+CiZndDsgK8KgIMKgIMKgZjI2LnN0YXR1cyA9IHByZV9iZXRhPGJyPgomZ3Q7ICs8YnI+CiZn dDsgK8KgIMKgIMKgZjI2LnBvc3RfYmV0YS5tYW5kYXRvcnlfZGF5c188d2JyPmluX3Rlc3Rpbmcg PSA3PGJyPgomZ3Q7ICvCoCDCoCDCoGYyNi5wb3N0X2JldGEuY3JpdHBhdGgubnVtXzx3YnI+YWRt aW5fYXBwcm92YWxzID0gMDxicj4KJmd0OyArwqAgwqAgwqBmMjYucG9zdF9iZXRhLmNyaXRwYXRo Lm1pbl88d2JyPmthcm1hID0gMjxicj4KJmd0OyArwqAgwqAgwqBmMjYucG9zdF9iZXRhLmNyaXRw YXRoLnN0YWJsZV88d2JyPmFmdGVyX2RheXNfd2l0aG91dF9uZWc8YnI+CiZndDsgYXRpdmVfa2Fy bWEgPSAxNDxicj4KJmd0OyArPGJyPgomZ3Q7ICvCoCDCoCDCoGYyNi5wcmVfYmV0YS5tYW5kYXRv cnlfZGF5c188d2JyPmluX3Rlc3RpbmcgPSAzPGJyPgomZ3Q7ICvCoCDCoCDCoGYyNi5wcmVfYmV0 YS5jcml0cGF0aC5udW1fPHdicj5hZG1pbl9hcHByb3ZhbHMgPSAwPGJyPgomZ3Q7ICvCoCDCoCDC oGYyNi5wcmVfYmV0YS5jcml0cGF0aC5taW5fPHdicj5rYXJtYSA9IDE8YnI+CiZndDsgK8KgIMKg IMKgIyMgQXRvbWljIE9TVHJlZSBzdXBwb3J0PGJyPgomZ3Q7ICvCoCDCoCDCoCMjIFRoaXMgd2ls bCBjb21wb3NlIEF0b21pYyBPU1RyZWVzIGR1cmluZyB0aGUgcHVzaMKgIMKgIMKgcDxicj4KJmd0 OyByb2Nlc3MgdXNpbmcgdGhlIGZlZG1zZy1hdG9taWMtY29tcG9zZXI8YnI+CiZndDsgK8KgIMKg IMKgIyMgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZlZG9yYS1pbmZyYS8iIHJlbD0ibm9y ZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9mZWRvcmEtPHdicj5p bmZyYS88L2E+IGNsYXNzPSZxdW90O0FwcGxlLXRhYi1zcGFuJnF1b3Q7PGJyPgomZ3Q7IHN0eWxl PSZxdW90O3doaXRlLXNwYWNlOnByZSZxdW90OyZndDvCoCDCoCDCoCBmZWRtc2ctYXRvbWljLWNv bXBvc2VyPGJyPgomZ3Q7ICvCoCDCoCDCoCMjPGJyPgomZ3Q7ICvCoCDCoCDCoGNvbXBvc2VfYXRv bWljX3RyZWVzID0gdHJ1ZTxicj4KJmd0OyAreyUgZW5kaWYgJX08YnI+CiZndDsgKzxicj4KJmd0 OyArIyM8YnI+CiZndDsgKyMjIE1lc3NhZ2VzPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyArPGJyPgom Z3Q7ICsjIEEgbm90aWNlIHRvIGZsYXNoIG9uIHRoZSBmcm9udCBwYWdlPGJyPgomZ3Q7ICtmcm9u dHBhZ2Vfbm90aWNlID08YnI+CiZndDsgKzxicj4KJmd0OyArIyBBIG5vdGljZSB0byBmbGFzaCBv biB0aGUgTmV3IFVwZGF0ZSBwYWdlPGJyPgomZ3Q7ICtuZXd1cGRhdGVfbm90aWNlID08YnI+CiZn dDsgKzxicj4KJmd0OyArdGVzdGluZ19hcHByb3ZhbF9tc2cgPSBUaGlzIHVwZGF0ZSBoYXMgcmVh Y2hlZCAlZCBkYXlzIGluIHRlc3Rpbmc8YnI+CiZndDsgYW5kIGNhbiBiZSBwdXNoZWQgdG8gc3Rh YmxlIG5vdyBpZiB0aGUgbWFpbnRhaW5lciB3aXNoZXM8YnI+CiZndDsgK25vdF95ZXRfdGVzdGVk X21zZyA9IFRoaXMgdXBkYXRlIGhhcyBub3QgeWV0IG1ldCB0aGUgbWluaW11bSB0ZXN0aW5nPGJy PgomZ3Q7IHJlcXVpcmVtZW50cyBkZWZpbmVkIGluIHRoZSAmbHQ7YSBocmVmPSZxdW90OzxhIGhy ZWY9Imh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9QIiByZWw9Im5vcmVmZXJyZXIiIHRh cmdldD0iX2JsYW5rIj5odHRwczovL2ZlZG9yYXByb2plY3QuPHdicj5vcmcvd2lraS9QPC9hPjxi cj4KJmd0OyBhY2thZ2VfdXBkYXRlX2FjY2VwdGFuY2VfPHdicj5jcml0ZXJpYSZxdW90OyZndDtQ YWNrYWdlIFVwZGF0ZSBBY2NlcHRhbmNlPGJyPgomZ3Q7IENyaXRlcmlhJmx0Oy9hJmd0Ozxicj4K Jmd0OyArbm90X3lldF90ZXN0ZWRfZXBlbF9tc2cgPSBUaGlzIHVwZGF0ZSBoYXMgbm90IHlldCBt ZXQgdGhlIG1pbmltdW08YnI+CiZndDsgdGVzdGluZyByZXF1aXJlbWVudHMgZGVmaW5lZCBpbiB0 aGUgJmx0O2EgaHJlZj0mcXVvdDs8YSBocmVmPSJodHRwczovL2ZlZG9yYXByb2plY3Qub3IiIHJl bD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcjwv YT48YnI+CiZndDsgZy93aWtpL0VQRUxfVXBkYXRlc19Qb2xpY3kmcXVvdDsmZ3Q7PHdicj5FUEVM IFVwZGF0ZXMgUG9saWN5Jmx0Oy9hJmd0Ozxicj4KJmd0OyArc3RhYmxla2FybWFfY29tbWVudCA9 IFRoaXMgdXBkYXRlIGhhcyByZWFjaGVkIHRoZSBzdGFibGUga2FybWE8YnI+CiZndDsgdGhyZXNo b2xkIGFuZCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgc3RhYmxlIHVwZGF0ZXMgcmVwb3NpdG9yeTxi cj4KJmd0OyArPGJyPgomZ3Q7ICt7JSBpZiBlbnYgLS0gJiMzOTtwcm9kdWN0aW9uJiMzOTsgJX08 YnI+CiZndDsgK8KgIMKgIMKgdGVzdGluZ19hcHByb3ZhbF9tc2dfYmFzZWRfb25fPHdicj5rYXJt YSA9IFRoaXMgdXBkYXRlIGhhczxicj4KJmd0OyByZWFjaGVkIHRoZSBzdGFibGUga2FybWEgdGhy ZXNob2xkIGFuZCBjYW4gYmUgcHVzaGVkIHRvIHN0YWJsZSBub3cgaWY8YnI+CiZndDsgdGhlIG1h aW50YWluZXIgd2lzaGVzLjxicj4KJmd0OyArwqAgwqAgwqBub3RfeWV0X3Rlc3RlZF9tc2dfYmFz ZWRfb25fPHdicj5rYXJtYSA9IFRoaXMgdXBkYXRlIGhhcyBub3QgcmVhY2hlZCB0aGUgc3RhYmxl IGthcm1hIHRocmVzaG9sZC48YnI+Cjxicj4KV2UgcHJvYmFibHkgZG8gd2FudCB0aGlzIHNlY3Rp b24gdG8gYmUgdGhlIHNhbWUgb24gc3RhZ2luZyBhbmQ8YnI+CnByb2R1Y3Rpb24uPGJyPgo8YnI+ CiZndDsgK3slIGVuZGlmICV9PGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgTGlicmF2YXRhciAtIElm IHRoaXMgaXMgdHJ1ZSBsaWJyYXZhdGFyIHdpbGwgd29yayBhcyBub3JtYWwuPGJyPgomZ3Q7IE90 aGVyd2lzZSwgYWxsPGJyPgomZ3Q7ICsjIGxpYnJhdmF0YXIgbGlua3Mgd2lsbCBiZSByZXBsYWNl ZCB3aXRoIHRoZSBzdHJpbmcgJnF1b3Q7PGEgaHJlZj0iaHR0cDovL2xpYnJhdmF0YXIub3JnIiBy ZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5saWJyYXZhdGFyLm9yZzwvYT4mcXVvdDs8 YnI+CiZndDsgc28gdGhhdDxicj4KJmd0OyArIyB0aGUgdGVzdHMgY2FuIHN0aWxsIHBhc3MuPGJy PgomZ3Q7ICtsaWJyYXZhdGFyX2VuYWJsZWQgPSBUcnVlPGJyPgomZ3Q7ICsjIFNldCB0aGlzIHRv IHRydWUgaWYgeW91IHdhbnQgdG8gZG8gZmVkZXJhdGVkIGRucyBsaWJyYXZhdGFyIGxvb2t1cDxi cj4KJmd0OyArbGlicmF2YXRhcl9kbnMgPSBGYWxzZTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFNl dCB0aGlzIHRvIFRydWUgaW4gb3JkZXIgdG8gc2VuZCBmZWRtc2cgbWVzc2FnZXMuPGJyPgomZ3Q7 ICtmZWRtc2dfZW5hYmxlZCA9IFRydWU8YnI+CiZndDsgKzxicj4KJmd0OyArIyBDYXB0Y2hhIC0g aWYgJiMzOTtjYXB0Y2hhLnNlY3JldCYjMzk7IGlzIG5vdCBOb25lLCB0aGVuIGl0IHdpbGwgYmUg dXNlZDxicj4KJmd0OyBmb3IgY29tbWVudHM8YnI+CiZndDsgKyMgY2FwdGNoYS5zZWNyZXQgbXVz dCBiZSAzMiB1cmwtc2FmZSBiYXNlNjQtZW5jb2RlZCBieXRlczxicj4KJmd0OyArIyB5b3UgY2Fu IGdlbmVyYXRlIGFmcmVzaCB3aXRoICZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyBjcnlwdG9ncmFwaHku ZmVybmV0LkZlcm5ldC48d2JyPmdlbmVyYXRlX2tleSgpPGJyPgomZ3Q7ICs8YnI+CiZndDsgK3sl IGlmIGVudiA9PSAmcXVvdDtzdGFnaW5nJnF1b3Q7ICV9PGJyPgomZ3Q7ICtjYXB0Y2hhLnNlY3Jl dCA9IHt7IGJvZGhpMkNhcHRjaGFTZWNyZXRTVEcgfX08YnI+CiZndDsgK3slIGVsc2UgJX08YnI+ CiZndDsgK2NhcHRjaGEuc2VjcmV0ID0ge3sgYm9kaGkyQ2FwdGNoYVNlY3JldCB9fTxicj4KJmd0 OyAreyUgZW5kaWYgJX08YnI+CiZndDsgKyMgRGltZW5zaW9uczxicj4KJmd0OyArY2FwdGNoYS5p bWFnZV93aWR0aCA9IDMwMDxicj4KJmd0OyArY2FwdGNoYS5pbWFnZV9oZWlnaHQgPSA4MDxicj4K Jmd0OyArIyBBbnkgdHJ1ZXR5cGUgZm9udCB3aWxsIGRvLjxicj4KJmd0OyArY2FwdGNoYS5mb250 X3BhdGggPSAvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vPHdicj5MaWJlcmF0aW9uTW9uby08 YnI+CiZndDsgUmVndWxhci50dGY8YnI+CiZndDsgK2NhcHRjaGEuZm9udF9zaXplID0gMzY8YnI+ CiZndDsgKyMgQ29sb3JzPGJyPgomZ3Q7ICtjYXB0Y2hhLmZvbnRfY29sb3IgPSAjMDAwMDAwPGJy PgomZ3Q7ICtjYXB0Y2hhLmJhY2tncm91bmRfY29sb3IgPSAjZmZmZmZmPGJyPgomZ3Q7ICsjIElu IHBpeGVsczxicj4KJmd0OyArY2FwdGNoYS5wYWRkaW5nID0gNTxicj4KJmd0OyArIyBJZiBhIGNh cHRjaGEgc2l0cyBhcm91bmQgZm9yIHRoaXMgbWFueSBzZWNvbmRzLCBpdCB3aWxsIHN0b3A8YnI+ CiZndDsgd29ya2luZy48YnI+CiZndDsgK2NhcHRjaGEudHRsID0gMzAwPGJyPgomZ3Q7ICs8YnI+ CiZndDsgKyNkYXRhZ3JlcHBlcl91cmwgPSA8YSBocmVmPSJodHRwOi8vbG9jYWxob3N0OjUwMDAi IHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9sb2NhbGhvc3Q6NTAwMDwv YT48YnI+CiZndDsgK3slIGlmIGVudiA9PSAmcXVvdDtzdGFnaW5nJnF1b3Q7ICV9PGJyPgomZ3Q7 ICtkYXRhZ3JlcHBlcl91cmwgPSA8YSBocmVmPSJodHRwczovL2FwcHMuc3RnLmZlZG9yYXByb2pl Y3Qub3JnL2RhdGFncmVwcGVyIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRw czovL2FwcHMuc3RnLjx3YnI+ZmVkb3JhcHJvamVjdC5vcmcvZGF0YWdyZXBwZXI8L2E+PGJyPgo8 YnI+CkkgdGhpbmsgdGhpcyB3aWxsIGRlZmluZSBkYXRhZ3JlcHBlcl91cmwgdHdpY2Ugb24gc3Rh Z2luZy4gV2UgcHJvYmFibHk8YnI+CndhbnQgYW4gaWYgc3RhdGVtZW50IGFib3ZlIHRoaXMgbGlu ZSB0b28uPGJyPgo8YnI+CiZndDsgK2JhZGdlX2lkcyA9IGJpbmFyeS1zdGFyfGJvdGgtYnVsbC1h bmQtPHdicj5zZWxmLXRyYW5zY2VuZGVkLXRlc3Rlci12aWlpfDx3YnI+Y2F0Y2hpbmctdGhlLWJ1 bGwtdGVzdGVyLWl2fDx3YnI+Y29ycG9yYXRlLWRyb25lfGNvcnBvcmF0ZS08d2JyPm92ZXJsb3Jk fGNvcnBvcmF0ZS1zaGlsbHw8d2JyPmRpc2NvdmVyeS1vZi10aGUtZm9vdHByaW50cy08d2JyPnRl c3Rlci1paXxpbi1zZWFyY2gtb2YtdGhlLTx3YnI+YnVsbC10ZXN0ZXItaXxpcy10aGlzLXRoaW5n LTx3YnI+b24tdXBkYXRlcy10ZXN0aW5nLWl8aXMtdGhpcy08d2JyPnRoaW5nLW9uLXVwZGF0ZXMt dGVzdGluZy1paXw8d2JyPmlzLXRoaXMtdGhpbmctb24tdXBkYXRlcy08d2JyPnRlc3RpbmctaWlp fGlzLXRoaXMtdGhpbmctb24tPHdicj51cGRhdGVzLXRlc3RpbmctaXZ8aXQtc3RpbGwtPHdicj53 b3JrcyF8bGlrZS1hLXJvY2stdXBkYXRlcy08d2JyPnN0YWJsZS1pfGxpa2UtYS1yb2NrLXVwZGF0 ZXMtPHdicj5zdGFibGUtaWl8bGlrZS1hLXJvY2stdXBkYXRlcy08d2JyPnN0YWJsZS1paWl8bGlr ZS1hLXJvY2stPHdicj51cGRhdGVzLXN0YWJsZS1pdnxtaWMtY2hlY2shLTx3YnI+dXBkYXRlcy10 ZXN0aW5nLXZ8bWlzc2VkLXRoZS08d2JyPnRyYWlufG92ZXJyaWRlLC15b3Utc2F5fDx3YnI+cGVy Y2VpdmluZy10aGUtYnVsbC10ZXN0ZXItPHdicj5paWl8cmVhY2hpbmctdGhlLXNvdXJjZS08d2Jy PnRlc3Rlci1peHxyZXR1cm4tdG8tc29jaWV0eS08d2JyPnRlc3Rlci14fHJpZGluZy10aGUtYnVs bC1ob21lLTx3YnI+dGVzdGVyLXZpfHN0b3AtdGhhdC11cGRhdGUhfDx3YnI+dGFrZS10aGlzLWFu ZC1jYWxsLW1lLWluLXRoZS08d2JyPm1vcm5pbmd8dGFtaW5nLXRoZS1idWxsLTx3YnI+dGVzdGVy LXZ8dGVjdG9uaWMhLXVwZGF0ZXMtPHdicj5zdGFibGUtdnx0aGUtYnVsbC10cmFuc2NlbmRlZC08 d2JyPnRlc3Rlci12aWl8d2hhdC1nb2VzLWFyb3VuZC08d2JyPmNvbWVzLWFyb3VuZC1rYXJtYS1p fHdoYXQtPHdicj5nb2VzLWFyb3VuZC1jb21lcy1hcm91bmQtPHdicj5rYXJtYS1paXx3aGF0LWdv ZXMtYXJvdW5kLTx3YnI+Y29tZXMtYXJvdW5kLWthcm1hLWlpaXx3aGF0LTx3YnI+Z29lcy1hcm91 bmQtY29tZXMtYXJvdW5kLTx3YnI+a2FybWEtaXZ8d2hpdGUtaGF0fHlvdS1jYW4tPHdicj5wcnkt aXQtZnJvbS1teS1jb2xkLC1kZWFkLTx3YnI+aGFuZHM8YnI+CiZndDsgK3slIGVsc2UgJX08YnI+ CiZndDsgK2RhdGFncmVwcGVyX3VybCA9IDxhIGhyZWY9Imh0dHBzOi8vYXBwcy5mZWRvcmFwcm9q ZWN0Lm9yZy9kYXRhZ3JlcHBlciIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0 cHM6Ly9hcHBzLmZlZG9yYXByb2plY3QuPHdicj5vcmcvZGF0YWdyZXBwZXI8L2E+PGJyPgomZ3Q7 ICtiYWRnZV9pZHMgPSBiaW5hcnktc3Rhcnxib3RoLWJ1bGwtYW5kLTx3YnI+c2VsZi10cmFuc2Nl bmRlZC10ZXN0ZXItPGJyPgomZ3Q7IHZpaWl8Y2F0Y2hpbmctdGhlLWJ1bGwtdGVzdGVyLTx3YnI+ aXZ8Y29ycG9yYXRlLWRyb25lfGNvcnBvcmF0ZS08YnI+CiZndDsgb3ZlcmxvcmR8Y29ycG9yYXRl LXNoaWxsfDx3YnI+ZGlzY292ZXJ5LW9mLXRoZS1mb290cHJpbnRzLTx3YnI+dGVzdGVyLWlpfGlu LTxicj4KJmd0OyBzZWFyY2gtb2YtdGhlLWJ1bGwtdGVzdGVyLWl8PHdicj5pcy10aGlzLXRoaW5n LW9uLXVwZGF0ZXMtPHdicj50ZXN0aW5nLWl8aXMtPGJyPgomZ3Q7IHRoaXMtdGhpbmctb24tdXBk YXRlcy10ZXN0aW5nLTx3YnI+aWl8aXMtdGhpcy10aGluZy1vbi11cGRhdGVzLTx3YnI+dGVzdGlu Zy08YnI+CiZndDsgaWlpfGlzLXRoaXMtdGhpbmctb24tdXBkYXRlcy08d2JyPnRlc3RpbmctaXZ8 aXQtc3RpbGwtd29ya3MhfDx3YnI+bGlrZS1hLXJvY2stPGJyPgomZ3Q7IHVwZGF0ZXMtc3RhYmxl LWl8bGlrZS1hLXJvY2stPHdicj51cGRhdGVzLXN0YWJsZS1paXxsaWtlLWEtcm9jay08d2JyPnVw ZGF0ZXMtPGJyPgomZ3Q7IHN0YWJsZS1paWl8bGlrZS1hLXJvY2stPHdicj51cGRhdGVzLXN0YWJs ZS1pdnxtaWMtY2hlY2shLTx3YnI+dXBkYXRlcy10ZXN0aW5nLTxicj4KJmd0OyB2fG1pc3NlZC10 aGUtdHJhaW58b3ZlcnJpZGUsLTx3YnI+eW91LXNheXxwZXJjZWl2aW5nLXRoZS1idWxsLTx3YnI+ dGVzdGVyLTxicj4KJmd0OyBpaWl8cmVhY2hpbmctdGhlLXNvdXJjZS08d2JyPnRlc3Rlci1peHxy ZXR1cm4tdG8tc29jaWV0eS08d2JyPnRlc3Rlci14fHJpZGluZy08YnI+CiZndDsgdGhlLWJ1bGwt aG9tZS10ZXN0ZXItdml8c3RvcC08d2JyPnRoYXQtdXBkYXRlIXx0YWtlLXRoaXMtYW5kLTx3YnI+ Y2FsbC1tZS1pbi08YnI+CiZndDsgdGhlLW1vcm5pbmd8dGFtaW5nLXRoZS1idWxsLTx3YnI+dGVz dGVyLXZ8dGVjdG9uaWMhLXVwZGF0ZXMtPHdicj5zdGFibGUtdnx0aGUtPGJyPgomZ3Q7IGJ1bGwt dHJhbnNjZW5kZWQtdGVzdGVyLXZpaXw8d2JyPndoYXQtZ29lcy1hcm91bmQtY29tZXMtYXJvdW5k LTx3YnI+a2FybWEtPGJyPgomZ3Q7IGl8d2hhdC1nb2VzLWFyb3VuZC1jb21lcy08d2JyPmFyb3Vu ZC1rYXJtYS1paXx3aGF0LWdvZXMtPHdicj5hcm91bmQtY29tZXMtPGJyPgomZ3Q7IGFyb3VuZC1r YXJtYS1paWl8d2hhdC1nb2VzLTx3YnI+YXJvdW5kLWNvbWVzLWFyb3VuZC1rYXJtYS1pdnw8d2Jy PndoaXRlLTxicj4KJmd0OyBoYXR8eW91LWNhbi1wcnktaXQtZnJvbS1teS08d2JyPmNvbGQsLWRl YWQtaGFuZHM8YnI+CiZndDsgK3slIGVuZGlmICV9PGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMjPGJy PgomZ3Q7ICsjIyBXaWtpIFRlc3QgQ2FzZXM8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICs8YnI+CiZn dDsgKyMjIFF1ZXJ5IHRoZSB3aWtpIGZvciB0ZXN0IGNhc2VzPGJyPgomZ3Q7ICtxdWVyeV93aWtp X3Rlc3RfY2FzZXMgPSBGYWxzZTxicj4KJmd0OyArd2lraV91cmwgPSA8YSBocmVmPSJodHRwczov L2ZlZG9yYXByb2plY3Qub3JnL3cvYXBpLnBocCIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9i bGFuayI+aHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93Lzx3YnI+YXBpLnBocDwvYT48YnI+CiZn dDsgK3Rlc3RfY2FzZV9iYXNlX3VybCA9IDxhIGhyZWY9Imh0dHBzOi8vZmVkb3JhcHJvamVjdC5v cmcvd2lraS8iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZmVkb3Jh cHJvamVjdC5vcmcvPHdicj53aWtpLzwvYT48YnI+CiZndDsgKzxicj4KJmd0OyArIyBFbWFpbCBk b21haW4gdG8gcHJlcGVuZCB1c2VybmFtZXMgdG88YnI+CiZndDsgK2RlZmF1bHRfZW1haWxfZG9t YWluID0gPGEgaHJlZj0iaHR0cDovL2ZlZG9yYXByb2plY3Qub3JnIiByZWw9Im5vcmVmZXJyZXIi IHRhcmdldD0iX2JsYW5rIj5mZWRvcmFwcm9qZWN0Lm9yZzwvYT48YnI+CiZndDsgKzxicj4KJmd0 OyArIyBkb21haW4gZm9yIGdlbmVyYXRlZCBtZXNzYWdlIElEczxicj4KJmd0OyAreyUgaWYgZW52 ID09ICZxdW90O3N0YWdpbmcmcXVvdDsgJX08YnI+CiZndDsgK21lc3NhZ2VfaWRfZW1haWxfZG9t YWluID0gPGEgaHJlZj0iaHR0cDovL2FkbWluLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZyIgcmVsPSJu b3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+YWRtaW4uc3RnLmZlZG9yYXByb2plY3Qub3JnPC9h Pjxicj4KJmd0OyAreyUgZWxzZSAlfTxicj4KJmd0OyArbWVzc2FnZV9pZF9lbWFpbF9kb21haW4g PSA8YSBocmVmPSJodHRwOi8vYWRtaW4uZmVkb3JhcHJvamVjdC5vcmciIHJlbD0ibm9yZWZlcnJl ciIgdGFyZ2V0PSJfYmxhbmsiPmFkbWluLmZlZG9yYXByb2plY3Qub3JnPC9hPjxicj4KJmd0OyAr eyUgZW5kaWYgJX08YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsgKyMjIE1hc2ggc2V0 dGluZ3M8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgSWYgZGVmaW5lZCwgdGhl IGJvZGhpIG1hc2hlciB3aWxsIGVuc3VyZSB0aGF0IG1lc3NhZ2VzIGFyZSBzaWduZWQ8YnI+CiZn dDsgd2l0aCB0aGUgZ2l2ZW4gY2VydDxicj4KJmd0OyAreyUgaWYgZW52ID09ICZxdW90O3N0YWdp bmcmcXVvdDsgJX08YnI+CiZndDsgK3JlbGVuZ19mZWRtc2dfY2VydG5hbWUgPSBzaGVsbC1ib2Ro aS08YnI+CiZndDsgPGEgaHJlZj0iaHR0cDovL2JhY2tlbmQwMS5zdGcucGh4Mi5mZWRvcmFwcm9q ZWN0Lm9yZyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+YmFja2VuZDAxLnN0Zy5w aHgyLjx3YnI+ZmVkb3JhcHJvamVjdC5vcmc8L2E+PGJyPgomZ3Q7ICt7JSBlbHNlICV9PGJyPgom Z3Q7ICt7JSBpZiBhbnNpYmxlX2hvc3RuYW1lID09ICYjMzk7Ym9kaGktYmFja2VuZDAxJiMzOTsg JX08YnI+CiZndDsgK3JlbGVuZ19mZWRtc2dfY2VydG5hbWUgPSBzaGVsbC1ib2RoaS08YnI+CiZn dDsgPGEgaHJlZj0iaHR0cDovL2JhY2tlbmQwMS5waHgyLmZlZG9yYXByb2plY3Qub3JnIiByZWw9 Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5iYWNrZW5kMDEucGh4Mi5mZWRvcmFwcm9qZWN0 Ljx3YnI+b3JnPC9hPjxicj4KJmd0OyAreyUgZWxzZSAlfTxicj4KJmd0OyArcmVsZW5nX2ZlZG1z Z19jZXJ0bmFtZSA9IHNoZWxsLWJvZGhpLTxicj4KJmd0OyA8YSBocmVmPSJodHRwOi8vYmFja2Vu ZDAzLnBoeDIuZmVkb3JhcHJvamVjdC5vcmciIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxh bmsiPmJhY2tlbmQwMy5waHgyLmZlZG9yYXByb2plY3QuPHdicj5vcmc8L2E+PGJyPgomZ3Q7ICt7 JSBlbmRpZiAlfTxicj4KJmd0OyAreyUgZW5kaWYgJX08YnI+CiZndDsgKzxicj4KJmd0OyArIyBU aGUgbWFzaGVyIGlzIGEgYm9kaGkgaW5zdGFuY2UgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY29t cG9zaW5nPGJyPgomZ3Q7IHRoZSB1cGRhdGU8YnI+CiZndDsgKyMgcmVwb3NpdG9yaWVzLCByZWdl bmVyYXRpbmcgbWV0cmljcywgc2VuZGluZyB1cGRhdGUgbm90aWNlcyw8YnI+CiZndDsgY2xvc2lu ZyBidWdzLDxicj4KJmd0OyArIyBhbmQgb3RoZXIgY29zdGx5IG9wZXJhdGlvbnMuwqAgVG8gc2V0 IGFuIGV4dGVybmFsIG1hc2hlciwgc2V0IHRoZTxicj4KJmd0OyBtYXNoZXIgdG88YnI+CiZndDsg KyMgdGhlIGJhc2V1cmwgb2YgdGhlIGJvZGhpIGluc3RhbmNlLsKgIElmIHNldCB0byBOb25lLCB0 aGlzIGJvZGhpPGJyPgomZ3Q7IGluc3RhbmNlPGJyPgomZ3Q7ICsjIHdpbGwgYWN0IGFzIGEgbWFz aGVyIGFzIHdlbGwuPGJyPgomZ3Q7ICsjbWFzaGVyID0gTm9uZTxicj4KJmd0OyArPGJyPgomZ3Q7 ICsjIFdoZXJlIHRvIGluaXRpYWxseSBtYXNoIHJlcG9zaXRvcmllczxicj4KJmd0OyAreyUgaWYg ZW52ID09ICZxdW90O3N0YWdpbmcmcXVvdDsgJX08YnI+CiZndDsgK21hc2hfZGlyID0gL3Zhci9j YWNoZS9ib2RoaS9tYXNoaW5nPGJyPgomZ3Q7ICt7JSBlbHNlICV9PGJyPgomZ3Q7ICttYXNoX3N0 YWdlX2RpciA9IC9tbnQva29qaS9tYXNoL3VwZGF0ZXM8YnI+CiZndDsgK3slIGVuZGlmICV9PGJy PgomZ3Q7ICs8YnI+CiZndDsgK21hc2hfY29uZiA9IC9ldGMvYm9kaGkvbWFzaC5jb25mPGJyPgom Z3Q7ICs8YnI+CiZndDsgK2NyZWF0ZXJlcG9fY2FjaGVfZGlyID0gL3Zhci9jYWNoZS9jcmVhdGVy ZXBvPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMjIE91ciBwZXJpb2RpYyBqb2JzPGJyPgomZ3Q7ICsj am9icyA9IGNsZWFuX3JlcG8gbmFnbWFpbCBmaXhfYnVnX3RpdGxlcyBjYWNoZV9yZWxlYXNlX2Rh dGE8YnI+CiZndDsgYXBwcm92ZV90ZXN0aW5nX3VwZGF0ZXM8YnI+CiZndDsgK2pvYnMgPSBjYWNo ZV9yZWxlYXNlX2RhdGEgcmVmcmVzaF9tZXRyaWNzIGFwcHJvdmVfdGVzdGluZ191cGRhdGVzPGJy PgomZ3Q7ICs8YnI+CiZndDsgKyMjIENvbXBzIGNvbmZpZ3VyYXRpb248YnI+CiZndDsgK2NvbXBz X2RpciA9IC92YXIvY2FjaGUvYm9kaGkvY29tcHM8YnI+CiZndDsgK2NvbXBzX3VybCA9IDxhIGhy ZWY9Imh0dHBzOi8vcGFndXJlLmlvL2ZlZG9yYS1jb21wcy5naXQiIHJlbD0ibm9yZWZlcnJlciIg dGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vcGFndXJlLmlvL2ZlZG9yYS08d2JyPmNvbXBzLmdpdDwv YT48YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsgKyMjIE1pcnJvciBzZXR0aW5nczxi cj4KJmd0OyArIyM8YnI+CiZndDsgKzxicj4KJmd0OyArZmlsZV91cmwgPSA8YSBocmVmPSJodHRw czovL2Rvd25sb2FkLmZlZG9yYXByb2plY3Qub3JnL3B1Yi9mZWRvcmEvbGludXgvdXBkYXQiIHJl bD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZG93bmxvYWQuPHdicj5mZWRv cmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhLzx3YnI+bGludXgvdXBkYXQ8L2E+PGJyPgomZ3Q7IGVz PGJyPgomZ3Q7ICttYXN0ZXJfcmVwb21kID0gPGEgaHJlZj0iaHR0cDovL2Rvd25sb2FkMDEucGh4 Mi5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhLyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9 Il9ibGFuayI+aHR0cDovL2Rvd25sb2FkMDEucGh4Mi48d2JyPmZlZG9yYXByb2plY3Qub3JnL3B1 Yi9mZWRvcmEvPC9hPjxicj4KJmd0OyBsaW51eC91cGRhdGVzLyVzLyVzL3JlcG9kYXRhLzx3YnI+ cmVwb21kLnhtbDxicj4KJmd0OyArZmVkb3JhX21hc3Rlcl9yZXBvbWQgPSA8YSBocmVmPSJodHRw Oi8vZG93bmxvYWQwMS5waHgyLmZlZG9yYXByb2plY3Qub3JnL3B1Yi8iIHJlbD0ibm9yZWZlcnJl ciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9kb3dubG9hZDAxLnBoeDIuPHdicj5mZWRvcmFwcm9q ZWN0Lm9yZy9wdWIvPC9hPjxicj4KJmd0OyBmZWRvcmEvbGludXgvdXBkYXRlcy8lcy8lcy88d2Jy PnJlcG9kYXRhL3JlcG9tZC54bWw8YnI+CiZndDsgK2ZlZG9yYV9lcGVsX21hc3Rlcl9yZXBvbWQg PSA8YSBocmVmPSJodHRwOi8vZG93bmxvYWQwMS5waHgyLmZlZG9yYXByb2plY3Qub3JnIiByZWw9 Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZG93bmxvYWQwMS5waHgyLjx3YnI+ ZmVkb3JhcHJvamVjdC5vcmc8L2E+PGJyPgomZ3Q7IC9wdWIvZXBlbC8lcy8lcy9yZXBvZGF0YS88 d2JyPnJlcG9tZC54bWw8YnI+CiZndDsgKzxicj4KJmd0OyArZmVkb3JhX3N0YWJsZV9tYXN0ZXJf cmVwb21kID0gPGEgaHJlZj0iaHR0cDovL2Rvd25sb2FkMDEucGh4Mi5mZWRvcmFwcm9qZWN0Lm8i IHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9kb3dubG9hZDAxLnBoeDIu PHdicj5mZWRvcmFwcm9qZWN0Lm88L2E+PGJyPgomZ3Q7IHJnL3B1Yi9mZWRvcmEvbGludXgvdXBk YXRlcy8lPHdicj5zLyVzL3JlcG9kYXRhL3JlcG9tZC54bWw8YnI+CiZndDsgK2ZlZG9yYV90ZXN0 aW5nX21hc3Rlcl9yZXBvbWQgPSA8YSBocmVmPSJodHRwOi8vZG93bmxvYWQwMS5waHgyLmZlZG9y YXByb2plY3QiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9kb3dubG9h ZDAxLnBoeDIuPHdicj5mZWRvcmFwcm9qZWN0PC9hPi48YnI+CiZndDsgb3JnL3B1Yi9mZWRvcmEv bGludXgvdXBkYXRlcy88d2JyPnRlc3RpbmcvJXMvJXMvcmVwb2RhdGEvcmVwb21kLjx3YnI+eG1s PGJyPgomZ3Q7ICtmZWRvcmFfZXBlbF9zdGFibGVfbWFzdGVyXzx3YnI+cmVwb21kID0gPGEgaHJl Zj0iaHR0cDovL2Rvd25sb2FkMDEucGh4Mi5mZWRvcmFwcm9qIiByZWw9Im5vcmVmZXJyZXIiIHRh cmdldD0iX2JsYW5rIj5odHRwOi8vZG93bmxvYWQwMS5waHgyLjx3YnI+ZmVkb3JhcHJvajwvYT48 YnI+CiZndDsgPGEgaHJlZj0iaHR0cDovL2VjdC5vcmcvcHViL2VwZWwvJXMvJXMvcmVwb2RhdGEv cmVwb21kLnhtbCIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+ZWN0Lm9yZy9wdWIv ZXBlbC8lcy8lcy88d2JyPnJlcG9kYXRhL3JlcG9tZC54bWw8L2E+PGJyPgomZ3Q7ICtmZWRvcmFf ZXBlbF90ZXN0aW5nX21hc3Rlcl88d2JyPnJlcG9tZCA9IDxhIGhyZWY9Imh0dHA6Ly9kb3dubG9h ZDAxLnBoeDIuZmVkb3JhcHJvIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRw Oi8vZG93bmxvYWQwMS5waHgyLjx3YnI+ZmVkb3JhcHJvPC9hPjxicj4KJmd0OyA8YSBocmVmPSJo dHRwOi8vamVjdC5vcmcvcHViL2VwZWwvdGVzdGluZy8lcy8lcy9yZXBvZGF0YS9yZXBvbWQueG1s IiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5qZWN0Lm9yZy9wdWIvZXBlbC90ZXN0 aW5nLyVzLyU8d2JyPnMvcmVwb2RhdGEvcmVwb21kLnhtbDwvYT48YnI+CiZndDsgKzxicj4KJmd0 OyArIyMgVGhlIGJhc2UgdXJsIG9mIHRoaXMgYXBwbGljYXRpb248YnI+CiZndDsgK3slIGlmIGVu diA9PSAmcXVvdDtzdGFnaW5nJnF1b3Q7ICV9PGJyPgomZ3Q7ICtiYXNlX2FkZHJlc3MgPSA8YSBo cmVmPSJodHRwczovL2JvZGhpLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZy8iIHJlbD0ibm9yZWZlcnJl ciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vYm9kaGkuc3RnLjx3YnI+ZmVkb3JhcHJvamVjdC5v cmcvPC9hPjxicj4KJmd0OyAreyUgZWxzZSAlfTxicj4KJmd0OyArYmFzZV9hZGRyZXNzID0gPGEg aHJlZj0iaHR0cHM6Ly9ib2RoaS5mZWRvcmFwcm9qZWN0Lm9yZy8iIHJlbD0ibm9yZWZlcnJlciIg dGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vYm9kaGkuZmVkb3JhcHJvamVjdC48d2JyPm9yZy88L2E+ PGJyPgomZ3Q7ICt7JSBlbmRpZiAlfTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIyBTdXBwb3J0ZWQg dXBkYXRlIHR5cGVzPGJyPgomZ3Q7ICt1cGRhdGVfdHlwZXMgPSBidWdmaXggZW5oYW5jZW1lbnQg c2VjdXJpdHkgbmV3cGFja2FnZTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIyBTdXBwb3J0ZWQgYXJj aGl0ZWNodXJlczxicj4KJmd0OyArIyM8YnI+CiZndDsgKyMjIFRvIGhhbmRsZSBhcmNoIG5hbWUg Y2hhbmdlcyBiZXR3ZWVuIHJlbGVhc2VzLCB5b3U8YnI+CiZndDsgKyMjIGNhbiBhbHNvIGNvbmZp Z3VyZSBib2RoaSB0byBzdXBwb3J0IG9uZSBhcmNoICpvcio8YnI+CiZndDsgKyMjIGFub3RoZXIu IEZvciBleGFtcGxlLCBFUEVMNSBtYXNoZXMgcHJvZHVjZSAmIzM5O3BwYyYjMzk7PGJyPgomZ3Q7 ICsjIyByZXBvcywgd2hlcmUgRVBFTDYgcHJvZHVjZXMgJiMzOTtwcGM2NCYjMzk7LiBUbyBoYW5k bGUgdGhpczxicj4KJmd0OyArIyMgc2NlbmFyaW8sIHlvdSBjYW4gc3BlY2lmeSBzb21ldGhpbmcg bGlrZTo8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICsjI8KgIMKgYXJjaGVzID0gcHBjL3BwYzY0PGJy PgomZ3Q7ICsjIzxicj4KJmd0OyAreyBpZiBlbnYgPT0gJnF1b3Q7c3RhZ2luZyZxdW90OyAlfTxi cj4KJmd0OyArYXJjaGVzID0gaTM4NiB4ODZfNjQgYXJtaGZwPGJyPgomZ3Q7ICt7JSBlbHNlICV9 PGJyPgomZ3Q7ICthcmNoZXMgPSB4ODZfNjQgYXJtaGZwIGkzODY8YnI+CiZndDsgK3slIGVuZGlm ICV9PGJyPgo8YnI+ClRoZSBvcmRlciBvZiB0aGUgbGlzdCBpc24mIzM5O3Qgc2lnbmlmaWNhbnQg aGVyZSwgc28gSSB0aGluayB3ZSBjYW48YnI+CmVsaW1pbmF0ZSB0aGUgaWYgc3RhdGVtZW50IGFu ZCBtYWtlIHRoZW0gdGhlIHNhbWUuPGJyPgo8YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZn dDsgKyMjIEVtYWlsIHNldHRpbmc8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICs8YnI+CiZndDsgK3sg aWYgZW52ID09ICZxdW90O3Byb2R1Y3Rpb24mcXVvdDsgfTxicj4KJmd0OyArc210cF9zZXJ2ZXIg PSBiYXN0aW9uPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgVGhlIHVwZGF0ZXMgc3lzdGVtIGl0c2Vs Zi7CoCBUaGlzIGVtYWlsIGFkZHJlc3MgaXMgdXNlZCBpbiBmZXRjaGluZzxicj4KJmd0OyBCdWd6 aWxsYTxicj4KJmd0OyArIyBpbmZvcm1hdGlvbiwgYXMgd2VsbCBhcyBlbWFpbCBub3RpZmljYXRp b25zPGJyPgomZ3Q7ICtib2RoaV9lbWFpbCA9IDxhIGhyZWY9Im1haWx0bzp1cGRhdGVzQGZlZG9y YXByb2plY3Qub3JnIj51cGRhdGVzQGZlZG9yYXByb2plY3Qub3JnPC9hPjxicj4KJmd0OyArYm9k aGlfcGFzc3dvcmQgPSB7eyBib2RoaUJ1Z3ppbGxhUGFzc3dvcmQgfX08YnI+CiZndDsgK3slIGVs c2UgJX08YnI+CiZndDsgK2JvZGhpX2VtYWlsID0gPGEgaHJlZj0ibWFpbHRvOnVwZGF0ZXNAZmVk b3JhcHJvamVjdC5vcmciPnVwZGF0ZXNAZmVkb3JhcHJvamVjdC5vcmc8L2E+PGJyPgomZ3Q7ICt7 JSBlbmRpZiAlfTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFRoZSBhZGRyZXNzIHRoYXQgZ2V0cyB0 aGUgcmVxdWVzdHM8YnI+CiZndDsgK3JlbGVhc2VfdGVhbV9hZGRyZXNzID0gPGEgaHJlZj0ibWFp bHRvOmJvZGhpYWRtaW4tbWVtYmVyc0BmZWRvcmFwcm9qZWN0Lm9yZyI+Ym9kaGlhZG1pbi1tZW1i ZXJzQDx3YnI+ZmVkb3JhcHJvamVjdC5vcmc8L2E+PGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgVGhl IGFkZHJlc3MgdG8gbm90aWZ5IHdoZW4gc2VjdXJpdHkgdXBkYXRlcyBhcmUgaW5pdGlhbGx5IGFk ZGVkIHRvPGJyPgomZ3Q7IGJvZGhpPGJyPgomZ3Q7ICtzZWN1cml0eV90ZWFtID0gPGEgaHJlZj0i bWFpbHRvOnNlY3VyaXR5X3Jlc3BvbnMtbWVtYmVyc0BmZWRvcmFwcm9qZWN0Lm9yZyI+c2VjdXJp dHlfcmVzcG9ucy1tZW1iZXJzQDx3YnI+ZmVkb3JhcHJvamVjdC5vcmc8L2E+PGJyPgomZ3Q7ICs8 YnI+CiZndDsgKyMgUHVibGljIGFubm91bmNlbWVudCBsaXN0czxicj4KJmd0OyArZmVkb3JhX2Fu bm91bmNlX2xpc3QgPSA8YSBocmVmPSJtYWlsdG86cGFja2FnZS1hbm5vdW5jZUBsaXN0cy5mZWRv cmFwcm9qZWN0Lm9yZyI+cGFja2FnZS1hbm5vdW5jZUBsaXN0cy48d2JyPmZlZG9yYXByb2plY3Qu b3JnPC9hPjxicj4KJmd0OyArZmVkb3JhX3Rlc3RfYW5ub3VuY2VfbGlzdCA9IDxhIGhyZWY9Im1h aWx0bzp0ZXN0QGxpc3RzLmZlZG9yYXByb2plY3Qub3JnIj50ZXN0QGxpc3RzLmZlZG9yYXByb2pl Y3Qub3JnPC9hPjxicj4KJmd0OyArZmVkb3JhX2VwZWxfYW5ub3VuY2VfbGlzdCA9IGVwZWwtcGFj a2FnZS1hbm5vdW5jZUBsaXN0cy48d2JyPmZlZG9yYXByb2plYzxicj4KJmd0OyA8YSBocmVmPSJo dHRwOi8vdC5vcmciIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPnQub3JnPC9hPjxi cj4KJmd0OyArZmVkb3JhX2VwZWxfdGVzdF9hbm5vdW5jZV88d2JyPmxpc3QgPSA8YSBocmVmPSJt YWlsdG86ZXBlbC1kZXZlbEBsaXN0cy5mZWRvcmFwcm9qZWN0Lm9yZyI+ZXBlbC1kZXZlbEBsaXN0 cy48d2JyPmZlZG9yYXByb2plY3Qub3JnPC9hPjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFN1cGVy dXNlciBncm91cHM8YnI+CiZndDsgK2FkbWluX2dyb3VwcyA9IHByb3ZlbnRlc3RlcnMgc2VjdXJp dHlfcmVzcG9ucyBib2RoaWFkbWluIHN5c2FkbWluLTxicj4KJmd0OyBtYWluPGJyPgomZ3Q7ICs8 YnI+CiZndDsgKyMgVXNlcnMgdGhhdCB3ZSBkb24mIzM5O3Qgd2FudCB0byBzaG93IHVwIGluIHRo ZSAmcXVvdDtsZWFkZXJib2FyZChzKSZxdW90Ozxicj4KJmd0OyArc3RhdHNfYmxhY2tsaXN0ID0g Ym9kaGkgYW5vbnltb3VzIGF1dG9xYSB0YXNrb3Ryb248YnI+CiZndDsgKzxicj4KJmd0OyArIyBB IGxpc3Qgb2Ygbm9uLXBlcnNvbiB1c2Vyczxicj4KJmd0OyArc3lzdGVtX3VzZXJzID0gYm9kaGkg YXV0b3FhIHRhc2tvdHJvbjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFRoZSBtYXggbGVuZ3RoIGZv ciBhbiB1cGRhdGUgdGl0bGUgYmVmb3JlIHdlIHRydW5jYXRlIGl0IGluIHRoZTxicj4KJmd0OyB3 ZWIgdWk8YnI+CiZndDsgK21heF91cGRhdGVfbGVuZ3RoX2Zvcl91aSA9IDcwPGJyPgomZ3Q7ICs8 YnI+CiZndDsgKyMgVGhlIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIGNhbGN1bGF0aW5nIHRoZSAm IzM5O3RvcCB0ZXN0ZXJzJiMzOTsgbWV0cmljPGJyPgomZ3Q7ICt0b3BfdGVzdGVyc190aW1lZnJh bWUgPSA5MDA8YnI+CiZndDsgKzxicj4KJmd0OyArIyBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUg cHJvdmVudGVzdGVyczxicj4KJmd0OyArcHJvdmVudGVzdGVyc19lbWFpbCA9IDxhIGhyZWY9Im1h aWx0bzpwcm92ZW50ZXN0ZXJzLW1lbWJlcnNAZmVkb3JhcHJvamVjdC5vcmciPnByb3ZlbnRlc3Rl cnMtbWVtYmVyc0A8d2JyPmZlZG9yYXByb2plY3Qub3JnPC9hPjxicj4KJmd0OyArPGJyPgomZ3Q7 ICsjIERpc2FibGVkIGZvciB0aGUgaW5pdGlhbCByZWxlYXNlLjxicj4KJmd0OyArc3RhY2tzX2Vu YWJsZWQgPSBGYWxzZTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFRoZXNlIGFyZSB0aGUgZGVmYXVs dCByZXF1aXJlbWVudHMgdGhhdCB3ZSBhcHBseSB0byBzdGFja3MsPGJyPgomZ3Q7IHBhY2thZ2Vz LCBhbmQ8YnI+CiZndDsgKyMgdXBkYXRlcy7CoCBVc2VycyBoYXZlIGZyZWUtcmVpZ24gdG8gb3Zl cnJpZGUgdGhlbSBmb3IgZWFjaCBraW5kIG9mPGJyPgomZ3Q7IGVudGl0eS7CoCBBdDxicj4KJmd0 OyArIyB0aGUgZW5kIG9mIHRoZSBkYXksIHdlIG9ubHkgY29uc2lkZXIgdGhlIHJlcXVpcmVtZW50 cyBkZWZpbmVkIGJ5PGJyPgomZ3Q7IHNpbmdsZTxicj4KJmd0OyArIyB1cGRhdGVzIHRoZW1zZWx2 ZXMgd2hlbiBnYXRpbmcgaW4gdGhlIGJhY2tlbmQgbWFzaGVyIHByb2Nlc3MuPGJyPgomZ3Q7ICtz aXRlX3JlcXVpcmVtZW50cyA9IGRlcGNoZWNrIHVwZ3JhZGVwYXRoPGJyPgomZ3Q7ICsjIyBTb21l IGRheSB3ZSYjMzk7bGwgaGF2ZSBycG1ncmlsbCwgYW5kIHRoYXQgd2lsbCBiZSBjb29sLsKgIEFz ayB0ZmxpbmsuPGJyPgomZ3Q7ICsjc2l0ZV9yZXF1aXJlbWVudHMgPSBkZXBjaGVjayB1cGdyYWRl cGF0aCBycG1ncmlsbDxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFdoZXJlIGRvIHdlIHNlbmQgdXBk YXRlIGFubm91bmNlbWVudHMgdG8gPzxicj4KJmd0OyArIyBUaGVzZSB2YXJpYWJsZXMgc2hvdWxk IGJlIG5hbWVkIHBlcjo8YnI+CiZndDsgUmVsZWFzZS5wcmVmaXhfaWQubG93ZXIoKV88d2JyPmFu bm91bmNlX2xpc3Q8YnI+CiZndDsgKyNmZWRvcmFfYW5ub3VuY2VfbGlzdCA9PGJyPgomZ3Q7ICsj ZmVkb3JhX3Rlc3RfYW5ub3VuY2VfbGlzdCA9PGJyPgomZ3Q7ICsjZmVkb3JhX2VwZWxfYW5ub3Vu Y2VfbGlzdCA9PGJyPgomZ3Q7ICsjZmVkb3JhX2VwZWxfdGVzdF9hbm5vdW5jZV88d2JyPmxpc3Qg PTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIENhY2hlIHNldHRpbmdzPGJyPgomZ3Q7ICtkb2dwaWxl LmNhY2hlLmJhY2tlbmQgPSBkb2dwaWxlLmNhY2hlLmRibTxicj4KJmd0OyArZG9ncGlsZS5jYWNo ZS5leHBpcmF0aW9uX3RpbWUgPSAxMDA8YnI+CiZndDsgK2RvZ3BpbGUuY2FjaGUuYXJndW1lbnRz Ljx3YnI+ZmlsZW5hbWUgPSAvdmFyL2NhY2hlL2JvZGhpL2RvZ3BpbGUtPGJyPgomZ3Q7IGNhY2hl LmRibTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIEV4Y2x1ZGUgc2VuZGluZyBlbWFpbHMgdG8gdGhl c2UgdXNlcnM8YnI+CiZndDsgK2V4Y2x1ZGVfbWFpbCA9IGF1dG9xYSB0YXNrb3Ryb248YnI+CiZn dDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsgKyMjIEJ1aWxkc3lzdGVtIHNldHRpbmdzPGJyPgom Z3Q7ICsjIzxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFdoYXQgYnVpbGRzeXN0ZW0gZG8gd2Ugd2Fu dCB0byB1c2U/wqAgRm9yIGRldmVsb3BtZW50LCB3ZSYjMzk7bGwgdXNlIGE8YnI+CiZndDsgZmFr ZTxicj4KJmd0OyArIyBidWlsZHN5c3RlbSB0aGF0IGFsd2F5cyBkb2VzIHdoYXQgd2UgdGVsbCBp dCB0byBkby7CoCBGb3I8YnI+CiZndDsgcHJvZHVjdGlvbiwgd2UmIzM5O2xsPGJyPgomZ3Q7ICsj IHdhbnQgdG8gdXNlICYjMzk7a29qaSYjMzk7Ljxicj4KJmd0OyArYnVpbGRzeXN0ZW0gPSBrb2pp PGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgS29qaSYjMzk7cyBYTUwtUlBDIGh1Yjxicj4KJmd0OyAr eyBpZiBlbnYgPT0gJnF1b3Q7c3RhZ2luZyZxdW90OyAlfTxicj4KJmd0OyAra29qaV9odWIgPSA8 YSBocmVmPSJodHRwczovL2tvamkuc3RnLmZlZG9yYXByb2plY3Qub3JnL2tvamlodWIiIHJlbD0i bm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8va29qaS5zdGcuPHdicj5mZWRvcmFw cm9qZWN0Lm9yZy9rb2ppaHViPC9hPjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFJvb3QgdXJsIG9m IHRoZSBLb2ppIGluc3RhbmNlIHRvIHBvaW50IHRvLiBObyB0cmFpbGluZyBzbGFzaDxicj4KJmd0 OyAra29qaV91cmwgPSA8YSBocmVmPSJodHRwOi8va29qaS5zdGcuZmVkb3JhcHJvamVjdC5vcmci IHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9rb2ppLnN0Zy5mZWRvcmFw cm9qZWN0Ljx3YnI+b3JnPC9hPjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFVSTCBvZiB3aGVyZSB1 c2VycyBzaG91bGQgZ28gdG8gc2V0IHVwIHRoZWlyIG5vdGlmaWNhdGlvbnM8YnI+CiZndDsgK2Zt bl91cmwgPSA8YSBocmVmPSJodHRwczovL2FwcHMuc3RnLmZlZG9yYXByb2plY3Qub3JnL25vdGlm aWNhdGlvbnMvIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2FwcHMu c3RnLjx3YnI+ZmVkb3JhcHJvamVjdC5vcmcvPHdicj5ub3RpZmljYXRpb25zLzwvYT48YnI+CiZn dDsgKzxicj4KJmd0OyArIyBVUkwgb2YgdGhlIHJlc3VsdHNkYiBmb3IgaW50ZWdyYXRpbmcgY2hl Y2tzIGFuZCBzdHVmZjxicj4KJmd0OyArcmVzdWx0c2RiX3VybCA9IDxhIGhyZWY9Imh0dHBzOi8v dGFza290cm9uLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXN1bHRzZGIvIiByZWw9Im5vcmVmZXJy ZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL3Rhc2tvdHJvbi5zdGcuPHdicj5mZWRvcmFwcm9q ZWN0Lm9yZy9yZXN1bHRzZGIvPC9hPjxicj4KJmd0OyArcmVzdWx0c2RiX2FwaV91cmwgPSA8YSBo cmVmPSJodHRwczovL3Rhc2tvdHJvbi5zdGcuZmVkb3JhcHJvamVjdC5vcmcvcmVzdWx0c2QiIHJl bD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vdGFza290cm9uLnN0Zy48d2Jy PmZlZG9yYXByb2plY3Qub3JnL3Jlc3VsdHNkPC9hPjxicj4KJmd0OyBiX2FwaS88YnI+CiZndDsg Kzxicj4KJmd0OyArZmVkbWVudS51cmwgPSA8YSBocmVmPSJodHRwczovL2FwcHMuc3RnLmZlZG9y YXByb2plY3Qub3JnL2ZlZG1lbnUiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0 dHBzOi8vYXBwcy5zdGcuPHdicj5mZWRvcmFwcm9qZWN0Lm9yZy9mZWRtZW51PC9hPjxicj4KJmd0 OyArZmVkbWVudS5kYXRhX3VybCA9IDxhIGhyZWY9Imh0dHBzOi8vYXBwcy5zdGcuZmVkb3JhcHJv amVjdC5vcmcvanMvZGF0YS5qcyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0 cHM6Ly9hcHBzLnN0Zy48d2JyPmZlZG9yYXByb2plY3Qub3JnL2pzL2RhdGEuanM8L2E+PGJyPgom Z3Q7ICt7JSBlbHNlICV9PGJyPgomZ3Q7ICsjIEtvamkmIzM5O3MgWE1MLVJQQyBodWI8YnI+CiZn dDsgK2tvamlfaHViID0gPGEgaHJlZj0iaHR0cHM6Ly9rb2ppLmZlZG9yYXByb2plY3Qub3JnL2tv amlodWIiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8va29qaS5mZWRv cmFwcm9qZWN0Ljx3YnI+b3JnL2tvamlodWI8L2E+PGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgUm9v dCB1cmwgb2YgdGhlIEtvamkgaW5zdGFuY2UgdG8gcG9pbnQgdG8uIE5vIHRyYWlsaW5nIHNsYXNo PGJyPgomZ3Q7ICtrb2ppX3VybCA9IDxhIGhyZWY9Imh0dHBzOi8va29qaS5mZWRvcmFwcm9qZWN0 Lm9yZyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9rb2ppLmZlZG9y YXByb2plY3Qub3JnPC9hPjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFVSTCBvZiB3aGVyZSB1c2Vy cyBzaG91bGQgZ28gdG8gc2V0IHVwIHRoZWlyIG5vdGlmaWNhdGlvbnM8YnI+CiZndDsgK2Ztbl91 cmwgPSA8YSBocmVmPSJodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvbm90aWZpY2F0aW9u cy8iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vYXBwcy5mZWRvcmFw cm9qZWN0Ljx3YnI+b3JnL25vdGlmaWNhdGlvbnMvPC9hPjxicj4KJmd0OyArPGJyPgomZ3Q7ICsj IFVSTCBvZiB0aGUgcmVzdWx0c2RiIGZvciBpbnRlZ3JhdGluZyBjaGVja3MgYW5kIHN0dWZmPGJy PgomZ3Q7ICtyZXN1bHRzZGJfdXJsID0gPGEgaHJlZj0iaHR0cHM6Ly90YXNrb3Ryb24uZmVkb3Jh cHJvamVjdC5vcmcvcmVzdWx0c2RiLyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+ aHR0cHM6Ly90YXNrb3Ryb24uPHdicj5mZWRvcmFwcm9qZWN0Lm9yZy9yZXN1bHRzZGIvPC9hPjxi cj4KJmd0OyArcmVzdWx0c2RiX2FwaV91cmwgPSA8YSBocmVmPSJodHRwczovL3Rhc2tvdHJvbi5m ZWRvcmFwcm9qZWN0Lm9yZy9yZXN1bHRzZGJfYXAiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJf YmxhbmsiPmh0dHBzOi8vdGFza290cm9uLjx3YnI+ZmVkb3JhcHJvamVjdC5vcmcvcmVzdWx0c2Ri X2FwPC9hPjxicj4KJmd0OyBpLzxicj4KJmd0OyArPGJyPgomZ3Q7ICtmZWRtZW51LnVybCA9IDxh IGhyZWY9Imh0dHBzOi8vYXBwcy5mZWRvcmFwcm9qZWN0Lm9yZy9mZWRtZW51IiByZWw9Im5vcmVm ZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC48d2JyPm9y Zy9mZWRtZW51PC9hPjxicj4KJmd0OyArZmVkbWVudS5kYXRhX3VybCA9IDxhIGhyZWY9Imh0dHBz Oi8vYXBwcy5mZWRvcmFwcm9qZWN0Lm9yZy9qcy9kYXRhLmpzIiByZWw9Im5vcmVmZXJyZXIiIHRh cmdldD0iX2JsYW5rIj5odHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC48d2JyPm9yZy9qcy9kYXRh LmpzPC9hPjxicj4KJmd0OyAreyUgZW5kaWYgJX08YnI+CiZndDsgKzxicj4KJmd0OyArIyBLb2pp IEtyYiBzdHVmZjxicj4KJmd0OyAra3JiX2NjYWNoZSA9IC90bXAva3JiNWNjXyV7dWlkfTxicj4K Jmd0OyAra3JiX3ByaW5jaXBhbCA9IGJvZGhpL2JvZGhpe3sgZW52X3N1ZmZpeCB9fS5mZWRvcmFw cm9qZWN0Lm9yZ0B7ezxicj4KJmd0OyBpcGFfcmVhbG0gfX08YnI+CiZndDsgK2tyYl9rZXl0YWIg PSAvZXRjL2tyYjUuYm9kaGlfYm9kaGl7eyBlbnZfc3VmZml4PGJyPgomZ3Q7IH19LmZlZG9yYXBy b2plY3Qub3JnLmtleXRhYjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyArIyMgQUNM IHN5c3RlbTxicj4KJmd0OyArIyMgQ2hvaWNlcyBhcmUgJiMzOTtwa2dkYiYjMzk7LCB3aGljaCB3 aWxsIHNlbmQgYSBKU09OIHF1ZXJ5IHRvIHRoZTxicj4KJmd0OyBwa2dkYl91cmwgYmVsb3csPGJy PgomZ3Q7ICsjIyBvciAmIzM5O2R1bW15JiMzOTssIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiBn dWVzdCBjcmVkZW50aWFscyAodXNlZCBmb3I8YnI+CiZndDsgbG9jYWw8YnI+CiZndDsgKyMjIGRl dmVsb3BtZW50KS48YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICs8YnI+CiZndDsgK3sgaWYgZW52ID09 ICZxdW90O3N0YWdpbmcmcXVvdDsgJX08YnI+CiZndDsgK2FjbF9zeXN0ZW0gPSBkdW1teTxicj4K Jmd0OyArPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyArIyMgUGFja2FnZSBEQjxicj4KJmd0OyArIyM8 YnI+CiZndDsgK3BrZ2RiX3VybCA9IDxhIGhyZWY9Imh0dHBzOi8vYWRtaW4uc3RnLmZlZG9yYXBy b2plY3Qub3JnL3BrZ2RiIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczov L2FkbWluLnN0Zy48d2JyPmZlZG9yYXByb2plY3Qub3JnL3BrZ2RiPC9hPjxicj4KJmd0OyArPGJy PgomZ3Q7ICtpbml0aWFsX2J1Z19tc2cgPSAlcyBoYXMgYmVlbiBzdWJtaXR0ZWQgYXMgYW4gdXBk YXRlIHRvICVzLiAlczxicj4KJmd0OyArc3RhYmxlX2J1Z19tc2cgPSAlcyBoYXMgYmVlbiBwdXNo ZWQgdG8gdGhlICVzIHJlcG9zaXRvcnkuIElmPGJyPgomZ3Q7IHByb2JsZW1zIHN0aWxsIHBlcnNp c3QsIHBsZWFzZSBtYWtlIG5vdGUgb2YgaXQgaW4gdGhpcyBidWcgcmVwb3J0Ljxicj4KJmd0OyAr dGVzdGluZ19idWdfbXNnID08YnI+CiZndDsgK8KgIMKgIElmIHlvdSB3YW50IHRvIHRlc3QgdGhl IHVwZGF0ZSwgeW91IGNhbiBpbnN0YWxsIGl0IHdpdGg8YnI+CiZndDsgK8KgIMKgICQgc3UgLWMg JiMzOTtkbmYgLS1lbmFibGVyZXBvPXVwZGF0ZXMtdGVzdGluZyB1cGRhdGUgJXMmIzM5Ozxicj4K Jmd0OyArwqAgwqAgWW91IGNhbiBwcm92aWRlIGZlZWRiYWNrIGZvciB0aGlzIHVwZGF0ZSBoZXJl OiAlczxicj4KJmd0OyArdGVzdGluZ19idWdfZXBlbF9tc2cgPTxicj4KJmd0OyArwqAgwqAgSWYg eW91IHdhbnQgdG8gdGVzdCB0aGUgdXBkYXRlLCB5b3UgY2FuIGluc3RhbGwgaXQgd2l0aDxicj4K Jmd0OyArwqAgwqAgJCBzdSAtYyAmIzM5O3l1bSAtLWVuYWJsZXJlcG89ZXBlbC10ZXN0aW5nIHVw ZGF0ZSAlcyYjMzk7PGJyPgomZ3Q7ICvCoCDCoCBZb3UgY2FuIHByb3ZpZGUgZmVlZGJhY2sgZm9y IHRoaXMgdXBkYXRlIGhlcmU6ICVzPGJyPgomZ3Q7ICt7JSBlbHNlICV9PGJyPgomZ3Q7ICthY2xf c3lzdGVtID0gcGtnZGI8YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsgKyMjIFBhY2th Z2UgREI8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICtwa2dkYl91cmwgPSA8YSBocmVmPSJodHRwczov L2FkbWluLmZlZG9yYXByb2plY3Qub3JnL3BrZ2RiIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0i X2JsYW5rIj5odHRwczovL2FkbWluLmZlZG9yYXByb2plY3QuPHdicj5vcmcvcGtnZGI8L2E+PGJy PgomZ3Q7ICs8YnI+CiZndDsgK2J1Z3RyYWNrZXIgPSBidWd6aWxsYTxicj4KJmd0OyAraW5pdGlh bF9idWdfbXNnID0gJXMgaGFzIGJlZW4gc3VibWl0dGVkIGFzIGFuIHVwZGF0ZSB0byAlcy4gJXM8 YnI+CiZndDsgK3N0YWJsZV9idWdfbXNnID0gJXMgaGFzIGJlZW4gcHVzaGVkIHRvIHRoZSAlcyBy ZXBvc2l0b3J5LiBJZjxicj4KJmd0OyBwcm9ibGVtcyBzdGlsbCBwZXJzaXN0LCBwbGVhc2UgbWFr ZSBub3RlIG9mIGl0IGluIHRoaXMgYnVnIHJlcG9ydC48YnI+CiZndDsgK3Rlc3RpbmdfYnVnX21z ZyA9PGJyPgomZ3Q7ICvCoCDCoCBTZWUgPGEgaHJlZj0iaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9y Zy93aWtpL1FBOlVwZGF0ZXNfVGVzdGluZyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu ayI+aHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy88d2JyPndpa2kvUUE6VXBkYXRlc19UZXN0aW5n PC9hPiBmb3I8YnI+CiZndDsgK8KgIMKgIGluc3RydWN0aW9ucyBvbiBob3cgdG8gaW5zdGFsbCB0 ZXN0IHVwZGF0ZXMuPGJyPgomZ3Q7ICvCoCDCoCBZb3UgY2FuIHByb3ZpZGUgZmVlZGJhY2sgZm9y IHRoaXMgdXBkYXRlIGhlcmU6ICVzPGJyPgomZ3Q7ICs8YnI+CiZndDsgK3Rlc3RpbmdfYnVnX2Vw ZWxfbXNnID08YnI+CiZndDsgK8KgIMKgIFNlZSA8YSBocmVmPSJodHRwczovL2ZlZG9yYXByb2pl Y3Qub3JnL3dpa2kvUUE6VXBkYXRlc19UZXN0aW5nIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0i X2JsYW5rIj5odHRwczovL2ZlZG9yYXByb2plY3Qub3JnLzx3YnI+d2lraS9RQTpVcGRhdGVzX1Rl c3Rpbmc8L2E+IGZvcjxicj4KJmd0OyArwqAgwqAgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBpbnN0 YWxsIHRlc3QgdXBkYXRlcy48YnI+CiZndDsgK8KgIMKgIFlvdSBjYW4gcHJvdmlkZSBmZWVkYmFj ayBmb3IgdGhpcyB1cGRhdGUgaGVyZTogJXM8YnI+CiZndDsgK3slIGVuZGlmICV9PGJyPgomZ3Q7 ICs8YnI+CiZndDsgKyMgVGhlIHVzZXJuYW1lL3Bhc3N3b3JkIGZvciBvdXIgYnVnemlsbGEgYWNj b3VudCBjb21lczxicj4KJmd0OyArIyBmcm9tIHRoZSBib2RoaV97ZW1haWwscGFzc3dvcmR9IGZp ZWxkcy48YnI+CiZndDsgKzxicj4KJmd0OyAreyBpZiBlbnYgPT0gJnF1b3Q7c3RhZ2luZyZxdW90 OyAlfTxicj4KJmd0OyArYnpfc2VydmVyID0gPGEgaHJlZj0iaHR0cHM6Ly9wYXJ0bmVyLWJ1Z3pp bGxhLnJlZGhhdC5jb20veG1scnBjLmNnaSIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu ayI+aHR0cHM6Ly9wYXJ0bmVyLWJ1Z3ppbGxhLjx3YnI+cmVkaGF0LmNvbS94bWxycGMuY2dpPC9h Pjxicj4KJmd0OyAreyUgZWxzZSAlfTxicj4KJmd0OyArYnpfc2VydmVyID0gPGEgaHJlZj0iaHR0 cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3htbHJwYy5jZ2kiIHJlbD0ibm9yZWZlcnJlciIgdGFy Z2V0PSJfYmxhbmsiPmh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS88d2JyPnhtbHJwYy5jZ2k8 L2E+PGJyPgomZ3Q7ICt7JSBlbmRpZiAlfTxicj4KJmd0OyArPGJyPgomZ3Q7ICsjYnpfY29va2ll ID08YnI+CiZndDsgKzxicj4KJmd0OyArIyBCb2RoaSB3aWxsIGF2b2lkIHRvdWNoaW5nIGJ1Z3Mg dGhhdCBhcmUgbm90IGFnYWluc3QgdGhlIGZvbGxvd2luZzxicj4KJmd0OyBwcm9kdWN0czxicj4K Jmd0OyArYnpfcHJvZHVjdHMgPSBGZWRvcmEsRmVkb3JhIEVQRUw8YnI+CiZndDsgKzxicj4KJmd0 OyAreyBpZiBlbnYgPT0gJnF1b3Q7c3RhZ2luZyZxdW90OyAlfTxicj4KJmd0OyArYnpfc2VydmVy ID0gPGEgaHJlZj0iaHR0cHM6Ly9wYXJ0bmVyLWJ1Z3ppbGxhLnJlZGhhdC5jb20veG1scnBjLmNn aT9pZD0lcyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9wYXJ0bmVy LWJ1Z3ppbGxhLjx3YnI+cmVkaGF0LmNvbS94bWxycGMuY2dpP2lkPSVzPC9hPjxicj4KJmd0OyAr eyUgZWxzZSAlfTxicj4KJmd0OyArYnpfc2VydmVyID0gPGEgaHJlZj0iaHR0cHM6Ly9idWd6aWxs YS5yZWRoYXQuY29tL3htbHJwYy5jZ2k/aWQ9JXMiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJf YmxhbmsiPmh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS88d2JyPnhtbHJwYy5jZ2k/aWQ9JXM8 L2E+PGJyPgomZ3Q7ICt7JSBlbmRpZiAlfTxicj4KPGJyPgpiel9zZXJ2ZXIgc2VlbXMgdG8gYmUg ZGVmaW5lZCBpbiB0d28gYmxvY2tzIGhlcmUgLSBsZXQmIzM5O3MganVzdCBkZWZpbmUgaXQ8YnI+ Cm9uY2UuPGJyPgo8YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsgKyMjIFBhY2thZ2Vz IHRoYXQgc2hvdWxkIHN1Z2dlc3QgYSByZWJvb3Q8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICtyZWJv b3RfcGtncyA9IGtlcm5lbCBrZXJuZWwtc21wIGtlcm5lbC14ZW4taHlwZXJ2aXNvciBrZXJuZWwt UEFFPGJyPgomZ3Q7IGtlcm5lbC14ZW4wIGtlcm5lbC14ZW5VIGtlcm5lbC14ZW4ga2VybmVsLXhl bi1ndWVzdCBnbGliYyBoYWwgZGJ1czxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyAr IyMgQ3JpdGljYWwgUGF0aCBQYWNrYWdlczxicj4KJmd0OyArIyMgPGEgaHJlZj0iaHR0cHM6Ly9m ZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0NyaXRpY2FsX3BhdGhfcGFja2FnZSIgcmVsPSJub3JlZmVy cmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy88d2JyPndpa2kv Q3JpdGljYWxfcGF0aF9wYWNrYWdlPC9hPjxicj4KJmd0OyArIyM8YnI+CiZndDsgKzxicj4KJmd0 OyArIyBFbmFibGUgdGhpcyB0byBxdWVyeSB0aGUgRmVkb3JhIFBhY2thZ2UgRGF0YWJhc2UgZm9y IHRoZSBsaXN0IG9mPGJyPgomZ3Q7IENyaXRpY2FsPGJyPgomZ3Q7ICsjIFBhdGggUGFja2FnZXMu wqAgSWYgZGlzYWJsZWQsIGl0JiMzOTtsbCBqdXN0IHVzZSB0aGUgaGFyZGNvZGVkIGxpc3Q8YnI+ CiZndDsgYmVsb3cuPGJyPgomZ3Q7ICs8YnI+CiZndDsgK3sgaWYgZW52ID09ICZxdW90O3Byb2R1 Y3Rpb24mcXVvdDsgJX08YnI+CiZndDsgK2NyaXRwYXRoLnR5cGUgPSBwa2dkYjxicj4KJmd0OyAr eyUgZW5kaWYgJX08YnI+CiZndDsgKzxicj4KJmd0OyArIyBZb3UgY2FuIGhhcmRjb2RlIGEgbGlz dCBvZiBjcml0aWNhbCBwYXRoIHBhY2thZ2VzIGluc3RlYWQgb2YgdXNpbmc8YnI+CiZndDsgdGhl IFBhY2thZ2VEQjxicj4KJmd0OyAreyBpZiBlbnYgPT0gJnF1b3Q7c3RhZ2luZyZxdW90OyAlfTxi cj4KJmd0OyArY3JpdHBhdGgucGtncyA9IGtlcm5lbDxicj4KJmd0OyAreyUgZW5kaWYgJX08YnI+ CiZndDsgKzxicj4KJmd0OyArIyBUaGUgbnVtYmVyIG9mIGFkbWluIGFwcHJvdmFscyBpdCB0YWtl cyB0byBiZSBhYmxlIHRvIHB1c2ggYTxicj4KJmd0OyBjcml0aWNhbCBwYXRoPGJyPgomZ3Q7ICsj IHVwZGF0ZSB0byBzdGFibGUgZm9yIGEgcGVuZGluZyByZWxlYXNlLjxicj4KJmd0OyArY3JpdHBh dGgubnVtX2FkbWluX2FwcHJvdmFscyA9IDA8YnI+CiZndDsgKzxicj4KJmd0OyArIyBUaGUgbmV0 IGthcm1hIHJlcXVpcmVkIHRvIHN1Ym1pdCBhIGNyaXRpYWwgcGF0aCB1cGRhdGUgdG8gYTxicj4K Jmd0OyBwZW5kaW5nIHJlbGVhc2UpPGJyPgomZ3Q7ICtjcml0cGF0aC5taW5fa2FybWEgPSAyPGJy PgomZ3Q7ICs8YnI+CiZndDsgKyMgQWxsb3cgY3JpdHBhdGggdG8gc3VibWl0IGZvciBzdGFibGUg YWZ0ZXIgMiB3ZWVrcyB3aXRoIG5vIG5lZ2F0aXZlPGJyPgomZ3Q7IGthcm1hPGJyPgomZ3Q7ICtj cml0cGF0aC5zdGFibGVfYWZ0ZXJfZGF5c188d2JyPndpdGhvdXRfbmVnYXRpdmVfa2FybWEgPSAx NDxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIGFuIHVw ZGF0ZSBtdXN0IHNwZW5kIGluIHRlc3RpbmcgYmVmb3JlPGJyPgomZ3Q7ICsjIGl0IGNhbiByZWFj aCB0aGUgc3RhYmxlIHJlcG9zaXRvcnk8YnI+CiZndDsgK2ZlZG9yYS5tYW5kYXRvcnlfZGF5c19p bl88d2JyPnRlc3RpbmcgPSA3PGJyPgomZ3Q7ICtmZWRvcmFfZXBlbC5tYW5kYXRvcnlfZGF5c188 d2JyPmluX3Rlc3RpbmcgPSAxNDxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyArIyMg UmVsZWFzZSBzdGF0dXM8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgUHJlLWJl dGEgZW5mb3JjZXMgdGhlIFByZSBCZXRhIHBvbGljeSBkZWZpbmVkIGhlcmU6PGJyPgomZ3Q7ICsj IDxhIGhyZWY9Imh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9VcGRhdGVzX1BvbGljeSIg cmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9y Zy88d2JyPndpa2kvVXBkYXRlc19Qb2xpY3k8L2E+PGJyPgomZ3Q7ICsjZjE1LnN0YXR1cyA9ICYj Mzk7cHJlX2JldGEmIzM5Ozxicj4KJmd0OyArI2YxNS5wcmVfYmV0YS5tYW5kYXRvcnlfZGF5c188 d2JyPmluX3Rlc3RpbmcgPSAzPGJyPgomZ3Q7ICsjZjE1LnByZV9iZXRhLmNyaXRwYXRoLm51bV88 d2JyPmFkbWluX2FwcHJvdmFscyA9IDA8YnI+CiZndDsgKyNmMTUucHJlX2JldGEuY3JpdHBhdGgu bWluXzx3YnI+a2FybWEgPSAxPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgRm9yIHRlc3QgY2FzZXMu PGJyPgomZ3Q7ICtmNy5zdGF0dXMgPSBwb3N0X2JldGE8YnI+CiZndDsgK2Y3LnBvc3RfYmV0YS5t YW5kYXRvcnlfZGF5c188d2JyPmluX3Rlc3RpbmcgPSA3PGJyPgomZ3Q7ICtmNy5wb3N0X2JldGEu Y3JpdHBhdGgubnVtXzx3YnI+YWRtaW5fYXBwcm92YWxzID0gMDxicj4KJmd0OyArZjcucG9zdF9i ZXRhLmNyaXRwYXRoLm1pbl88d2JyPmthcm1hID0gMjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIFRo ZSBudW1iZXIgb2YgZGF5cyB3b3J0aCBvZiB1cGRhdGVzL2NvbW1lbnRzIHRvIGRpc3BsYXk8YnI+ CiZndDsgK2ZlZWRzLm51bV9kYXlzX3RvX3Nob3cgPSA3PGJyPgomZ3Q7ICtmZWVkcy5tYXhfZW50 cmllcyA9IDIwPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICsjIyBCdWlsZHJvb3Qg T3ZlcnJpZGU8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgTnVtYmVyIG9mIGRh eXMgYmVmb3JlIGV4cGlyaW5nIG92ZXJyaWRlczxicj4KJmd0OyArYnVpbGRyb290X292ZXJyaWRl cy5leHBpcmVfPHdicj5hZnRlciA9IDE8YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsg KyMjIEdyb3Vwczxicj4KJmd0OyArIyM8YnI+CiZndDsgKzxicj4KJmd0OyArIyBGQVMgR3JvdXBz IHRoYXQgd2Ugd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvPGJyPgomZ3Q7ICsjIFdoZW4gYSB1c2Vy IGxvZ3MgaW4sIGJvZGhpIHdpbGwgbG9vayBmb3IgYW55IG9mIHRoZXNlIGdyb3VwcyBhbmQ8YnI+ CiZndDsgYXNzb2NpYXRlICM8YnI+CiZndDsgKyMgdGhlbSB3aXRoIHRoZSB1c2VyLiBUaGV5IHdp bGwgdGhlbiBhcHBlYXIgYXMgdGhlIHVzZXJzIGVmZmVjdGl2ZTxicj4KJmd0OyBwcmluY2lwYWxz IGluPGJyPgomZ3Q7ICsjIHRoZSBmb3JtYXQgJnF1b3Q7Z3JvdXA6Z3JvdXBuYW1lJnF1b3Q7IGFu ZCBjYW4gYmUgdXNlZCBpbiBQeXJhbWlkIEFDRSYjMzk7cy48YnI+CiZndDsgK2ltcG9ydGFudF9n cm91cHMgPSBwcm92ZW50ZXN0ZXJzIHByb3ZlbnBhY2thZ2VyIHJlbGVuZy10ZWFtPGJyPgomZ3Q7 IHNlY3VyaXR5X3Jlc3BvbnMgcGFja2FnZXIgYm9kaGlhZG1pbiB2aXJ0bWFpbnQtc2lnIGtkZS1z aWcgZWNsaXBzZS08YnI+CiZndDsgc2lnIGluZnJhLXNpZyBnbm9tZS1zaWcgcHl0aG9uLXNpZyBy b2JvdGljcy1zaWcgcWEtdG9vbHMtc2lnIG5vZGVqcy08YnI+CiZndDsgc2lnIGx4cXQtc2lnIGFz dHJvLXNpZzxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIEdyb3VwcyB0aGF0IGNhbiBwdXNoIHVwZGF0 ZXMgZm9yIGFueSBwYWNrYWdlPGJyPgomZ3Q7ICthZG1pbl9wYWNrYWdlcl9ncm91cHMgPSBwcm92 ZW5wYWNrYWdlciByZWxlbmctdGVhbSBzZWN1cml0eV9yZXNwb25zPGJyPgomZ3Q7ICs8YnI+CiZn dDsgKyMgVXNlciBtdXN0IGJlIGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAgdG8gc3VibWl0IHVwZGF0 ZXM8YnI+CiZndDsgK21hbmRhdG9yeV9wYWNrYWdlcl9ncm91cHMgPSBwYWNrYWdlcjxicj4KJmd0 OyArPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyArIyMgdXBkYXRlaW5mby54bWwgY29uZmlndXJhaXRv bjxicj4KJmd0OyArIyM8YnI+CiZndDsgK3VwZGF0ZWluZm9fcmlnaHRzID0gQ29weXJpZ2h0IChD KSAyMDE1IFJlZCBIYXQsIEluYy4gYW5kIG90aGVycy48YnI+CiZndDsgKzxicj4KJmd0OyArIyM8 YnI+CiZndDsgKyMjIEF1dGhlbnRpY2F0aW9uICZhbXA7IEF1dGhvcml6YXRpb248YnI+CiZndDsg KyMjPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgcHlyYW1pZC5vcGVuaWQ8YnI+CiZndDsgK3sgaWYg ZW52ID09ICZxdW90O3N0YWdpbmcmcXVvdDsgJX08YnI+CiZndDsgK29wZW5pZC5zdWNjZXNzX2Nh bGxiYWNrID0gYm9kaGkuc2VydmVyLnNlY3VyaXR5Ojx3YnI+cmVtZW1iZXJfbWU8YnI+CiZndDsg K29wZW5pZC5wcm92aWRlciA9IDxhIGhyZWY9Imh0dHBzOi8vaWQuc3RnLmZlZG9yYXByb2plY3Qu b3JnL29wZW5pZC8iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vaWQu c3RnLmZlZG9yYXByb2plY3QuPHdicj5vcmcvb3BlbmlkLzwvYT48YnI+CiZndDsgK29wZW5pZC51 cmwgPSA8YSBocmVmPSJodHRwczovL2lkLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZy8iIHJlbD0ibm9y ZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vaWQuc3RnLmZlZG9yYXByb2plY3QuPHdi cj5vcmcvPC9hPjxicj4KJmd0OyArb3BlbmlkX3RlbXBsYXRlID0ge3VzZXJuYW1lfS48YSBocmVm PSJodHRwOi8vaWQuZmVkb3JhcHJvamVjdC5vcmciIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJf YmxhbmsiPmlkLmZlZG9yYXByb2plY3QuPHdicj5vcmc8L2E+PGJyPgomZ3Q7ICtvcGVuaWQuc3Jl Z19yZXF1aXJlZCA9IGVtYWlsPGJyPgomZ3Q7ICt7JSBlbHNlICV9PGJyPgomZ3Q7ICtvcGVuaWQu c3VjY2Vzc19jYWxsYmFjayA9IGJvZGhpLnNlcnZlci5zZWN1cml0eTo8d2JyPnJlbWVtYmVyX21l PGJyPgomZ3Q7ICtvcGVuaWQucHJvdmlkZXIgPSA8YSBocmVmPSJodHRwczovL2lkLmZlZG9yYXBy b2plY3Qub3JnL29wZW5pZC8iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBz Oi8vaWQuZmVkb3JhcHJvamVjdC5vcmcvPHdicj5vcGVuaWQvPC9hPjxicj4KJmd0OyArb3Blbmlk LnVybCA9IDxhIGhyZWY9Imh0dHBzOi8vaWQuZmVkb3JhcHJvamVjdC5vcmcvIiByZWw9Im5vcmVm ZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2lkLmZlZG9yYXByb2plY3Qub3JnLzwvYT48 YnI+CiZndDsgK29wZW5pZF90ZW1wbGF0ZSA9IHt1c2VybmFtZX0uPGEgaHJlZj0iaHR0cDovL2lk LmZlZG9yYXByb2plY3Qub3JnIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5pZC5m ZWRvcmFwcm9qZWN0Ljx3YnI+b3JnPC9hPjxicj4KJmd0OyArb3BlbmlkLnNyZWdfcmVxdWlyZWQg PSBlbWFpbDxicj4KJmd0OyAreyUgZW5kaWYgJX08YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+ CiZndDsgKyMjIFB5cmFtaWQgc2V0dGluZ3M8YnI+CiZndDsgKyMjPGJyPgomZ3Q7ICtweXJhbWlk LnJlbG9hZF90ZW1wbGF0ZXMgPSBmYWxzZTxicj4KJmd0OyArcHlyYW1pZC5kZWJ1Z19hdXRob3Jp emF0aW9uID0gZmFsc2U8YnI+CiZndDsgK3B5cmFtaWQuZGVidWdfbm90Zm91bmQgPSBmYWxzZTxi cj4KJmd0OyArcHlyYW1pZC5kZWJ1Z19yb3V0ZW1hdGNoID0gZmFsc2U8YnI+CiZndDsgK3B5cmFt aWQuZGVmYXVsdF9sb2NhbGVfbmFtZSA9IGVuPGJyPgomZ3Q7ICs8YnI+CiZndDsgK3B5cmFtaWQu aW5jbHVkZXMgPTxicj4KJmd0OyArwqAgwqAgcHlyYW1pZF90bTxicj4KJmd0OyArPGJyPgomZ3Q7 ICtkZWJ1Z3Rvb2xiYXIuaG9zdHMgPSAxMjcuMC4wLjEgOjoxPGJyPgomZ3Q7ICs8YnI+CiZndDsg KyMjPGJyPgomZ3Q7ICsjIyBEYXRhYmFzZTxicj4KJmd0OyArIyM8YnI+CiZndDsgK3sgaWYgZW52 ID09ICZxdW90O3N0YWdpbmcmcXVvdDsgJX08YnI+CiZndDsgK3NxbGFsY2hlbXkudXJsID0gcG9z dGdyZXNxbDovL2JvZGhpMjp7eyBib2RoaTJQYXNzd29yZFNURyB9fUBkYi08YnI+CiZndDsgYm9k aGkvYm9kaGkyPGJyPgomZ3Q7ICt7JSBlbHNlICV9PGJyPgomZ3Q7ICtzcWxhbGNoZW15LnVybCA9 IHBvc3RncmVzcWw6Ly9ib2RoaTI6e3sgYm9kaGkyUGFzc3dvcmQgfX1AZGItPGJyPgomZ3Q7IGJv ZGhpL2JvZGhpMjxicj4KJmd0OyAreyUgZW5kaWYgJX08YnI+Cjxicj4KSSByZWNlbnRseSBjaGFu Z2VkIHRoZSB1cmwgaW4gc3RhZ2luZy5pbmksIHNvIHlvdSBzaG91bGQgYmUgc3VyZSB0bzxicj4K cGljayB1cCB0aGF0IGNoYW5nZS48YnI+Cjxicj4KJmd0OyArPGJyPgomZ3Q7ICsjIzxicj4KJmd0 OyArIyMgVGVtcGxhdGVzPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyArbWFrby5kaXJlY3RvcmllcyA9 IGJvZGhpOnNlcnZlci90ZW1wbGF0ZXM8YnI+CiZndDsgKzxicj4KJmd0OyArIyM8YnI+CiZndDsg KyMjIEF1dGhlbnRpY2F0aW9uICZhbXA7IFNlc3Npb25zPGJyPgomZ3Q7ICsjIzxicj4KJmd0OyAr PGJyPgomZ3Q7ICthdXRodGt0LnNlY3JldCA9IHt7IGJvZGhpMkF1dGhUa3QgfX08YnI+CiZndDsg K3Nlc3Npb24uc2VjcmV0ID0ge3sgYm9kaGkyU2Vzc2lvblNlY3JldCB9fTxicj4KJmd0OyArYXV0 aHRrdC5zZWN1cmUgPSB0cnVlPGJyPgomZ3Q7ICs8YnI+CiZndDsgKyMgcHlyYW1pZF9iZWFrZXI8 YnI+CiZndDsgK3Nlc3Npb24udHlwZSA9IGZpbGU8YnI+CiZndDsgK3Nlc3Npb24uZGF0YV9kaXIg PSAvdmFyL2NhY2hlL2JvZGhpL3Nlc3Npb25zL2RhdGE8YnI+CiZndDsgK3Nlc3Npb24ubG9ja19k aXIgPSAvdmFyL2NhY2hlL2JvZGhpL3Nlc3Npb25zL2xvY2s8YnI+CiZndDsgKzxicj4KJmd0OyAr eyBpZiBlbnYgPT0gJnF1b3Q7c3RhZ2luZyZxdW90OyAlfTxicj4KJmd0OyArc2Vzc2lvbi5rZXkg PSB7eyBib2RoaTJTZXNzaW9uS2V5U1RHIH19PGJyPgomZ3Q7ICt7JSBlbHNlICV9PGJyPgomZ3Q7 ICtzZXNzaW9uLmtleSA9IHt7IGJvZGhpMlNlc3Npb25LZXkgfX08YnI+CiZndDsgK3slIGVuZGlm ICV9PGJyPgomZ3Q7ICs8YnI+CiZndDsgK3Nlc3Npb24uY29va2llX29uX2V4Y2VwdGlvbiA9IHRy dWU8YnI+CiZndDsgKyMgVGVsbCB0aGUgYnJvd3NlciB0byBvbmx5IHNlbmQgdGhlIGNvb2tpZSBv dmVyIFRMUzxicj4KJmd0OyArc2Vzc2lvbi5zZWN1cmUgPSB0cnVlPGJyPgomZ3Q7ICsjIENyZWF0 ZSBhIGNvb2tpZSB0aGF0IGlzIG9ubHkgdmFsaWQgZm9yIG9uZSBkYXk8YnI+CiZndDsgK3Nlc3Np b24udGltZW91dCA9IDg2NDAwPGJyPgomZ3Q7ICtjYWNoZS5yZWdpb25zID0gZGVmYXVsdF90ZXJt LCBzZWNvbmQsIHNob3J0X3Rlcm0sIGxvbmdfdGVybTxicj4KJmd0OyArY2FjaGUudHlwZSA9IG1l bW9yeTxicj4KJmd0OyArY2FjaGUuc2Vjb25kLmV4cGlyZSA9IDE8YnI+CiZndDsgK2NhY2hlLnNo b3J0X3Rlcm0uZXhwaXJlID0gNjA8YnI+CiZndDsgK2NhY2hlLmRlZmF1bHRfdGVybS5leHBpcmUg PSAzMDA8YnI+CiZndDsgK2NhY2hlLmxvbmdfdGVybS5leHBpcmUgPSAzNjAwPGJyPgomZ3Q7ICs8 YnI+CiZndDsgK1tzZXJ2ZXI6bWFpbl08YnI+CiZndDsgK3VzZSA9IGVnZzp3YWl0cmVzcyNtYWlu PGJyPgomZ3Q7ICtob3N0ID0gMC4wLjAuMDxicj4KJmd0OyArcG9ydCA9IDY1NDM8YnI+CiZndDsg Kzxicj4KJmd0OyArW3BzaGVsbF08YnI+CiZndDsgK20gPSBib2RoaS5zZXJ2ZXIubW9kZWxzPGJy PgomZ3Q7ICt0ID0gdHJhbnNhY3Rpb248YnI+CiZndDsgKyMgQmVnaW4gbG9nZ2luZyBjb25maWd1 cmF0aW9uPGJyPgomZ3Q7ICs8YnI+CiZndDsgK1tsb2dnZXJzXTxicj4KJmd0OyAra2V5cyA9IHJv b3QsIGJvZGhpLCBzcWxhbGNoZW15PGJyPgomZ3Q7ICs8YnI+CiZndDsgK1toYW5kbGVyc108YnI+ CiZndDsgK2tleXMgPSBjb25zb2xlPGJyPgomZ3Q7ICs8YnI+CiZndDsgK1tmb3JtYXR0ZXJzXTxi cj4KJmd0OyAra2V5cyA9IGdlbmVyaWM8YnI+CiZndDsgKzxicj4KJmd0OyArW2xvZ2dlcl9yb290 XTxicj4KJmd0OyArbGV2ZWwgPSBJTkZPPGJyPgomZ3Q7ICtoYW5kbGVycyA9IGNvbnNvbGU8YnI+ CiZndDsgKzxicj4KJmd0OyArW2xvZ2dlcl9ib2RoaV08YnI+CiZndDsgK2xldmVsID0gREVCVUc8 YnI+CiZndDsgK2hhbmRsZXJzID08YnI+CiZndDsgK3F1YWxuYW1lID0gYm9kaGk8YnI+CiZndDsg Kzxicj4KJmd0OyArW2xvZ2dlcl9zcWxhbGNoZW15XTxicj4KJmd0OyArbGV2ZWwgPSBXQVJOPGJy PgomZ3Q7ICtoYW5kbGVycyA9PGJyPgomZ3Q7ICtxdWFsbmFtZSA9IHNxbGFsY2hlbXkuZW5naW5l PGJyPgomZ3Q7ICsjICZxdW90O2xldmVsID0gSU5GTyZxdW90OyBsb2dzIFNRTCBxdWVyaWVzLjxi cj4KJmd0OyArIyAmcXVvdDtsZXZlbCA9IERFQlVHJnF1b3Q7IGxvZ3MgU1FMIHF1ZXJpZXMgYW5k IHJlc3VsdHMuPGJyPgomZ3Q7ICsjICZxdW90O2xldmVsID0gV0FSTiZxdW90OyBsb2dzIG5laXRo ZXIuwqAgKFJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uPGJyPgomZ3Q7IHN5c3RlbXMuKTxicj4K Jmd0OyArPGJyPgomZ3Q7ICtbaGFuZGxlcl9jb25zb2xlXTxicj4KJmd0OyArY2xhc3MgPSBTdHJl YW1IYW5kbGVyPGJyPgomZ3Q7ICthcmdzID0gKHN5cy5zdGRlcnIsKTxicj4KJmd0OyArbGV2ZWwg PSBOT1RTRVQ8YnI+CiZndDsgK2Zvcm1hdHRlciA9IGdlbmVyaWM8YnI+CiZndDsgK1tmb3JtYXR0 ZXJfZ2VuZXJpY108YnI+CiZndDsgK2Zvcm1hdCA9ICUoYXNjdGltZSlzICUobGV2ZWxuYW1lKS01 LjVzIFslKG5hbWUpc11bJSh0aHJlYWROYW1lKXNdPGJyPgomZ3Q7ICUobWVzc2FnZSlzPGJyPgom Z3Q7ICs8YnI+CiZndDsgKyMgRW5kIGxvZ2dpbmcgY29uZmlndXJhdGlvbjxicj4KJmd0OyBcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGU8YnI+CjxzcGFuIGNsYXNzPSJIT0VuWmIiPjxmb250IGNv bG9yPSIjODg4ODg4Ij4mZ3Q7IC0tPGJyPgomZ3Q7IDIuOS4zPC9mb250Pjwvc3Bhbj48YnI+X19f X19fX19fX19fX19fX19fX19fX19fX19fX19fPHdicj5fX19fX19fX19fX19fX19fXzxicj4KaW5m cmFzdHJ1Y3R1cmUgbWFpbGluZyBsaXN0IC0tIDxhIGhyZWY9Im1haWx0bzppbmZyYXN0cnVjdHVy ZUBsaXN0cy5mZWRvcmFwcm9qZWN0Lm9yZyI+aW5mcmFzdHJ1Y3R1cmVAbGlzdHMuPHdicj5mZWRv cmFwcm9qZWN0Lm9yZzwvYT48YnI+ClRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gPGEg aHJlZj0ibWFpbHRvOmluZnJhc3RydWN0dXJlLWxlYXZlQGxpc3RzLmZlZG9yYXByb2plY3Qub3Jn Ij5pbmZyYXN0cnVjdHVyZS1sZWF2ZUBsaXN0cy48d2JyPmZlZG9yYXByb2plY3Qub3JnPC9hPjxi cj4KPGJyPjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+Cg== --===============1591284580528162360==--