Git.psd1

@{
    # Script module or binary module file associated with this manifest.
    RootModule           = 'Git.psm1'

    # Version number of this module.
    # Placeholder. build.ps1 derives the real version from CHANGELOG.md and
    # passes it to Build-Module via -SemVer; Build-Module rewrites this field
    # in the built manifest. Bumping it here has no effect.
    ModuleVersion        = '2.0.0'

    # Supported PSEditions
    CompatiblePSEditions = @('Desktop', 'Core')

    # ID used to uniquely identify this module.
    # Preserved from the v1.x manifest. PSGallery uses GUID for module
    # identity; a new GUID would orphan upgraders, so this value is fixed.
    GUID                 = '5878A10C-EFEF-495E-AFF6-0C9347D4BDE7'

    # Author of this module
    Author               = 'Manuel'

    # Company or vendor of this module
    CompanyName          = 'mtb.me'

    # Copyright statement for this module
    Copyright            = '(c) 2026 mtb.me. All rights reserved.'

    # Description of the functionality provided by this module
    Description          = 'Common Git workflow helpers: branch maintenance, tagging, and repository synchronization.'

    # Minimum version of the PowerShell engine required by this module
    PowerShellVersion    = '5.1'

    # Modules that must be imported into the global environment prior to importing this module.
    # Pinned to the minimum required Execution version; no upper bound.
    RequiredModules      = @(
        @{ ModuleName = 'Execution'; ModuleVersion = '5.1.0' }
    )

    # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
    FunctionsToExport    = @('Add-AssumedUnchanged','Add-GitTag','Clear-GitBranches','Invoke-Gitk','Invoke-GitkAll','Merge-GitAllRemoteBranches','Merge-GitBranchUseTheirs','Push-GitAllTrackedBranches','Remove-AssumedUnchanged','Remove-GitAllBranches','Reset-GitAllBranches','Set-GitTrackAllRemoteBranches','Set-GitTrackMatchedRemoteBranches','Update-GitAllBranches','Update-GitBranch')

    # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
    CmdletsToExport      = @()

    # Variables to export from this module
    VariablesToExport    = @()

    # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
    AliasesToExport      = @('agt','cgb','gk','gka','pgst','ugab','ugb')

    # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
    PrivateData          = @{
        PSData = @{
            # Tags applied to this module. These help with module discovery in online galleries.
            Tags         = @('Git', 'Branch', 'Tag', 'Workflow', 'PowerShell', 'Windows', 'PSEdition_Desktop', 'PSEdition_Core')

            # A URL to the license for this module.
            # Forward-looking pointer; LICENSE lands in PR 2.
            LicenseUri   = 'https://github.com/ww3d/git/blob/main/LICENSE'

            # A URL to the main website for this project.
            ProjectUri   = 'https://github.com/ww3d/git'

            # ReleaseNotes of this module.
            # Placeholder. build.ps1 extracts the matching version section
            # from CHANGELOG.md and writes it here in the built manifest via
            # Update-Metadata. Editing this here has no effect.
            ReleaseNotes = 'Git v2.0.0+sha.9c72bc1

## [v2.0.0] - 2026-05-06
 
Major rewrite. Drops the `Common` and `SmartLogging` runtime
dependencies, migrates every native git invocation to
`Invoke-NativeCommand` from `Execution v5.1`, replaces the legacy
`$Host.UI.PromptForChoice(...)` confirmation pattern with
`SupportsShouldProcess`, fixes ten concrete bugs from the v1.x code,
and ships a ModuleBuilder-driven build pipeline with CI and a Pester
test suite. See the migration notes in [README.md](README.md) before
upgrading.
 
### Added
 
- `build.ps1` at repo root: ModuleBuilder pipeline with
  CHANGELOG-driven version derivation, BOM-less UTF-8 normalization
  of built artifacts, optional `-Sign` (Authenticode against
  `$env:GIT_SIGN_THUMBPRINT`) and optional `-Publish` to PSGallery.
  `-Publish` is gated on a populated `[Unreleased]`-empty CHANGELOG
  and a manifest version strictly greater than the latest PSGallery
  entry. (#1)
- GitHub Actions CI at `.github/workflows/test.yml`. Builds, then
  runs `Test-ModuleManifest`, `Import-Module`, PSScriptAnalyzer
  (against source) and Pester (against the built artifact). Matrix:
  `windows-latest × {powershell, pwsh}`. (#1)
- Pester 5.x test suite under `tests/`. 46 tests covering the 15
  Public functions, the `Invoke-Git` wrapper contract,
  `Reset-GitAllBranches` confirm-propagation through the three
  composed Public calls, and the cross-cutting manifest invariants.
- `Invoke-Git` private wrapper (`src/Git/Private/Invoke-Git.ps1`).
  Single funnel for every git invocation in the module. Two reasons:
  cross-module preference scoping (`-Confirm:$false` / `-WhatIf:$false`
  pinned on the inner call so the user-facing confirmation gate lives
  at the Public-function boundary, never on the bare git invocation -
  PowerShell does not propagate Confirm/WhatIf preferences across
  module SessionState), and PowerShell''s prefix-match defenses
  (`Invoke-Git` is intentionally NOT `[CmdletBinding()]` so that
  `-D` for `git branch -D` does not bind to `-Debug` and so that `-a`,
  `-t`, `-b`, `-s` etc. land in `$args` cleanly). (#1)
- `Invoke-Gitk` / `Invoke-GitkAll`: `-NoWait` forwarding so `gk` /
  `gka` no longer block the prompt while the GUI is open. Extra
  arguments forwarded via `[Parameter(ValueFromRemainingArguments)]`. (#1)
- `Update-GitBranch`: rebase-failure now emits a `Write-Warning` with
  recovery instructions ("Resolve conflicts and run
  `git rebase --continue`, or abort with `git rebase --abort`") before
  re-throwing, so the user does not have to consult docs after a
  conflict. (#1)
- `Set-StrictMode -Version Latest` compliance throughout the module:
  defensive `@()`-wrapping of native-command results, explicit
  null-initialization before conditional blocks, parameter-set
  declarations on `Merge-GitAllRemoteBranches`. (#1)
- `MIT LICENSE`, `README.md`, `CHANGELOG.md`, `.gitignore`.
 
### Changed (BREAKING)
 
- `RequiredModules`: `Common` and `SmartLogging` are removed. The only
  remaining runtime dependency is `Execution >= 5.1.0` (pinned, no
  upper bound). Consumers that imported `Common` or `SmartLogging`
  transitively via `Git` must now import them explicitly. (#1)
- `Merge-GitAllRemoteBranches`: parameter renamed from `-Strategie`
  (German typo) to `-Strategy`. No compatibility alias. Callers
  passing `-Strategie` need to update. (#1)
- `Merge-GitAllRemoteBranches`: `-UseTheirs` and `-UseOurs` are now
  mutually exclusive via parameter sets (`Default` / `Theirs` /
  `Ours`). Passing both raises a parameter-set-resolution error
  rather than silently picking one. (#1)
- `Clear-GitBranches`, `Add-AssumedUnchanged`, `Remove-AssumedUnchanged`:
  replace the legacy `$Host.UI.PromptForChoice(...)` confirmation
  pattern with standard `[CmdletBinding(SupportsShouldProcess,
  ConfirmImpact = ''High'')]` plus per-item `$PSCmdlet.ShouldProcess(...)`.
  Behaviour change for direct interactive use: prompts now appear per
  branch / per file rather than batch. The standard `[A]ll` answer at
  the confirm prompt accepts all remaining items in one keystroke.
  Trade-off: `-WhatIf`, `-Confirm:$false`, `$ConfirmPreference` and
  `Invoke-StubScript` preference-forwarding now work where they did
  not before. (#1)
- All other state-changing Public functions (`Remove-GitAllBranches`,
  `Reset-GitAllBranches`, `Update-GitAllBranches`, `Update-GitBranch`,
  `Push-GitAllTrackedBranches`, `Merge-*`, `Set-GitTrack*`) gain
  `SupportsShouldProcess` with appropriate `ConfirmImpact`. They now
  honour `-WhatIf` and `-Confirm:$false` cleanly. (#1)
- Build output moves to `_build/Git/` (was no build pipeline
  previously). Distribution / installation should target the built
  form (`Import-Module ./_build/Git/Git.psd1`); source-form
  `Import-Module ./src/Git/Git.psd1` still works for fast development
  iteration. (#1)
 
### Changed
 
- All `Start-NativeExecution`-based and bare-`git`-based command
  invocations migrated to `Invoke-NativeCommand` from `Execution v5.1`
  (via the local `Invoke-Git` wrapper). Backend selection is automatic:
  ScriptBlock for status / state-change calls (faster), Process for
  `Invoke-Gitk` (`-NoWait` GUI). `$LASTEXITCODE`-checking is replaced
  by the wrapper''s exit-code surfacing combined with per-function
  `$ErrorActionPreference = ''Stop''`. (#1)
- All `| Out-Null` suppressions replaced with `> $null` for
  parser-level performance (3-5x faster on PS 5.1, ~2x on PS 7) and
  consistency with `ww3d/execution`. Includes both source and Pester
  test files. (#2)
- `New-GitTempBranchName` (private helper) renamed to
  `Get-GitTempBranchName`. Semantically more correct (returns a
  string, does not mutate state) and sidesteps an instability with
  `PSScriptAnalyzer`''s `PSUseShouldProcessForStateChangingFunctions`
  rule on the `windows-latest` pwsh runner. (#1)
- `Push-GitAllTrackedBranches`, `Update-GitAllBranches`,
  `Merge-GitAllRemoteBranches`, `Merge-GitBranchUseTheirs`,
  `Remove-GitAllBranches`: working-tree restoration is now wrapped in
  `try/finally`. An interrupted multi-branch operation always returns
  the user to their original branch. Cleanup steps in `finally` are
  best-effort (each wrapped in its own `try/catch + Write-Debug`) so
  a cleanup failure cannot mask the original in-flight error. (#1)
- Public/Private folder split with dot-sourcing loader. 15 Public
  functions under `src/Git/Public/`, 8 Private helpers under
  `src/Git/Private/`. Source `.psm1` is the loader; the built `.psm1`
  is concatenated by ModuleBuilder. (#1)
- All Public functions get `[CmdletBinding()]`, `[OutputType()]` and
  comment-based help with realistic `.EXAMPLE` entries. (#1)
- `# SIG #` Authenticode signature blocks removed from `Git.psd1`
  and `Git.psm1`. Source files are no longer signed; only the built
  artifact is, via `build.ps1 -Sign`. (#1)
 
### Fixed
 
- `Update-GitBranch`: called undefined `Print-Warning`. Replaced with
  `Write-Warning`. Plus: redundant `for-each-ref` loop removed. The
  upstream ref was already resolved by
  `git rev-parse --abbrev-ref @{upstream}`; the loop both was an
  unnecessary O(n) and had a real correctness bug - it iterated
  upstreams of all local branches instead of confirming the current
  upstream''s existence, so the rebase silently skipped when the
  current branch was the only tracker of its upstream. (#1)
- `Clear-GitBranches`: `$remoteGoneBranches` was conditionally
  initialized but unconditionally referenced (StrictMode crash). Now
  initialized to `@()` ahead of the conditional. Plus: branch-list
  concatenation is now defensively `@()`-wrapped per operand to
  handle the single-element collapse case (PowerShell `+` between
  two arrays where one is collapsed to a scalar by single-element
  auto-unwrapping). (#1)
- `Add-GitTag`: doubled assignment `$shortSha = $shortSha = ...`.
  Trivial typo, dropped. (#1)
- `Set-GitTrackAllRemoteBranches` / `Set-GitTrackMatchedRemoteBranches`:
  parameter casing inconsistency (`$RemoteRefs` declared,
  `$remoteRefs` referenced in body). Normalized to `$RemoteRefs`. (#1)
- `Get-Distincted`: over-engineered with `[HashSet[Object]]` and a
  jagged `[object[][]]` parameter type. Replaced with
  `Where-Object { $_ } | Select-Object -Unique`; parameter type fixed
  to `[string[]]`. (#1)
- `Get-GitMergedBranches`, `Get-GitRemoteGoneBranches`: returned
  implicit `$null` on error paths (StrictMode crash for callers).
  Now `return @()`. (#1)
- `Update-GitBranch`: iterated captured native-command result without
  null-check (StrictMode crash on empty output). Now `@()`-wrapped.
  Pattern applied consistently across the module. (#1)
- `$LASTEXITCODE` was silently ignored at roughly 90% of bare-`git`
  call sites. Now centralised: `Invoke-NativeCommand` (via
  `Invoke-Git`) raises a Write-Error on non-zero exit, combined with
  per-function `$ErrorActionPreference = ''Stop''`. (#1)
- `Add-AssumedUnchanged` / `Remove-AssumedUnchanged`: `Get-Item`
  crashed on non-existent paths with an unfriendly stack. Now typed
  `catch [System.Management.Automation.ItemNotFoundException]`
  produces a clean `WriteError` ("Path not found: ..."); other
  exceptions (`Permission denied`, IO errors) `throw` with full
  detail rather than being misattributed as "Path not found". (#1)
- `Get-RebasedAndSquashedBranches`: leaked merge state on Ctrl-C.
  Now `try/finally`-wrapped per branch with a `MERGE_HEAD`-gated
  `git merge --abort` in the `finally`. The `MERGE_HEAD` gate avoids
  the "fatal: There is no merge to abort" stderr that Pester
  surfaces as a `NativeCommandError` even with `-IgnoreExitCode`. (#1)
 
### Removed
 
- `RequiredModules`: `Common`, `SmartLogging`. (#1)
- The legacy `# SIG #` Authenticode signature blocks at the bottom of
  `Git.psd1` and `Git.psm1`. (#1)
 
### Note on v1.x
 
The v1.x release history is not migrated into this changelog. The old
manifest''s `ReleaseNotes` block was malformed (mixed bullet styles,
leading whitespace) and was discarded during the PR 1 refactor. The
v1.x packages remain on PSGallery as published; this changelog starts
fresh from v2.0.0.'


            # Prerelease string of this module.
            # Placeholder. Build-Module derives this from the -SemVer suffix
            # passed by build.ps1 (e.g. '2.0.0-beta1' -> 'beta1'). Empty for
            # stable releases. Must exist as a property so Build-Module
            # rewrites it; otherwise it only emits a warning.
            Prerelease   = ''
        } # End of PSData hashtable
    } # End of PrivateData hashtable
}

# SIG # Begin signature block
# MIIn8gYJKoZIhvcNAQcCoIIn4zCCJ98CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDYfKhh1IF7uUkv
# tc9Z5Guc+nFjHEWyvnfMJsl7hao1haCCIP4wggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggahMIIEiaADAgECAhAHhD2tAcEVwnTuQacoIkZ5MA0GCSqG
# SIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
# dXN0ZWQgUm9vdCBHNDAeFw0yMjA2MjMwMDAwMDBaFw0zMjA2MjIyMzU5NTlaMFox
# CzAJBgNVBAYTAkxWMRkwFwYDVQQKExBFblZlcnMgR3JvdXAgU0lBMTAwLgYDVQQD
# EydHb0dldFNTTCBHNCBDUyBSU0E0MDk2IFNIQTI1NiAyMDIyIENBLTEwggIiMA0G
# CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCtHvQHskNmiqJndyWVCqX4FtYp5FfJ
# LO9Sh0BuwXuvBeNYt21xf8h/pLJ/7YzeKcNq9z4zEhecqtD0xhbvSB8ksBAfWBMZ
# O0NLfOT0j7WyNuD7rv+ZFza+mxIQ79s1dCiwUMwGonaoDK7mqZfDpKEExR6UyKBh
# 3aatT73U2Imx/x+fYTmQFq+N8FrLs6Fh6YEGWJTgsxyw1fAChCfgtEcZkdtcgK7q
# uqskHtW6PJ9l5VNJ7T3WXpznsOOxrz3qx0CzWjwK8+3Kv2X6piWvd8YRfAOycSrT
# 4/PM0cHLFc5xs/4m/ek4FCnYSem43doFftBxZBQkHKoPW3Bt6VIrhVIwvO7hrUjh
# chJJZYdSld3bANDviJ5/ToP7ENv97U9MtKFvmC5dzd1p4HxFR0p5wWmYQbW+y3RF
# m0np6H9m57MUMNp0ysmdJjb0f7+dVLX3OEBUb6H+r1LRLZT/xEOTuwOxGg2S4w25
# KGL9SCBUW4nkBljPHeJToU+THt0P8ZQf4B9IFlGxtLK0g3uOAnwSFgKtmNjhkTl8
# caLAQwbgEINCqrhc0b6k2Z8+QwgVAL0nIuzM9ckKP8xtIcWg85L3/l0cTkHQde+j
# KGDG2CdxBHtflLIUtwqD7JA2uCxWlIzRNgwT0kH2en0+QV8KziSGaqO2r06kwboq
# 2/xy4e98CEfSYwIDAQABo4IBWTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
# HQ4EFgQUyfwQ71DIy2t/vQhE7zpik+1bXpowHwYDVR0jBBgwFoAU7NfjgtJxXWRM
# 3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMD
# MHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl
# cnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v
# RGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRw
# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAc
# BgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATANBgkqhkiG9w0BAQsFAAOCAgEA
# C9sK17IdmKTCUatEs7+yewhJnJ4tyrLwNEnfl6HrG8Pm7HZ0b+5Jc+GGqJT8kRc7
# mihuVrdsYNHdicueDL9imhtCusI/rUmjwhtflp+XgLkmgLGrmsEho1b+lGiRp7LC
# /10di8SAOilDkHj5Zx142xRvBrrWj9eOdSGHwYubAsEd6CDojwcaVz9pfXMzYO3k
# c0O6PXg1TkcgkYlCUAuDHuk/sZx68W0FVj1P2iMh+VUq9lL1puroAydoeWVUh/+c
# MXeqfgpBqlAW+r8ma5F6yKL0stVQH8vYb1ES0mJSIPyIfkIjC1V0pbZS3p0QWsKa
# afEor8fLfLNfSxntVI/ugut0+6ekluPWRpEXH+JAiNdRjbLbZchCREe3/Xl0Ylwk
# A+eQVJfM0A7XiuFtY/mOpK2AN+E25t5mQYFhpdxZX5LTDKWgDnb+A6QnEt4iNyuk
# cLaJuS8IPgPz0E2ALZLt3Rqs+lXifK/GwnNIWQNbf7FmLDB9ph8i8dvsR1hsjc2K
# PEW4bAsbvLcz8hN1zE1/QbOV92vDGoFjwZOi2koQ+UyEh0e8jDFHAKJeTI+p8EPE
# /mqvojLFAnt31yXIA2tjt0ERtsjkhBNmZY6SEOfnIoOwvyqavLPya1Ut3/2cOFLu
# NQ8Ql6HaZsNQErnnzn+ZEAaUTkPZaeVyoHIkODECLzkwgga0MIIEnKADAgECAhAN
# x6xXBf8hmS5AQyIMOkmGMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUw
# EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x
# ITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yNTA1MDcwMDAw
# MDBaFw0zODAxMTQyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdp
# Q2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3Rh
# bXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQC0eDHTCphBcr48RsAcrHXbo0ZodLRRF51NrY0NlLWZloMs
# VO1DahGPNRcybEKq+RuwOnPhof6pvF4uGjwjqNjfEvUi6wuim5bap+0lgloM2zX4
# kftn5B1IpYzTqpyFQ/4Bt0mAxAHeHYNnQxqXmRinvuNgxVBdJkf77S2uPoCj7GH8
# BLuxBG5AvftBdsOECS1UkxBvMgEdgkFiDNYiOTx4OtiFcMSkqTtF2hfQz3zQSku2
# Ws3IfDReb6e3mmdglTcaarps0wjUjsZvkgFkriK9tUKJm/s80FiocSk1VYLZlDwF
# t+cVFBURJg6zMUjZa/zbCclF83bRVFLeGkuAhHiGPMvSGmhgaTzVyhYn4p0+8y9o
# HRaQT/aofEnS5xLrfxnGpTXiUOeSLsJygoLPp66bkDX1ZlAeSpQl92QOMeRxykvq
# 6gbylsXQskBBBnGy3tW/AMOMCZIVNSaz7BX8VtYGqLt9MmeOreGPRdtBx3yGOP+r
# x3rKWDEJlIqLXvJWnY0v5ydPpOjL6s36czwzsucuoKs7Yk/ehb//Wx+5kMqIMRvU
# BDx6z1ev+7psNOdgJMoiwOrUG2ZdSoQbU2rMkpLiQ6bGRinZbI4OLu9BMIFm1UUl
# 9VnePs6BaaeEWvjJSjNm2qA+sdFUeEY0qVjPKOWug/G6X5uAiynM7Bu2ayBjUwID
# AQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU729TSunk
# Bnx6yuKQVvYv1Ensy04wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08w
# DgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEB
# BGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsG
# AQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz
# dGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgG
# BmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBABfO+xaAHP4H
# PRF2cTC9vgvItTSmf83Qh8WIGjB/T8ObXAZz8OjuhUxjaaFdleMM0lBryPTQM2qE
# JPe36zwbSI/mS83afsl3YTj+IQhQE7jU/kXjjytJgnn0hvrV6hqWGd3rLAUt6vJy
# 9lMDPjTLxLgXf9r5nWMQwr8Myb9rEVKChHyfpzee5kH0F8HABBgr0UdqirZ7bowe
# 9Vj2AIMD8liyrukZ2iA/wdG2th9y1IsA0QF8dTXqvcnTmpfeQh35k5zOCPmSNq1U
# H410ANVko43+Cdmu4y81hjajV/gxdEkMx1NKU4uHQcKfZxAvBAKqMVuqte69M9J6
# A47OvgRaPs+2ykgcGV00TYr2Lr3ty9qIijanrUR3anzEwlvzZiiyfTPjLbnFRsjs
# Yg39OlV8cipDoq7+qNNjqFzeGxcytL5TTLL4ZaoBdqbhOhZ3ZRDUphPvSRmMThi0
# vw9vODRzW6AxnJll38F0cuJG7uEBYTptMSbhdhGQDpOXgpIUsWTjd6xpR6oaQf/D
# Jbg3s6KCLPAlZ66RzIg9sC+NJpud/v4+7RWsWCiKi9EOLLHfMR2ZyJ/+xhCx9yHb
# xtl5TPau1j/1MIDpMPx0LckTetiSuEtQvLsNz3Qbp7wGWqbIiOWCnb5WqxL3/BAP
# vIXKUjPSxyZsq8WhbaM2tszWkPZPubdcMIIG7TCCBNWgAwIBAgIQCoDvGEuN8QWC
# 0cR2p5V0aDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExMB4XDTI1MDYwNDAwMDAw
# MFoXDTM2MDkwMzIzNTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lD
# ZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBTSEEyNTYgUlNBNDA5NiBUaW1l
# c3RhbXAgUmVzcG9uZGVyIDIwMjUgMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
# AgoCggIBANBGrC0Sxp7Q6q5gVrMrV7pvUf+GcAoB38o3zBlCMGMyqJnfFNZx+wvA
# 69HFTBdwbHwBSOeLpvPnZ8ZN+vo8dE2/pPvOx/Vj8TchTySA2R4QKpVD7dvNZh6w
# W2R6kSu9RJt/4QhguSssp3qome7MrxVyfQO9sMx6ZAWjFDYOzDi8SOhPUWlLnh00
# Cll8pjrUcCV3K3E0zz09ldQ//nBZZREr4h/GI6Dxb2UoyrN0ijtUDVHRXdmncOOM
# A3CoB/iUSROUINDT98oksouTMYFOnHoRh6+86Ltc5zjPKHW5KqCvpSduSwhwUmot
# uQhcg9tw2YD3w6ySSSu+3qU8DD+nigNJFmt6LAHvH3KSuNLoZLc1Hf2JNMVL4Q1O
# pbybpMe46YceNA0LfNsnqcnpJeItK/DhKbPxTTuGoX7wJNdoRORVbPR1VVnDuSeH
# VZlc4seAO+6d2sC26/PQPdP51ho1zBp+xUIZkpSFA8vWdoUoHLWnqWU3dCCyFG1r
# oSrgHjSHlq8xymLnjCbSLZ49kPmk8iyyizNDIXj//cOgrY7rlRyTlaCCfw7aSURO
# wnu7zER6EaJ+AliL7ojTdS5PWPsWeupWs7NpChUk555K096V1hE0yZIXe+giAwW0
# 0aHzrDchIc2bQhpp0IoKRR7YufAkprxMiXAJQ1XCmnCfgPf8+3mnAgMBAAGjggGV
# MIIBkTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTkO/zyMe39/dfzkXFjGVBDz2GM
# 6DAfBgNVHSMEGDAWgBTvb1NK6eQGfHrK4pBW9i/USezLTjAOBgNVHQ8BAf8EBAMC
# B4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwgZUGCCsGAQUFBwEBBIGIMIGFMCQG
# CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXQYIKwYBBQUHMAKG
# UWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRp
# bWVTdGFtcGluZ1JTQTQwOTZTSEEyNTYyMDI1Q0ExLmNydDBfBgNVHR8EWDBWMFSg
# UqBQhk5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRU
# aW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNBMS5jcmwwIAYDVR0gBBkwFzAI
# BgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQBlKq3xHCcE
# ua5gQezRCESeY0ByIfjk9iJP2zWLpQq1b4URGnwWBdEZD9gBq9fNaNmFj6Eh8/Ym
# RDfxT7C0k8FUFqNh+tshgb4O6Lgjg8K8elC4+oWCqnU/ML9lFfim8/9yJmZSe2F8
# AQ/UdKFOtj7YMTmqPO9mzskgiC3QYIUP2S3HQvHG1FDu+WUqW4daIqToXFE/JQ/E
# ABgfZXLWU0ziTN6R3ygQBHMUBaB5bdrPbF6MRYs03h4obEMnxYOX8VBRKe1uNnzQ
# VTeLni2nHkX/QqvXnNb+YkDFkxUGtMTaiLR9wjxUxu2hECZpqyU1d0IbX6Wq8/gV
# utDojBIFeRlqAcuEVT0cKsb+zJNEsuEB7O7/cuvTQasnM9AWcIQfVjnzrvwiCZ85
# EE8LUkqRhoS3Y50OHgaY7T/lwd6UArb+BOVAkg2oOvol/DJgddJ35XTxfUlQ+8Hg
# gt8l2Yv7roancJIFcbojBcxlRcGG0LIhp6GvReQGgMgYxQbV1S3CrWqZzBt1R9xJ
# gKf47CdxVRd/ndUlQ05oxYy2zRWVFjF7mcr4C34Mj3ocCVccAvlKV9jEnstrniLv
# UxxVZE/rptb7IRE2lskKPIJgbaP5t2nGj/ULLi49xTcBZU8atufk+EMF/cWuiC7P
# OGT75qaL6vdCvHlshtjdNXOCIUjsarfNZzCCBxswggUDoAMCAQICEAYFIuuX3jJX
# cLz8AeYyZmYwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UEBhMCTFYxGTAXBgNVBAoT
# EEVuVmVycyBHcm91cCBTSUExMDAuBgNVBAMTJ0dvR2V0U1NMIEc0IENTIFJTQTQw
# OTYgU0hBMjU2IDIwMjIgQ0EtMTAeFw0yNTEyMjkwMDAwMDBaFw0yNjEyMjgyMzU5
# NTlaMGExCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZCYXllcm4xETAPBgNVBAcTCEZh
# cmNoYW50MRYwFAYDVQQKEw1NYW51ZWwgVGFuemVyMRYwFAYDVQQDEw1NYW51ZWwg
# VGFuemVyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuxv/b0+nhaEE
# 94ewtCEHJFhCdgrwn6iF1lZ41Y40alX0LnSGBniZxw480yw+F9o6qhhprIpKvEoW
# WW1q+KNMxjdbLgKPlMcudU8DTfUVxKRxlVuqSMdizawGlQgwtwrj5RDsWEE2k0nq
# guNejIRWrWDn6JblBaj/WIx8DZ9YuYl6egi/KtJF5lYC6StOgymjFdZQ6WKs5v9Q
# IZMCvMw0BqpthVkFUXEQ07J49/h50bkl1dfNAnT2K8V2QeVGuJ5YOSs3GFMXiAxZ
# g6LJTHT0poTL5I5XD62X9xQ56LMRa9IDmFx6x4sMDrkn5oNVSGw7Vmx7cnI/5u1C
# 1pEymuN8vTa3DeMcVOngt7k9wRLyA+OTzdlobO+o+Hfr2S9zFVh+7PVDC0wUzrTd
# W7u1c63IK89HPHnTc37lnGFQUGPXYKXIooN6UhIbHRDTUFVO/sH2LysKLRyFWEs8
# qdOsszmx2zL+WNKmjrBmQBvPzrV7IimT6rpmpCYxEnoY/bFvXsmK5avv/Osj+efn
# GkCc9hm7oLxy494MFy3u5S1XqkB0jweBCJo750sGG3N8QapKAicVYobSXBdeLxsm
# H82yzsczRNPRAdyAGbFIe5vVpl43OSwclH9gRpREbdE63Bb8Uvyn+8FqECSb1f7N
# uLXsMwue6nHTf7Lc/u48srSd6yRnY70CAwEAAaOCAdQwggHQMB8GA1UdIwQYMBaA
# FMn8EO9QyMtrf70IRO86YpPtW16aMB0GA1UdDgQWBBREAaQBaa2AQTUPKUUkMbf9
# S5f5sDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUFBwIBFhtodHRwOi8v
# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoG
# CCsGAQUFBwMDMIGXBgNVHR8EgY8wgYwwRKBCoECGPmh0dHA6Ly9jcmwzLmRpZ2lj
# ZXJ0LmNvbS9Hb0dldFNTTEc0Q1NSU0E0MDk2U0hBMjU2MjAyMkNBLTEuY3JsMESg
# QqBAhj5odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vR29HZXRTU0xHNENTUlNBNDA5
# NlNIQTI1NjIwMjJDQS0xLmNybDCBgwYIKwYBBQUHAQEEdzB1MCQGCCsGAQUFBzAB
# hhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTQYIKwYBBQUHMAKGQWh0dHA6Ly9j
# YWNlcnRzLmRpZ2ljZXJ0LmNvbS9Hb0dldFNTTEc0Q1NSU0E0MDk2U0hBMjU2MjAy
# MkNBLTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggIBABqpRiImY/Bk
# WSYmqNEZsmjcqPNRBEp9bYFMylajgTFR7dOLqF9sCStkO+cs/X64RKHkZtlaCrQa
# ecZp6j/Dpq1fnkp2NfwuAaX2Osp/h6tMKnjaun3gvTdmI/j2iyJv6YJRxZ7daee7
# q9bkPzCTINwNc7AqWHbZ3Whlg+MmhLXaFHpoasR5JO9Vh+A8z8Y593G1bc7/Wjp2
# JWBNrCLjSUuz83YcDtf7yaURHuoJ96NDrHpbggaYU1s75sMhfBwAMTuYN2HmQe6/
# ShmDwGPtNzja0OtUdL0siHUp3Gouuqiux+ii7sjK0BDqvW3cbIQhCY41HkrJt4YF
# e+KAUzZXeger2mTb9StmWLTLuqTKvUnCpzsVlqEO1I6NwsXgV2u46/0EYqk42vBT
# e1vwXXj2Eawp5g4sSHQqbcxTAr/H5wZDIMp32tSyDMqV7zXhT6UWvxy5xua9Zkvf
# j7bn7CzUWgX/+GMyP8KlgXEDG5rCY1uSxleFBvn0ACZjWRp+kWl17WbdrIL22Kkl
# 2s1px/g9dfRbhHwNVAX1Mx2S7uCreeRs5qAA1cEjct2ulpNIbuPAEDDKenUHDTfN
# k0osUL9uaOjSx6HiVkcwPHgFzyMyu+SCVOUTpBhwBXIH+/r77s6XVnQWmjUHcZUY
# Y6KuwZiQ+E7joeAaZ0JGyW+LWx8WPfg7MYIGSjCCBkYCAQEwbjBaMQswCQYDVQQG
# EwJMVjEZMBcGA1UEChMQRW5WZXJzIEdyb3VwIFNJQTEwMC4GA1UEAxMnR29HZXRT
# U0wgRzQgQ1MgUlNBNDA5NiBTSEEyNTYgMjAyMiBDQS0xAhAGBSLrl94yV3C8/AHm
# MmZmMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAw
# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisG
# AQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIMV+n4lDMYbFlwZq75TXnftq8DR17Fce
# 42ShoN4g2EpkMA0GCSqGSIb3DQEBAQUABIICAD19OtLrRDKpWvkQljDP6Tw/R3GS
# aij819UnKkL86Mw+ZKxlOv3Z2friEf06awvkwWr7QCk62PniwA40j7654Fn4Cf6J
# Sv/6Jy9nXedjuGk5K4L29Vk6VQQVYxCA/qnGO/FeU751+M0z+NRGMIeJjq0CaItq
# TQ/dbM7/h3AfwjSY/B+Kcfrx1SrnIWfLnIOhOTcgnXs/zAA7hgCvjxR/sG+fzL5o
# JJjv6O4jmfdxsDpP8ofhBsg1IoWkqiEFNt9d1augHpTuNSWZXeqM4hdx4gFj8JJD
# eOUiKFYFFsW1h9aSrnoxgmPsNmLYE4OY0Cvp5919JE1BKdzI6w+Awanf3T/TMRm5
# vuamy9N1wIfH+KhPAuzS+AWM9x8GoHdBMw0AzkAUJjgD0fVOY9LpMkf3/ad2zmv4
# g5kIv8kpLJQBkAeqalo8RwJ/FSCf8wjrQ2wIJX9HIq6qthii9qUNN3+9j0+2vk8h
# Kbje5uan81IvA/zJh/QU9TMmaHcVJHt08Oa4mh+WLur8KKpdebtFELDaTZKqvQlz
# jNsOJoqw0wYVaVLV49OcsXXVmC9mvVG9ltBTLQodiFCK0/0PIVZk9B8ZUIMuz5mF
# fGyfaJfPaIK34WGtmAYpjY1V1vzttCdtimlr3rfDX4Tv4VtWWjj6n9DrVCwuQ+TB
# G4wv6wi2QuCKRdXhoYIDJjCCAyIGCSqGSIb3DQEJBjGCAxMwggMPAgEBMH0waTEL
# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhE
# aWdpQ2VydCBUcnVzdGVkIEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAy
# MDI1IENBMQIQCoDvGEuN8QWC0cR2p5V0aDANBglghkgBZQMEAgEFAKBpMBgGCSqG
# SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI2MDUwNjEyMzAz
# MFowLwYJKoZIhvcNAQkEMSIEIHNK5/MG2sxo5PYtgIifV2F3rNVquHZUbQUC/E98
# 7ohvMA0GCSqGSIb3DQEBAQUABIICAANbzcqj1YArrmsozYBcMuwsaF1wig2AXbGt
# hwWsPwEEqAW8A2TVRtXZOyGE0r/kh1DFH9DoXAyAYlhr4zgIiWNvEe+9SdkorIQK
# wmF91vFYgVvV91SYBC7qLjtqr2EyR+6+rT3fxO+SHk0qfkgrFK/evd5UJoG/KE/m
# Qp6kLSnsyg88iPD8BesuV76591OL4GIStMYKyILZ+nSE/K3ayVftoiguadP9kuOB
# EAIy8oMVx4tZNYwe48Le5osjj6rl+Q0wa8vzPpzQ78U6sHHZCCsX+8T7G6GMUW2T
# U5tlS1HIeuT2Vk6p28mg5PHEW1L3p7gtIJHhWp3XxUWSvchw32Vor7x7HUXRYnAF
# phyh/M0W7uyy9zTQL8tuUQZv+HLK7TyXsHo8b4Wxj6QHd++woWbkMpdLLIHYLa3b
# 1foTezscC/6Nnq/klZUrpfoNtzmXKGuNF8mRU00tYEJY2ymi6ksXrkFgU7+7pQwW
# XkvVnNA0KcvnoD09wEMKw77PVtL6AN8TIeUj6Y9ezjkD+A1YNm0LNNG6qrPZsYie
# iAneP7Dk0G7j3zHIapHG1Io5BOXhAZSx80WqpXvfd1TDtBXik1dKjqSdI7xgN6YI
# 0XW/ZDG0VhxI++JLLysM5x3xQ4roTC1H9rQ8QHW37ao0HYR9n7VKxZ/JQoN68Zjp
# PEI8AF5l
# SIG # End signature block